--- a/ChangeLog.txt Sat Nov 12 15:48:55 2011 +0100
+++ b/ChangeLog.txt Sat Nov 12 17:06:49 2011 +0100
@@ -1,6 +1,37 @@
+ features
* bugfixes
+0.9.16 -> 0.9.17:
+ + New theme, Cave
+ + New voicepack, Hillbilly
+ + More attractive mission screen with previews
+ + Chat timestamping, links, input history, tab completion
+ + Customisable chat by dragging a .css file, see file generated by the /saveStyleSheet command
+ + Errors/warnings in chat instead of popup boxes
+ + Mousewheel to change hog/weapon counts in game creation
+ + Refresh DLC page on access, display notice if DLC page is not accessible
+ + Team colours changed, again
+ + Land texture on maps using mask of black
+ + Spread clouds/flakes over near/far layers for more 3D
+ + Team coloured RC/airstrike
+ + Icy girders/bridges on Snow/Christmas themes, support for ice land type (blue in mask)
+ + Sticky mines, mines activate 1s after use in infinite attack mode
+ + Grenades/bazooka/melon pieces/ballgun now kicked by explosions
+ + Minor theme optimisation, Optional SkyR
+ + Camera follows melon, clusterbomb, gas cloud
+ * Vertical movement should be restricted for small displays, camera will try less hard to keep hog in centre
+ * Keep mouse from jumping around when ammo menu is active
+ * Hogs can now move after trapping another hog in a portal loop
+ * ctrl-w no longer closes engine window
+ * Fix bugs in blowtorch angle/direction
+ * Fix playing notes on the piano
+ * Fix some colours in greyscale 3D
+ * Fix Lua overrides of map config
+ * Girders no longer make windows in tunnels
+ * Prevent some more escaping through border, firepunch, pickhammer
+ * Many frontend bugfixes, code cleanup. Crash in game abort, flake clipping, invalid state on room close
+ * Many other engine bugfixes. SDL event crasher, timebox crasher, birdy hang, desync on quits, crash in birdy eggshell, clouds on Deep Space theme, etc
+
0.9.15 -> 0.9.16:
+ In-game chat now supports backspace-repeat and Escape to close the text input area
+ Team status bars shrunk/made translucent if they take up a significant portion of the screen
--- a/QTfrontend/hwconsts.h Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/hwconsts.h Sat Nov 12 17:06:49 2011 +0100
@@ -110,14 +110,27 @@
0xffffef00, /. yellow ./ \
// add new colors here
0 }*/
-#define HW_TEAMCOLOR_ARRAY { 0xffd12b42, /* red */ \
+/*
+#define HW_TEAMCOLOR_ARRAY { 0xffd12b42, /. red ./ \
+ 0xff4980c1, /. blue ./ \
+ 0xff6ab530, /. green ./ \
+ 0xffbc64c4, /. purple ./ \
+ 0xffe76d14, /. orange ./ \
+ 0xff3fb6e6, /. cyan ./ \
+ 0xffe3e90c, /. yellow ./ \
+ 0xff61d4ac, /. mint ./ \
+ 0xfff1c3e1, /. pink ./ \
+ // add new colors here
+ 0 }*/
+/* another set. this one is a merge of mikade/bugq colours w/ a bit of channel feedback */
+#define HW_TEAMCOLOR_ARRAY { 0xffff0204, /* red */ \
0xff4980c1, /* blue */ \
- 0xff6ab530, /* green */ \
- 0xffbc64c4, /* purple */ \
- 0xffe76d14, /* orange */ \
- 0xff3fb6e6, /* cyan */ \
- 0xffe3e90c, /* yellow */ \
- 0xff61d4ac, /* mint */ \
- 0xfff1c3e1, /* pink */ \
+ 0xff1de6ba, /* teal */ \
+ 0xffb541ef, /* purple */ \
+ 0xffe55bb0, /* pink */ \
+ 0xff20bf00, /* green */ \
+ 0xfffe8b0e, /* orange */ \
+ 0xff5f3605, /* brown */ \
+ 0xffffff01, /* yellow */ \
/* add new colors here */ \
0 }
--- a/QTfrontend/hwform.cpp Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/hwform.cpp Sat Nov 12 17:06:49 2011 +0100
@@ -755,6 +755,9 @@
hwnet->NewNick(newNick);
config->setValue("net/nick", newNick);
config->updNetNick();
+
+ ui.pageRoomsList->setUser(nick);
+ ui.pageNetGame->setUser(nick);
}
void HWForm::NetAuthFailed()
@@ -800,8 +803,6 @@
hwnet=0;
}
- ui.pageRoomsList->chatWidget->clear();
-
hwnet = new HWNewNet();
GoToPage(ID_PAGE_CONNECTING);
@@ -939,6 +940,10 @@
config->setValue("net/nick",nick);
config->updNetNick();
}
+
+ ui.pageRoomsList->setUser(nick);
+ ui.pageNetGame->setUser(nick);
+
hwnet->Connect(hostName, port, nick);
}
@@ -997,6 +1002,9 @@
delete pnetserver;
pnetserver = 0;
}
+
+ if(hwnet)
+ hwnet->Disconnect();
}
void HWForm::ForcedDisconnect(const QString & reason)
@@ -1166,7 +1174,7 @@
ui.pageNetGame->pGameCFG->WeaponsName->currentIndex()
).toString();
- CreateGame(ui.pageNetGame->pGameCFG, ui.pageNetGame->pNetTeamsWidget, ammo);
+ CreateGame(ui.pageNetGame->pGameCFG, ui.pageNetGame->pNetTeamsWidget, ammo);
connect(game, SIGNAL(SendNet(const QByteArray &)), hwnet, SLOT(SendNet(const QByteArray &)));
connect(game, SIGNAL(SendChat(const QString &)), hwnet, SLOT(chatLineToNet(const QString &)));
--- a/QTfrontend/hwform.h Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/hwform.h Sat Nov 12 17:06:49 2011 +0100
@@ -157,11 +157,11 @@
ID_PAGE_DRAWMAP = 20,
ID_PAGE_DATADOWNLOAD = 21
};
- QPointer<HWGame> game;
- QPointer<HWNetServer> pnetserver;
- QPointer<HWNetRegisterServer> pRegisterServer;
- QPointer<HWTeam> editedTeam;
- QPointer<HWNewNet> hwnet;
+ QPointer<HWGame> game;
+ QPointer<HWNetServer> pnetserver;
+ QPointer<HWNetRegisterServer> pRegisterServer;
+ QPointer<HWTeam> editedTeam;
+ QPointer<HWNewNet> hwnet;
HWNamegen * namegen;
AmmoSchemeModel * ammoSchemeModel;
QStack<int> PagesStack;
Binary file QTfrontend/res/Star.png has changed
--- a/QTfrontend/res/css/chat.css Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/res/css/chat.css Sat Nov 12 17:06:49 2011 +0100
@@ -8,22 +8,42 @@
* see http://doc.qt.nokia.com/4.5/richtext-html-subset.html#css-properties
*
* In the QTfrontend of hedgewars also display:none; will work for class names
- * that start with msg_ and .TimeStamp - as long as they are referenced
- * directly and not within any hierachy.
+ * that start with msg_ and .timestamp - as long as they are referenced
+ * directly and not within any class hierachy.
+ * Note: Will only effect new lines!
*
******************************************************************************
*
* This file can be stored at different locations, but it will be read only
* once, based on first file found in this order:
*
- * <userdir>/Data/css/chat.css
- * <datadir>/css/chat.css
- * <internal default style-sheet>
+ * <userdir>/Data/css/chat.css ( create/see full path with: /saveStyleSheet )
+ * <datadir>/css/chat.css
+ * <internal default style-sheet>
*
*****************************************************************************/
+/* valid color values
+ *
+ * transparent (no color)
+ *
+ * colorname
+ * (a word that is the name of a valid color)
+ * available colors: http://www.w3.org/TR/SVG/types.html#ColorKeywords
+ * examples: red, steelblue, mintcream
+ *
+ * #RRGGBB
+ * (hexadecimal additive red-green-blue, max is ff, min 00, half is 80)
+ * examples: #ffff00 (yellow), #808080 (gray)
+ *
+ * rgb(r, g, b)
+ * (decimal additive red-green-blue, max is 255, min 0, half is 128)
+ * examples: rgb(135, 206, 250) (lightskyblue)
+ */
+
+
/* links */
-a { color:#c8c8ff; }
+a { color: #c8c8ff; }
/* appearance of the whole chat */
/* body { color: white; background-color: #000000; } */
@@ -48,6 +68,9 @@
.msg_FriendAction { color: #ff00ff; }
.msg_FriendAction .nick { color: #ff30ff; }
+/* uncomment next line to disable join and leave messages of non-friends */
+/* .msg_UserJoin { display:none; } */
+
/* timestamps */
.timestamp {
color: #e0d8e0;
@@ -58,15 +81,15 @@
/* display: none; */
}
+/* .timestamp:hours { display: none; } */
+.timestamp:seconds { display: none; }
+
/* you can also set timestamp style for different msg types */
.msg_FriendChat .timestamp { color: #ffffff; }
/* messages that contain your nickname */
.highlight { }
-.highlight .nick { color: red; } /* nicknames in highlighted messages */
-
-/* uncomment next line to disable join and leave messages of non-friends */
-/* .msg_UserJoin { display:none; } */
+.highlight .nick { color: #ff0000; } /* nicknames in highlighted messages */
/* system messages */
.msg_Error { color: #ff0000; }
--- a/QTfrontend/res/css/qt.css Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/res/css/qt.css Sat Nov 12 17:06:49 2011 +0100
@@ -11,9 +11,9 @@
* This file can be stored at different locations, but it will be read only
* once, based on first file found in this order:
*
- * <userdir>/Data/css/qt.css
- * <datadir>/css/qt.css
- * <internal default style-sheet> (:/res/css/qt.css)
+ * <userdir>/Data/css/qt.css
+ * <datadir>/css/qt.css
+ * <internal default style-sheet> (:/res/css/qt.css)
*
*****************************************************************************/
@@ -30,6 +30,8 @@
selection-color: #00351d;
}
+a { color:#c8c8ff; }
+
QLineEdit, QListWidget, QTableView, QTextBrowser, QSpinBox, QComboBox,
QComboBox QAbstractItemView, QMenu::item {
background-color: rgba(13, 5, 68, 70%);
--- a/QTfrontend/team.cpp Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/team.cpp Sat Nov 12 17:06:49 2011 +0100
@@ -28,10 +28,10 @@
#include "hats.h"
HWTeam::HWTeam(const QString & teamname) :
- QObject(0)
- , m_difficulty(0)
- , m_numHedgehogs(4)
- , m_isNetTeam(false)
+ QObject(0)
+ , m_difficulty(0)
+ , m_numHedgehogs(4)
+ , m_isNetTeam(false)
{
m_name = teamname;
OldTeamName = m_name;
@@ -55,9 +55,9 @@
}
HWTeam::HWTeam(const QStringList& strLst) :
- QObject(0)
- , m_numHedgehogs(4)
- , m_isNetTeam(true)
+ QObject(0)
+ , m_numHedgehogs(4)
+ , m_isNetTeam(true)
{
// net teams are configured from QStringList
if(strLst.size() != 23) throw HWTeamConstructException();
@@ -82,7 +82,7 @@
}
HWTeam::HWTeam() :
- QObject(0)
+ QObject(0)
, m_difficulty(0)
, m_numHedgehogs(4)
, m_isNetTeam(false)
@@ -110,51 +110,51 @@
}
HWTeam::HWTeam(const HWTeam & other) :
- QObject(0)
- , OldTeamName(other.OldTeamName)
- , m_name(other.m_name)
- , m_grave(other.m_grave)
- , m_fort(other.m_fort)
- , m_flag(other.m_flag)
- , m_voicepack(other.m_voicepack)
- , m_hedgehogs(other.m_hedgehogs)
- , m_difficulty(other.m_difficulty)
- , m_binds(other.m_binds)
- , m_numHedgehogs(other.m_numHedgehogs)
- , m_color(other.m_color)
- , m_isNetTeam(other.m_isNetTeam)
- , m_owner(other.m_owner)
- , m_campaignProgress(other.m_campaignProgress)
- , m_rounds(other.m_rounds)
- , m_wins(other.m_wins)
-// , AchievementProgress(other.AchievementProgress)
+ QObject(0)
+ , OldTeamName(other.OldTeamName)
+ , m_name(other.m_name)
+ , m_grave(other.m_grave)
+ , m_fort(other.m_fort)
+ , m_flag(other.m_flag)
+ , m_voicepack(other.m_voicepack)
+ , m_hedgehogs(other.m_hedgehogs)
+ , m_difficulty(other.m_difficulty)
+ , m_binds(other.m_binds)
+ , m_numHedgehogs(other.m_numHedgehogs)
+ , m_color(other.m_color)
+ , m_isNetTeam(other.m_isNetTeam)
+ , m_owner(other.m_owner)
+ , m_campaignProgress(other.m_campaignProgress)
+ , m_rounds(other.m_rounds)
+ , m_wins(other.m_wins)
+// , AchievementProgress(other.AchievementProgress)
{
}
HWTeam & HWTeam::operator = (const HWTeam & other)
{
- if(this != &other)
- {
- OldTeamName = other.OldTeamName;
- m_name = other.m_name;
- m_grave = other.m_grave;
- m_fort = other.m_fort;
- m_flag = other.m_flag;
- m_voicepack = other.m_voicepack;
-// m_hedgehogs = other.m_hedgehogs;
- m_difficulty = other.m_difficulty;
-// m_binds = other.m_binds;
- m_numHedgehogs = other.m_numHedgehogs;
- m_color = other.m_color;
- m_isNetTeam = other.m_isNetTeam;
- m_owner = other.m_owner;
- m_campaignProgress = other.m_campaignProgress;
- m_rounds = other.m_rounds;
- m_wins = other.m_wins;
- }
+ if(this != &other)
+ {
+ OldTeamName = other.OldTeamName;
+ m_name = other.m_name;
+ m_grave = other.m_grave;
+ m_fort = other.m_fort;
+ m_flag = other.m_flag;
+ m_voicepack = other.m_voicepack;
+// m_hedgehogs = other.m_hedgehogs;
+ m_difficulty = other.m_difficulty;
+// m_binds = other.m_binds;
+ m_numHedgehogs = other.m_numHedgehogs;
+ m_color = other.m_color;
+ m_isNetTeam = other.m_isNetTeam;
+ m_owner = other.m_owner;
+ m_campaignProgress = other.m_campaignProgress;
+ m_rounds = other.m_rounds;
+ m_wins = other.m_wins;
+ }
- return *this;
+ return *this;
}
bool HWTeam::loadFromFile()
--- a/QTfrontend/team.h Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/team.h Sat Nov 12 17:06:49 2011 +0100
@@ -44,7 +44,7 @@
// class representing a team
class HWTeam : public QObject
{
- Q_OBJECT
+ Q_OBJECT
public:
@@ -52,7 +52,7 @@
HWTeam(const QString & teamname);
HWTeam(const QStringList& strLst);
HWTeam();
- HWTeam(const HWTeam & other);
+ HWTeam(const HWTeam & other);
// file operations
static HWTeam loadFromFile(const QString & teamName);
@@ -96,9 +96,9 @@
QStringList teamGameConfig(quint32 InitHealth) const;
// comparison operators
- bool operator == (const HWTeam& t1) const;
- bool operator < (const HWTeam& t1) const;
- HWTeam & operator = (const HWTeam & other);
+ bool operator == (const HWTeam& t1) const;
+ bool operator < (const HWTeam& t1) const;
+ HWTeam & operator = (const HWTeam & other);
private:
@@ -112,11 +112,11 @@
QString m_flag;
QString m_voicepack;
HWHog m_hedgehogs[HEDGEHOGS_PER_TEAM];
- quint8 m_difficulty;
+ quint8 m_difficulty;
BindAction m_binds[BINDS_NUMBER];
// class members that contain info for the current game setup
- quint8 m_numHedgehogs;
+ quint8 m_numHedgehogs;
QColor m_color;
bool m_isNetTeam;
QString m_owner;
--- a/QTfrontend/ui/page/pagenetgame.cpp Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/page/pagenetgame.cpp Sat Nov 12 17:06:49 2011 +0100
@@ -174,3 +174,7 @@
leRoomName->setVisible(isMaster);
}
+void PageNetGame::setUser(const QString & nickname)
+{
+ pChatWidget->setUser(nickname);
+}
--- a/QTfrontend/ui/page/pagenetgame.h Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/page/pagenetgame.h Sat Nov 12 17:06:49 2011 +0100
@@ -59,6 +59,7 @@
public slots:
void setReadyStatus(bool isReady);
+ void setUser(const QString & nickname);
void onUpdateClick();
void setMasterMode(bool isMaster);
--- a/QTfrontend/ui/page/pageroomslist.cpp Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/page/pageroomslist.cpp Sat Nov 12 17:06:49 2011 +0100
@@ -446,3 +446,8 @@
{
lblCount->setText(tr("%1 players online", 0, cnt).arg(cnt));
}
+
+void PageRoomsList::setUser(const QString & nickname)
+{
+ chatWidget->setUser(nickname);
+}
--- a/QTfrontend/ui/page/pageroomslist.h Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/page/pageroomslist.h Sat Nov 12 17:06:49 2011 +0100
@@ -49,8 +49,9 @@
QLabel * lblCount;
public slots:
+ void setAdmin(bool);
void setRoomsList(const QStringList & list);
- void setAdmin(bool);
+ void setUser(const QString & nickname);
void updateNickCounter(int cnt);
signals:
--- a/QTfrontend/ui/page/pagetraining.cpp Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/page/pagetraining.cpp Sat Nov 12 17:06:49 2011 +0100
@@ -79,7 +79,7 @@
pageLayout->addWidget(lstMissions, 1, 0, 1, 2); // span 2 columns
// let's not make the list use more space than needed
- lstMissions->setFixedWidth(360);
+ lstMissions->setFixedWidth(400);
pageLayout->setAlignment(lstMissions, Qt::AlignHCenter);
return pageLayout;
@@ -139,6 +139,7 @@
// preload mission info for current locale
m_info = new QSettings(infoFile, QSettings::IniFormat, this);
+ m_info->setIniCodec("UTF-8");
QStringList missionList = dataMgr.entryList(
--- a/QTfrontend/ui/widget/bgwidget.cpp Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/widget/bgwidget.cpp Sat Nov 12 17:06:49 2011 +0100
@@ -19,9 +19,10 @@
#include "bgwidget.h"
-SpritePosition::SpritePosition(QWidget * parent, int sh)
+SpritePosition::SpritePosition(QWidget * parent, int sw, int sh)
{
wParent = parent;
+ iSpriteWidth = sw;
iSpriteHeight = sh;
reset();
}
@@ -36,15 +37,32 @@
fY += fYMov;
iAngle += 4;
if (iAngle >= 360) iAngle = 0;
- if (fY > wParent->height()) reset();
+ if ((fX - fXMov) > wParent->width()) reset();
+ else if ((fY - fYMov) > wParent->height()) reset();
}
void SpritePosition::reset()
{
- fY = -1 * iSpriteHeight;
- fX = (qrand() % ((int)(wParent->width() * 1.5))) - wParent->width()/2;
+ // random movement values
fYMov = ((qrand() % 400)+300) / 100.0f;
- fXMov = fYMov * 0.2f+((qrand()%100)/100.0f * 0.6f); //so between 0.2 and 0.6, or 0.5 +/- 0.3
+ fXMov = fYMov * 0.2f+((qrand()%100)/100.0f * 0.6f); //so between 0.2 and 0.8, or 0.5 +/- 0.3
+
+ // random respawn locations
+ int tmp = fXMov * (wParent->height() / fYMov);
+ fX = (qrand() % (wParent->width() + tmp)) - tmp;
+
+ // adjust respawn location to be next to (but outside) the parent's limits
+ if (fX > -iSpriteWidth)
+ {
+ fY = -1 * iSpriteHeight;
+ }
+ else
+ {
+ fY = qrand() % wParent->height();
+ fX = -iSpriteWidth;
+ }
+
+ // random initial angle
iAngle = qrand() % 360;
}
@@ -71,9 +89,9 @@
setAutoFillBackground(false);
- for (int i = 0; i < SPRITE_MAX; i++) spritePositions[i] = new SpritePosition(this, sprite.height());
+ for (int i = 0; i < SPRITE_MAX; i++) spritePositions[i] = new SpritePosition(this, sprite.width(), sprite.height());
- for (int i = 0; i < 360; i++)
+ for (int i = 0; i < 90; i++)
{
rotatedSprites[i] = new QImage(sprite.width(), sprite.height(), QImage::Format_ARGB32);
rotatedSprites[i]->fill(0);
@@ -85,7 +103,7 @@
// p.setRenderHint(QPainter::Antialiasing);
p.setRenderHint(QPainter::SmoothPixmapTransform);
p.translate(translate.x(), translate.y());
- p.rotate(i);
+ p.rotate(4 * i);
p.translate(-1*translate.x(), -1*translate.y());
p.drawImage(0, 0, sprite);
}
@@ -98,7 +116,7 @@
BGWidget::~BGWidget()
{
for (int i = 0; i < SPRITE_MAX; i++) delete spritePositions[i];
- for (int i = 0; i < 360; i++) delete rotatedSprites[i];
+ for (int i = 0; i < 90; i++) delete rotatedSprites[i];
delete timerAnimation;
}
@@ -107,13 +125,15 @@
Q_UNUSED(event);
QPainter p;
+
p.begin(this);
- //p.setRenderHint(QPainter::Antialiasing);
+
for (int i = 0; i < SPRITE_MAX; i++)
{
QPoint point = spritePositions[i]->pos();
- p.drawImage(point.x(), point.y(), *rotatedSprites[spritePositions[i]->getAngle()]);
+ p.drawImage(point.x(), point.y(), *rotatedSprites[spritePositions[i]->getAngle()/4]);
}
+
p.end();
}
@@ -121,9 +141,13 @@
{
for (int i = 0; i < SPRITE_MAX; i++)
{
- // bottom edge of star *seems* clipped, but in fact, if I switch to just plain old repaint()/update() it is still clipped - artifact of transform? As for 5, is arbitrary number. 4 was noticeably clipping, 5 seemed same as update() - I assume extra room is due to rotation and value really should be calculated proportional to width/height
- update(spritePositions[i]->pos().x(),spritePositions[i]->pos().y(), sprite.width()+5, sprite.height()+5);
+ QPoint oldPos = spritePositions[i]->pos();
spritePositions[i]->move();
+ QPoint newPos = spritePositions[i]->pos();
+
+ int xdiff = newPos.x() - oldPos.x();
+ int ydiff = newPos.y() - oldPos.y();
+ update(oldPos.x(), oldPos.y(), xdiff+sprite.width(), ydiff+sprite.height());
}
}
--- a/QTfrontend/ui/widget/bgwidget.h Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/widget/bgwidget.h Sat Nov 12 17:06:49 2011 +0100
@@ -28,14 +28,14 @@
#include <QTime>
#include <QPoint>
-#define SPRITE_MAX 12
+#define SPRITE_MAX 10
#define ANIMATION_INTERVAL 40
class SpritePosition
{
public:
- SpritePosition(QWidget * parent, int sh);
+ SpritePosition(QWidget * parent, int sw, int sh);
~SpritePosition();
private:
float fX;
@@ -45,6 +45,7 @@
int iAngle;
QWidget * wParent;
int iSpriteHeight;
+ int iSpriteWidth;
public:
void move();
void reset();
--- a/QTfrontend/ui/widget/chatwidget.cpp Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/widget/chatwidget.cpp Sat Nov 12 17:06:49 2011 +0100
@@ -34,6 +34,8 @@
#include <QDateTime>
#include <QTime>
+#include <QMessageBox>
+
#include "HWDataManager.h"
#include "hwconsts.h"
@@ -103,6 +105,7 @@
QString * HWChatWidget::s_styleSheet = NULL;
QStringList * HWChatWidget::s_displayNone = NULL;
bool HWChatWidget::s_isTimeStamped = true;
+QString HWChatWidget::s_tsFormat = ":mm:ss";
const QString & HWChatWidget::styleSheet()
{
@@ -173,6 +176,7 @@
QStringList victims = QString(style).
remove(displayed). // remove visible stuff
+ trimmed().
split(split). // get a list of the names
filter(nohierarchy). // only direct class names
replaceInStrings(QRegExp("^."),""); // crop .
@@ -183,6 +187,17 @@
s_isTimeStamped = false;
victims.removeAll("timestamp");
}
+ else
+ {
+ s_isTimeStamped = true;
+ s_tsFormat =
+ ((victims.contains("timestamp:hours"))?"":"hh:") +
+ QString("mm") +
+ ((victims.contains("timestamp:seconds"))?"":":ss");
+ }
+
+ victims.removeAll("timestamp:hours");
+ victims.removeAll("timestamp:seconds");
victims.removeDuplicates();
@@ -235,8 +250,11 @@
if (notify)
m_helloSound = HWDataManager::instance().findFileForRead(
"Sounds/voices/Classic/Hello.ogg");
+
m_hilightSound = HWDataManager::instance().findFileForRead(
- "Sounds/1C.ogg");
+ "Sounds/beep.ogg");
+
+ //m_hilightSound = m_helloSound;//"Sounds/beep.ogg";
}
mainLayout.setSpacing(1);
@@ -468,12 +486,17 @@
saveList(friendsList, nick.toLower() + "_friends.txt");
}
+
void HWChatWidget::returnPressed()
{
QStringList lines = chatEditLine->text().split('\n');
chatEditLine->rememberCurrentText();
foreach (const QString &line, lines)
{
+ // skip empty/whitespace lines
+ if (line.trimmed().isEmpty())
+ continue;
+
if (!parseCommand(line))
emit chatLine(line);
}
@@ -483,13 +506,14 @@
// "link" nick, but before that encode it in base64 to make sure it can't
// intefere with html/url syntax the nick is put as querystring as putting
// it as host would convert it to it's lower case variant
-QString HWChatWidget::linkedNick(const QString & nickName)
+QString HWChatWidget::linkedNick(const QString & nickname)
{
- if (nickName != m_userNick)
+ if (nickname != m_userNick)
return QString("<a href=\"hwnick://?%1\" class=\"nick\">%2</a>").arg(
- QString(nickName.toUtf8().toBase64())).arg(nickName);
- else
- return QString("<span class=\"nick\">%1</span>").arg(nickName);
+ QString(nickname.toUtf8().toBase64())).arg(Qt::escape(nickname));
+
+ // unlinked nick (if own one)
+ return QString("<span class=\"nick\">%1</span>").arg(Qt::escape(nickname));
}
@@ -539,7 +563,8 @@
bool isHL = false;
- if ((!nick.isEmpty()) && (nick != m_userNick))
+ if ((c != 3) && (!nick.isEmpty()) &&
+ (nick != m_userNick) && (!m_userNick.isEmpty()))
{
QString lcStr = str.toLower();
@@ -568,7 +593,7 @@
{
QString tsMarkUp = "<span class=\"timestamp\">[%1]</span> ";
QTime now = QDateTime::currentDateTime().time();
- line = tsMarkUp.arg(now.toString(":mm:ss")) + line;
+ line = tsMarkUp.arg(now.toString(s_tsFormat)) + line;
}
line = QString("<span class=\"%1\">%2</span>").arg(cssClass).arg(line);
@@ -637,7 +662,6 @@
chatText->clear();
chatStrings.clear();
chatNicks->clear();
- m_userNick = gameSettings->value("net/nick","").toString();
// clear and re compile regexp for highlighting
m_highlights.clear();
@@ -686,7 +710,10 @@
{
QListWidgetItem * curritem = chatNicks->currentItem();
if (curritem)
+ {
+ displayNotice(tr("Kicking %1 ...").arg(Qt::escape(curritem->text())));
emit kick(curritem->text());
+ }
}
void HWChatWidget::onBan()
@@ -899,7 +926,7 @@
setStyleSheet(style);
chatText->document()->setDefaultStyleSheet(*s_styleSheet);
displayNotice(tr("Stylesheet imported from %1").arg(path));
- displayNotice(tr("Enter %1 if you want to use the current styleSheet in future, enter %2 to reset!").arg("/saveStyleSheet").arg("/discardStyleSheet"));
+ displayNotice(tr("Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!").arg("/saveStyleSheet").arg("/discardStyleSheet"));
if (file.isOpen())
file.close();
@@ -971,3 +998,11 @@
return false;
}
+
+
+void HWChatWidget::setUser(const QString & nickname)
+{
+ m_userNick = nickname;
+ nickRemoved(nickname);
+ clear();
+}
--- a/QTfrontend/ui/widget/chatwidget.h Sat Nov 12 15:48:55 2011 +0100
+++ b/QTfrontend/ui/widget/chatwidget.h Sat Nov 12 17:06:49 2011 +0100
@@ -25,6 +25,7 @@
#include <QString>
#include <QGridLayout>
#include <QList>
+#include <QPair>
#include <QRegExp>
#include "SDLInteraction.h"
@@ -78,6 +79,7 @@
void displayError(const QString & message);
void displayNotice(const QString & message);
void displayWarning(const QString & message);
+ void setUser(const QString & nickname);
protected:
virtual void dragEnterEvent(QDragEnterEvent * event);
@@ -87,6 +89,7 @@
static QString * s_styleSheet;
static QStringList * s_displayNone;
static bool s_isTimeStamped;
+ static QString s_tsFormat;
static const QRegExp URLREGEXP;
static void setStyleSheet(const QString & styleSheet = "");
@@ -99,7 +102,7 @@
bool parseCommand(const QString & line);
void discardStyleSheet();
void saveStyleSheet();
- QString linkedNick(const QString & nickName);
+ QString linkedNick(const QString & nickname);
public slots:
void onChatString(const QString& str);
--- a/hedgewars/GSHandlers.inc Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/GSHandlers.inc Sat Nov 12 17:06:49 2011 +0100
@@ -385,7 +385,8 @@
Gear^.X := Gear^.X + Gear^.dX;
Gear^.Y := Gear^.Y + Gear^.dY;
- CheckGearDrowning(Gear);
+ if Gear^.Kind <> gtBee then
+ CheckGearDrowning(Gear);
//if (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) < _0_0002) and
if ((Gear^.dX.QWordValue + Gear^.dY.QWordValue) < _0_02.QWordValue) and
(not isFalling) then
@@ -841,16 +842,18 @@
var
t: hwFloat;
gX,gY,i: LongInt;
- nuw: boolean;
+ uw, nuw: boolean;
flower: PVisualGear;
-const uw: boolean = false;
begin
AllInactive := false;
gX := hwRound(Gear^.X);
gY := hwRound(Gear^.Y);
- nuw := (cWaterLine < gy + Gear^.Radius);
- if nuw and not uw then
+ uw := (Gear^.Tag <> 0); // was bee underwater last tick?
+ nuw := (cWaterLine < gy + Gear^.Radius); // is bee underwater now?
+
+ // if water entered or left
+ if nuw <> uw then
begin
AddVisualGear(gX, cWaterLine, vgtSplash);
AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet);
@@ -858,36 +861,43 @@
AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet);
AddVisualGear(gX - 3 + Random(6), cWaterLine, vgtDroplet);
StopSound(Gear^.SoundChannel);
- Gear^.SoundChannel := LoopSound(sndBeeWater);
- uw := nuw
- end
- else if not nuw and uw then
+ if nuw then
begin
- AddVisualGear(gX, cWaterLine, vgtSplash);
- StopSound(Gear^.SoundChannel);
+ Gear^.SoundChannel := LoopSound(sndBeeWater);
+ Gear^.Tag := 1;
+ end
+ else
+ begin
Gear^.SoundChannel := LoopSound(sndBee);
- uw := nuw
+ Gear^.Tag := 0;
end;
-
-
- if (GameTicks and $F) = 0 then
+ end;
+
+
+ if Gear^.Timer = 0 then
+ Gear^.RenderTimer:= false
+ else
begin
- if (GameTicks and $30) = 0 then
- AddVisualGear(gX, gY, vgtBeeTrace);
- Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000064 * (Gear^.Target.X - gX));
- Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000064 * (Gear^.Target.Y - gY));
- // make sure new speed isn't higher than original one (which we stored in Friction variable)
- t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY);
- Gear^.dX := Gear^.dX * t;
- Gear^.dY := Gear^.dY * t;
+ if (GameTicks and $F) = 0 then
+ begin
+ if (GameTicks and $30) = 0 then
+ AddVisualGear(gX, gY, vgtBeeTrace);
+ Gear^.dX := Gear^.Elasticity * (Gear^.dX + _0_000064 * (Gear^.Target.X - gX));
+ Gear^.dY := Gear^.Elasticity * (Gear^.dY + _0_000064 * (Gear^.Target.Y - gY));
+ // make sure new speed isn't higher than original one (which we stored in Friction variable)
+ t := Gear^.Friction / Distance(Gear^.dX, Gear^.dY);
+ Gear^.dX := Gear^.dX * t;
+ Gear^.dY := Gear^.dY * t;
+ end;
+
+ Gear^.X := Gear^.X + Gear^.dX;
+ Gear^.Y := Gear^.Y + Gear^.dY;
+
end;
- Gear^.X := Gear^.X + Gear^.dX;
- Gear^.Y := Gear^.Y + Gear^.dY;
CheckCollision(Gear);
- dec(Gear^.Timer);
- if ((Gear^.State and gstCollision) <> 0) or (Gear^.Timer = 0) then
+ if ((Gear^.State and gstCollision) <> 0) then
begin
StopSound(Gear^.SoundChannel);
doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound);
@@ -908,6 +918,19 @@
end;
DeleteGear(Gear);
end;
+
+ if (Gear^.Timer > 0) then
+ dec(Gear^.Timer)
+ else
+ begin
+ if nuw then
+ begin
+ StopSound(Gear^.SoundChannel);
+ CheckGearDrowning(Gear);
+ end
+ else
+ doStepFallingGear(Gear);
+ end;
end;
procedure doStepBee(Gear: PGear);
@@ -1262,8 +1285,7 @@
inc(i, 1)
end;
- if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9)
- , lfIndestructible) then
+ if CheckLandValue(hwRound(Gear^.X + Gear^.dX + SignAs(_6,Gear^.dX)), hwRound(Gear^.Y + _1_9), lfIndestructible) then
begin
Gear^.X := Gear^.X + Gear^.dX;
Gear^.Y := Gear^.Y + _1_9;
@@ -1278,14 +1300,20 @@
end
else
begin
- Gear^.dY := Gear^.dY + cGravity;
- Gear^.Y := Gear^.Y + Gear^.dY;
+ if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y + Gear^.dY + cGravity), lfIndestructible) then
+ begin
+ Gear^.dY := Gear^.dY + cGravity;
+ Gear^.Y := Gear^.Y + Gear^.dY
+ end;
if hwRound(Gear^.Y) > cWaterLine then Gear^.Timer := 1
end;
Gear^.X := Gear^.X + HHGear^.dX;
- HHGear^.X := Gear^.X;
- HHGear^.Y := Gear^.Y - int2hwFloat(cHHRadius);
+ if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y)-cHHRadius, lfIndestructible) then
+ begin
+ HHGear^.X := Gear^.X;
+ HHGear^.Y := Gear^.Y - int2hwFloat(cHHRadius)
+ end;
if (Gear^.Message and gmAttack) <> 0 then
if (Gear^.State and gsttmpFlag) <> 0 then Gear^.Timer := 1
@@ -1401,10 +1429,13 @@
end;
if b then
- DrawTunnel(HHGear^.X - Gear^.dX * cHHRadius, HHGear^.Y - _4 - Gear^.dY * cHHRadius + hwAbs(
- Gear^.dY) * 7,
+ begin
+ DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius,
+ HHGear^.Y + Gear^.dY * cHHRadius - _1 -
+ ((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7),
Gear^.dX, Gear^.dY,
- cHHRadius * 5, cHHRadius * 2 + 7);
+ cHHStepTicks, cHHRadius * 2 + 7);
+ end;
if (TurnTimeLeft = 0) or (Gear^.Timer = 0) or ((HHGear^.Message and gmAttack) <> 0) then
begin
@@ -3623,7 +3654,8 @@
Gear^.X := HHGear^.X;
Gear^.Y := HHGear^.Y;
// For some reason I need to reapply followgear here, something else grabs it otherwise.
- if not bShowAmmoMenu and not CurrentTeam^.ExtDriven then FollowGear := HHGear;
+ // This is probably not needed anymore
+ if not CurrentTeam^.ExtDriven then FollowGear := HHGear;
if not isUnderWater and hasBorder and ((HHGear^.X < _0) or (hwRound(HHGear^.X) > LAND_WIDTH)) then HHGear^.dY.isNegative:= false;
if ((Gear^.State and gsttmpFlag) = 0) or (HHGear^.dY < _0) then doStepHedgehogMoving(HHGear);
@@ -3754,7 +3786,8 @@
Gear^.X := HHGear^.X;
Gear^.Y := HHGear^.Y - int2hwFloat(32);
// For some reason I need to reapply followgear here, something else grabs it otherwise.
- if not bShowAmmoMenu then FollowGear := HHGear;
+ // this is probably not needed anymore
+ if not CurrentTeam^.ExtDriven then FollowGear := HHGear;
if ((Gear^.State and gsttmpFlag) = 0) or (HHGear^.dY < _0) then doStepHedgehogMoving(HHGear);
@@ -4377,9 +4410,9 @@
odY: hwFloat;
begin
AllInactive := false;
- if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and ((CurrentHedgehog^.Gear^.
- Message and gmSlot) <> 0) then
- begin
+ if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and
+ ((CurrentHedgehog^.Gear^.Message and gmSlot) <> 0) then
+ begin
case CurrentHedgehog^.Gear^.MsgParam of
0: PlaySound(sndPiano0);
1: PlaySound(sndPiano1);
@@ -4394,18 +4427,18 @@
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote);
CurrentHedgehog^.Gear^.MsgParam := 0;
CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and not gmSlot;
- end;
+ end;
if (*((Gear^.Pos = 3) and ((GameFlags and gfSolidLand) <> 0)) or*) (Gear^.Pos = 5) then
- // bounce up to 10 times (3 times on gameflagged solid land) before dropping past landscape
- begin
+ begin
Gear^.dY := Gear^.dY + cGravity * 2;
Gear^.Y := Gear^.Y + Gear^.dY;
CheckGearDrowning(Gear);
if (Gear^.State and gstDrowning) <> 0 then
- begin
+ begin
+ OnUsedAmmo(CurrentHedgehog^);
if CurrentHedgehog^.Gear <> nil then
- begin
+ begin
// Drown the hedgehog. Could also just delete it, but hey, this gets a caption
CurrentHedgehog^.Gear^.Active := true;
CurrentHedgehog^.Gear^.X := Gear^.X;
@@ -4413,19 +4446,20 @@
CurrentHedgehog^.Unplaced := false;
if TagTurnTimeLeft = 0 then TagTurnTimeLeft:= TurnTimeLeft;
TurnTimeLeft:= 0
+ end;
+ ResumeMusic
end;
- ResumeMusic
+ exit
end;
- exit
- end;
odY:= Gear^.dY;
doStepFallingGear(Gear);
if (Gear^.State and gstDrowning) <> 0 then
- begin
+ begin
+ OnUsedAmmo(CurrentHedgehog^);
if CurrentHedgehog^.Gear <> nil then
- begin
+ begin
// Drown the hedgehog. Could also just delete it, but hey, this gets a caption
CurrentHedgehog^.Gear^.Active := true;
CurrentHedgehog^.Gear^.X := Gear^.X;
@@ -4433,20 +4467,20 @@
CurrentHedgehog^.Unplaced := false;
if TagTurnTimeLeft = 0 then TagTurnTimeLeft:= TurnTimeLeft;
TurnTimeLeft:= 0
- end;
+ end;
ResumeMusic
- end
+ end
else if (Gear^.State and gstCollision) <> 0 then
begin
- r0 := GetRandom(21);
- r1 := GetRandom(21);
- doMakeExplosion(hwRound(Gear^.X) - 30 - r0, hwRound(Gear^.Y) + 40, 40 + r1, Gear^.Hedgehog, 0);
- doMakeExplosion(hwRound(Gear^.X) + 30 + r1, hwRound(Gear^.Y) + 40, 40 + r0, Gear^.Hedgehog, 0);
- doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 80 + r0, Gear^.Hedgehog, EXPLAutoSound);
- for r0:= 0 to 4 do
- AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote);
- Gear^.dY := odY * -1 + cGravity * 2;
- Gear^.Pos := Gear^.Pos + 1;
+ r0 := GetRandom(21);
+ r1 := GetRandom(21);
+ doMakeExplosion(hwRound(Gear^.X) - 30 - r0, hwRound(Gear^.Y) + 40, 40 + r1, Gear^.Hedgehog, 0);
+ doMakeExplosion(hwRound(Gear^.X) + 30 + r1, hwRound(Gear^.Y) + 40, 40 + r0, Gear^.Hedgehog, 0);
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 80 + r0, Gear^.Hedgehog, EXPLAutoSound);
+ for r0:= 0 to 4 do
+ AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote);
+ Gear^.dY := odY * -1 + cGravity * 2;
+ Gear^.Pos := Gear^.Pos + 1;
end
else
Gear^.dY := Gear^.dY + cGravity * 2;
--- a/hedgewars/HHHandlers.inc Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/HHHandlers.inc Sat Nov 12 17:06:49 2011 +0100
@@ -181,6 +181,7 @@
if ((State and gstHHDriven) <> 0)and
((State and (gstAttacked or gstHHChooseTarget)) = 0) and
(((State and gstMoving) = 0) or
+ (Power > 0) or
(CurAmmoType = amTeleport) or
// Allow attacks while moving on ammo with AltAttack
((CurAmmoGear <> nil) and ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) <> 0)) or
@@ -355,8 +356,7 @@
amBazooka, amSnowball,
amBee, amSMine,
amMortar, amWatermelon,
- amHellishBomb, amDrill,
- amPiano: FollowGear:= newGear;
+ amHellishBomb, amDrill: FollowGear:= newGear;
amShotgun, amPickHammer,
amRope, amDEagle,
@@ -371,7 +371,7 @@
amJetpack, amBirdy,
amFlamethrower, amLandGun,
amResurrector, amStructure,
- amTardis: CurAmmoGear:= newGear;
+ amTardis, amPiano: CurAmmoGear:= newGear;
end;
if (CurAmmoType = amMine) or (CurAmmoType = amSMine) and (GameFlags and gfInfAttack <> 0) then newGear^.FlightTime:= GameTicks + 1000;
if Ammoz[CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0 then
@@ -771,6 +771,7 @@
Gear^.dY:= _0;
Gear^.dX:= _0;
Gear^.State:= Gear^.State and not gstMoving;
+ while TestCollisionYWithGear(Gear,1) = 0 do Gear^.Y:= Gear^.Y+_1;
exit
end;
isFalling:= (Gear^.dY.isNegative) or not TestCollisionYKick(Gear, 1);
@@ -816,7 +817,10 @@
if ((Gear^.State and gstMoving) <> 0) then
begin
- if land and lfIce <> 0 then Gear^.dX:= Gear^.dX * (_1 - (_1 - Gear^.Friction) / _2)
+ if land and lfIce <> 0 then
+ begin
+ Gear^.dX:= Gear^.dX * (_1 - (_1 - Gear^.Friction) / _2)
+ end
else Gear^.dX:= Gear^.dX * Gear^.Friction;
end
end;
@@ -841,10 +845,12 @@
if hwAbs(Gear^.dX) > _0_02 then Gear^.dX:= -Gear^.Elasticity * Gear^.dX
else begin
Gear^.State:= Gear^.State and not gstMoving;
+ while TestCollisionYWithGear(Gear,1) = 0 do Gear^.Y:= Gear^.Y+_1;
SetLittle(Gear^.dX)
end
else begin
Gear^.State:= Gear^.State and not gstMoving;
+ while TestCollisionYWithGear(Gear,1) = 0 do Gear^.Y:= Gear^.Y+_1;
SetLittle(Gear^.dX)
end
else if (hwAbs(Gear^.dX) > cLittle)
@@ -857,6 +863,7 @@
begin
Gear^.State:= Gear^.State and not gstWinner;
Gear^.State:= Gear^.State and not gstMoving;
+ while TestCollisionYWithGear(Gear,1) = 0 do Gear^.Y:= Gear^.Y+_1;
SetLittle(Gear^.dX);
Gear^.dY:= _0
end else Gear^.State:= Gear^.State or gstMoving;
@@ -876,7 +883,10 @@
Gear^.Y:= Gear^.Y + _1
end;
CheckGearDrowning(Gear);
- if (Gear^.State and gstDrowning) <> 0 then isCursorVisible:= false
+ // hide target cursor if current hog is drowning
+ if (Gear^.State and gstDrowning) <> 0 then
+ if (CurrentHedgehog^.Gear = Gear) then
+ isCursorVisible:= false
end;
if (hwAbs(Gear^.dY) > _0) and (Gear^.FlightTime > 0) and ((GameFlags and gfLowGravity) = 0) then
@@ -1098,7 +1108,9 @@
procedure doStepHedgehog(Gear: PGear);
(*
var x,y,tx,ty: LongInt;
- tdX, tdY, slope: hwFloat; *)
+ tdX, tdY, slope: hwFloat;
+ land: Word; *)
+var slope: hwFloat;
begin
if (Gear^.Message and gmDestroy) <> 0 then
begin
@@ -1116,32 +1128,28 @@
else
doStepHedgehogDriven(Gear)
end;
-
-if ((GameTicks mod 50) = 0) and (Gear^.State and (gstMoving or gstHHJumping or gstHHHJump) = 0) and ((Gear^.Message and gmAllStoppable) = 0) and
- (TestCollisionYwithGear(Gear, 1) and lfIce <> 0) then
+if (Gear^.Message and (gmAllStoppable or gmLJump or gmHJump) = 0) and
+ (Gear^.State and (gstHHJumping or gstHHHJump or gstAttacking) = 0) and
+ not Gear^.dY.isNegative and
+ (GameTicks mod (100*hwRound(cMaxWindSpeed/(cGravity/2))) = 0) and
+ (TestCollisionYwithGear(Gear, 1) and lfIce <> 0) then
begin
- if CheckLandValue(hwRound(Gear^.X), hwRound(Gear^.Y)+cHHRadius, lfIce) then
- begin
- Gear^.dX.QWordValue:= Gear^.dX.QWordValue + cGravity.QWordValue * 75;
- Gear^.State:= Gear^.State or gstMoving;
- end
+ slope:= CalcSlopeBelowGear(Gear);
+ Gear^.dX:=Gear^.dX+slope*_0_07;
+ if slope.QWordValue <> 0 then Gear^.State:= Gear^.State or gstMoving;
(*
- // check land slope, and impart a dX based on it
- tdX:= Gear^.dX;
- tdY:= Gear^.dY;
- Gear^.dX:= _0;
- Gear^.dY:= _1;
- x := hwRound(Gear^.X);
- y := hwRound(Gear^.Y);
- tx := 0;
- ty := 0;
- if not CalcSlopeTangent(Gear, x, y+cHHRadius, tx, ty, 255) then
- begin
- slope:= _1/DistanceI(tx,ty);
- AddFileLog(FloatToStr(tdX)+ ' == '+FloatToStr(slope));
- tdX:= tdX + (cGravity * slope / _10) // this will need tuning
- end;
- Gear^.dX:= tdX;
- Gear^.dY:= tdY *)
- end;
+ x:= hwRound(Gear^.X);
+ y:= hwRound(Gear^.Y);
+ AddVisualGear(x, y, vgtSmokeTrace);
+ AddVisualGear(x - hwRound(_5*slope), y + hwRound(_5*slope), vgtSmokeTrace);
+ AddVisualGear(x + hwRound(_5*slope), y - hwRound(_5*slope), vgtSmokeTrace);
+ AddVisualGear(x - hwRound(_20 * slope), y + hwRound(_20 * slope), vgtSmokeTrace);
+ AddVisualGear(x + hwRound(_20 * slope), y - hwRound(_20 * slope), vgtSmokeTrace);
+ AddVisualGear(x - hwRound(_30 * slope), y + hwRound(_30 * slope), vgtSmokeTrace);
+ AddVisualGear(x + hwRound(_30 * slope), y - hwRound(_30 * slope), vgtSmokeTrace);
+ AddVisualGear(x - hwRound(_40 * slope), y + hwRound(_40 * slope), vgtSmokeTrace);
+ AddVisualGear(x + hwRound(_40 * slope), y - hwRound(_40 * slope), vgtSmokeTrace);
+ AddVisualGear(x - hwRound(_50 * slope), y + hwRound(_50 * slope), vgtSmokeTrace);
+ AddVisualGear(x + hwRound(_50 * slope), y - hwRound(_50 * slope), vgtSmokeTrace); *)
+ end
end;
--- a/hedgewars/SDLh.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/SDLh.pas Sat Nov 12 17:06:49 2011 +0100
@@ -83,7 +83,7 @@
SDL_ImageLibName = 'SDL_image';
SDL_NetLibName = 'SDL_net';
{$ELSE}
- SDLLibName = 'SDL';
+ SDLLibName = 'libSDL.so';
SDL_TTFLibName = 'libSDL_ttf.so';
SDL_MixerLibName = 'libSDL_mixer.so';
SDL_ImageLibName = 'libSDL_image.so';
@@ -109,6 +109,7 @@
SDL_INIT_NOPARACHUTE = $00100000;
SDL_INIT_EVERYTHING = $0000FFFF;
+ SDL_ALLEVENTS = $FFFFFFFF;
SDL_APPINPUTFOCUS = $02;
SDL_BUTTON_WHEELUP = 4;
SDL_BUTTON_WHEELDOWN = 5;
@@ -141,9 +142,15 @@
SDL_FINGERDOWN = $700;
SDL_FINGERUP = $701;
SDL_FINGERMOTION = $702;
- //TODO: implement otheer event types
+ SDL_TOUCHBUTTONDOWN = $703;
+ SDL_TOUCHBUTTONUP = $704;
+ SDL_DOLLARGESTURE = $800;
+ SDL_DOLLARRECORD = $801;
+ SDL_MULTIGESTURE = $802;
+ SDL_CLIPBOARDUPDATE = $900;
SDL_USEREVENT = $8000;
SDL_LASTEVENT = $FFFF;
+ // no compatibility events $7000
// SDL_Surface flags
SDL_SWSURFACE = $00000000; //*< Not used */
@@ -233,8 +240,6 @@
SDL_HWPALETTE = $20000000;
SDL_DOUBLEBUF = $40000000;
SDL_FULLSCREEN = $80000000;
-
- SDL_ALLEVENTS = $FFFFFFFF;
{$ENDIF}
{$IFDEF ENDIAN_LITTLE}
@@ -291,6 +296,10 @@
/////////////////////// TYPE DEFINITIONS ///////////////////////
/////////////////////////////////////////////////////////////////
+// two important reference points for the wanderers of this area
+// http://www.freepascal.org/docs-html/ref/refsu5.html
+// http://www.freepascal.org/docs-html/prog/progsu144.html
+
type
{$IFDEF SDL13}
PSDL_Window = Pointer;
@@ -316,15 +325,15 @@
PSDL_PixelFormat = ^TSDL_PixelFormat;
TSDL_PixelFormat = record
{$IFDEF SDL13}
- format: Longword;
- palette: Pointer; // actually it is a PSDL_Palette
+ format: LongWord;
+ palette: Pointer;
BitsPerPixel : Byte;
BytesPerPixel: Byte;
padding: array[0..1] of Byte;
- RMask : Longword;
- GMask : Longword;
- BMask : Longword;
- AMask : Longword;
+ RMask : LongWord;
+ GMask : LongWord;
+ BMask : LongWord;
+ AMask : LongWord;
Rloss : Byte;
Gloss : Byte;
Bloss : Byte;
@@ -347,11 +356,11 @@
Gshift: Byte;
Bshift: Byte;
Ashift: Byte;
- RMask : Longword;
- GMask : Longword;
- BMask : Longword;
- AMask : Longword;
- colorkey: Longword;
+ RMask : LongWord;
+ GMask : LongWord;
+ BMask : LongWord;
+ AMask : LongWord;
+ colorkey: LongWord;
alpha: Byte;
{$ENDIF}
end;
@@ -360,10 +369,10 @@
PSDL_Surface = ^TSDL_Surface;
TSDL_Surface = record
- flags : Longword;
+ flags : LongWord;
format: PSDL_PixelFormat;
w, h : LongInt;
- pitch : Word;
+ pitch : {$IFDEF SDL13}LongInt{$ELSE}Word{$ENDIF};
pixels: Pointer;
offset: LongInt;
{$IFDEF SDL13}
@@ -379,12 +388,12 @@
PSDL_Color = ^TSDL_Color;
TSDL_Color = record
- case byte of
+ case Byte of
0: ( r: Byte;
g: Byte;
b: Byte;
unused: Byte; );
- 1: ( value: Longword; );
+ 1: ( value: LongWord; );
end;
@@ -395,8 +404,8 @@
TClose = function( context: PSDL_RWops ): LongInt; cdecl;
TStdio = record
- autoclose: {$IFDEF SDL13}boolean{$ELSE}LongInt{$ENDIF};
- fp: pointer;
+ autoclose: {$IFDEF SDL13}Boolean{$ELSE}LongInt{$ENDIF};
+ fp: Pointer;
end;
TMem = record
@@ -414,7 +423,7 @@
read: TRead;
write: TWrite;
close: TClose;
- type_: Longword;
+ type_: LongWord;
case Byte of
0: (stdio: TStdio);
1: (mem: TMem);
@@ -428,31 +437,84 @@
TSDL_KeySym = record
scancode: LongInt;
sym: LongInt;
- modifier: Smallint;
- unicode: LongInt;
+ modifier: Word;
+ unicode: LongWord;
end;
TSDL_WindowEvent = record
- type_: LongInt;
- windowID: LongInt;
- event: byte;
- padding1, padding2, padding3: byte;
+ type_: LongWord;
+ windowID: LongWord;
+ event: Byte;
+ padding1, padding2, padding3: Byte;
data1, data2: LongInt;
end;
+
+ // available in sdl12 but not exposed
+ TSDL_TextEditingEvent = record
+ type_: LongWord;
+ windowID: LongWord;
+ text: array[0..31] of Byte;
+ start, lenght: LongInt;
+ end;
+
+ // available in sdl12 but not exposed
+ TSDL_TextInputEvent = record
+ type_: LongWord;
+ windowID: LongWord;
+ text: array[0..31] of Byte;
+ end;
+
+ TSDL_TouchFingerEvent = record
+ type_: LongWord;
+ windowId: LongWord;
+ touchId: Int64;
+ fingerId: Int64;
+ state, padding1, padding2, padding3: Byte;
+ x, y: Word;
+ dx, dy: SmallInt;
+ pressure: Word;
+ end;
+
+ TSDL_TouchButtonEvent = record
+ type_: LongWord;
+ windowId: LongWord;
+ touchId: Int64;
+ state, button, padding1, padding2: Byte;
+ end;
+
+ TSDL_MultiGestureEvent = record
+ type_: LongWord;
+ windowId: LongWord;
+ touchId: Int64;
+ dTheta, dDist, x, y: Single;
+ numFingers, padding: Word;
+ end;
+
+ TSDL_DollarGestureEvent = record
+ type_: LongWord;
+ windowId: LongWord;
+ touchId: Int64;
+ gesturedId: Int64;
+ numFingers: LongWord;
+ error: Single;
+ end;
+
+ TSDL_SysWMEvent = record
+ type_: LongWord;
+ msg: Pointer;
+ end;
{$ELSE}
TSDL_KeySym = record
scancode: Byte;
- sym: Longword;
- modifier: Longword;
+ sym: LongWord;
+ modifier: LongWord;
unicode: Word;
end;
- // these two are present in sdl1.3 but only for backward compatibility
- // and in 1.3 type_ is LongInt, not byte
TSDL_ActiveEvent = record
- type_: byte;
- gain: byte;
- state: byte;
+ type_: Byte;
+ gain: Byte;
+ state: Byte;
end;
TSDL_ResizeEvent = record
@@ -463,88 +525,74 @@
TSDL_KeyboardEvent = record
{$IFDEF SDL13}
- type_: LongInt;
- windowID: LongInt;
- state, repeat_, padding2, padding3: byte;
+ type_: LongWord;
+ windowID: LongWord;
+ state, repeat_, padding2, padding3: Byte;
{$ELSE}
- type_: byte;
- which: byte;
- state: byte;
+ type_, which, state: Byte;
{$ENDIF}
keysym: TSDL_KeySym;
end;
-//TODO: implement SDL_TextEditingEvent + SDL_TextInputEvent for sdl13
-
- // this structure is wrong but the correct version makes the game hang
TSDL_MouseMotionEvent = record
- which: byte;
- state: byte;
{$IFDEF SDL13}
- type_: LongInt;
- windowID: LongInt;
- padding1, padding2: byte;
+ type_: LongWord;
+ windowID: LongWord;
+ state, padding1, padding2, padding3: Byte;
x, y, z, xrel, yrel : LongInt;
- pressure, pressure_max, pressure_min,
- rotation, tilt, cursor: LongInt;
{$ELSE}
- type_: byte;
- x, y, xrel, yrel : word;
+ type_, which, state: Byte;
+ x, y, xrel, yrel : Word;
{$ENDIF}
end;
TSDL_MouseButtonEvent = record
{$IFDEF SDL13}
- type_: LongInt;
- windowID: LongInt;
+ type_: LongWord;
+ windowID: LongWord;
+ buttonm, state, padding1, padding2: Byte;
x, y: LongInt;
- padding1: byte;
{$ELSE}
- type_,
- which,
- button,
- state: byte;
- x, y: word;
+ type_, which, button, state: Byte;
+ x, y: Word;
{$ENDIF}
end;
+ TSDL_MouseWheelEvent = record
+ type_: LongWord;
{$IFDEF SDL13}
- TSDL_MouseWheelEvent = record
- type_: LongInt;
- windowID: LongInt;
+ windowID: LongWord;
+{$ELSE}
which: Byte;
x, y: LongInt;
end;
-//TODO: implement SDL_ProximityEvent
-{$ENDIF}
-
TSDL_JoyAxisEvent = record
- type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
+ type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
which: Byte;
axis: Byte;
{$IFDEF SDL13}
padding1, padding2: Byte;
value: LongInt;
{$ELSE}
- value: Smallint;
+ value: SmallInt;
{$ENDIF}
end;
TSDL_JoyBallEvent = record
- type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
+ type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
which: Byte;
ball: Byte;
{$IFDEF SDL13}
padding1, padding2: Byte;
xrel, yrel: LongInt;
{$ELSE}
- xrel, yrel: Smallint;
+ xrel, yrel: SmallInt;
{$ENDIF}
end;
TSDL_JoyHatEvent = record
- type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
+ type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
which: Byte;
hat: Byte;
value: Byte;
@@ -554,7 +602,7 @@
end;
TSDL_JoyButtonEvent = record
- type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
+ type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
which: Byte;
button: Byte;
state: Byte;
@@ -579,13 +627,13 @@
//TODO: implement SDL_TouchButtonEvent, SDL_MultiGestureEvent, SDL_DollarGestureEvent
TSDL_QuitEvent = record
- type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
+ type_: {$IFDEF SDL13}LongWord{$ELSE}Byte{$ENDIF};
end;
TSDL_UserEvent = record
{$IFDEF SDL13}
- type_: LongInt;
- windowID: LongInt;
+ type_: LongWord;
+ windowID: LongWord;
{$ELSE}
type_: Byte;
{$ENDIF}
@@ -601,8 +649,8 @@
SDL_WINDOWEVENT: (window: TSDL_WindowEvent);
SDL_KEYDOWN,
SDL_KEYUP: (key: TSDL_KeyboardEvent);
- SDL_TEXTEDITING,
- SDL_TEXTINPUT: (edit: byte);
+ SDL_TEXTEDITING: (edit: TSDL_TextEditingEvent);
+ SDL_TEXTINPUT: (tedit: TSDL_TextInputEvent);
SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
SDL_MOUSEBUTTONDOWN,
SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
@@ -617,10 +665,18 @@
SDL_FINGERDOWN:(tfinger: TSDL_TouchFingerEvent);
SDL_QUITEV: (quit: TSDL_QuitEvent);
SDL_USEREVENT: (user: TSDL_UserEvent);
- //TODO: implement other events
+ SDL_SYSWMEVENT: (syswm: TSDL_SysWMEvent);
+ SDL_FINGERDOWN,
+ SDL_FINGERUP,
+ SDL_FINGERMOTION: (tfinger: TSDL_TouchFingerEvent);
+ SDL_TOUCHBUTTONUP,
+ SDL_TOUCHBUTTONDOWN: (tbutton: TSDL_TouchButtonEvent);
+ SDL_MULTIGESTURE: (mgesture: TSDL_MultiGestureEvent);
+ SDL_DOLLARGESTURE: (dgesture: TSDL_DollarGestureEvent);
+ SDL_ALLEVENTS: (foo: shortstring);
{$ELSE}
case Byte of
- SDL_NOEVENT: (type_: byte);
+ SDL_NOEVENT: (type_: Byte);
SDL_ACTIVEEVENT: (active: TSDL_ActiveEvent);
SDL_KEYDOWN,
SDL_KEYUP: (key: TSDL_KeyboardEvent);
@@ -635,13 +691,12 @@
SDL_QUITEV: (quit: TSDL_QuitEvent);
//SDL_SYSWMEVENT,SDL_EVENT_RESERVEDA,SDL_EVENT_RESERVEDB
SDL_VIDEORESIZE: (resize: TSDL_ResizeEvent);
+ SDL_ALLEVENTS: (foo: shortstring);
{$ENDIF}
end;
-
TSDL_EventFilter = function( event : PSDL_Event ): Integer; cdecl;
-
PByteArray = ^TByteArray;
TByteArray = array[0..65535] of Byte;
PLongWordArray = ^TLongWordArray;
@@ -677,7 +732,7 @@
);
{$IFDEF SDL13}
- TSDL_ArrayByteOrder = ( // array component order, low byte -> high byte
+ TSDL_ArrayByteOrder = ( // array component order, low Byte -> high Byte
SDL_ARRAYORDER_NONE,
SDL_ARRAYORDER_RGB,
SDL_ARRAYORDER_RGBA,
@@ -701,9 +756,9 @@
{* SDL_mixer *}
PMixChunk = ^TMixChunk;
TMixChunk = record
- allocated: Longword;
+ allocated: LongWord;
abuf : PByte;
- alen : Longword;
+ alen : LongWord;
volume : PByte;
end;
TMusic = (MUS_CMD, MUS_WAV, MUS_MOD, MUS_MID, MUS_OGG, MUS_MP3);
@@ -711,13 +766,13 @@
TMidiSong = record
samples : LongInt;
- events : pointer;
+ events : Pointer;
end;
TMusicUnion = record
case Byte of
0: ( midi : TMidiSong );
- 1: ( ogg : pointer);
+ 1: ( ogg : Pointer);
end;
PMixMusic = ^TMixMusic;
@@ -726,7 +781,7 @@
{* SDL_net *}
TIPAddress = record
- host: Longword;
+ host: LongWord;
port: Word;
end;
@@ -752,16 +807,12 @@
{* SDL *}
-function SDL_Init(flags: Longword): LongInt; cdecl; external SDLLibName;
+function SDL_Init(flags: LongWord): LongInt; cdecl; external SDLLibName;
function SDL_InitSubSystem(flags: LongWord): LongInt; cdecl; external SDLLibName;
procedure SDL_Quit; cdecl; external SDLLibName;
-function SDL_VideoDriverName(var namebuf; maxlen: LongInt): PChar; cdecl; external SDLLibName;
-function SDL_EnableUNICODE(enable: LongInt): LongInt; cdecl; external SDLLibName;
-function SDL_EnableKeyRepeat(delay_, interval: LongInt): LongInt; cdecl; external SDLLibName;
-
-procedure SDL_Delay(msec: Longword); cdecl; external SDLLibName;
-function SDL_GetTicks: Longword; cdecl; external SDLLibName;
+procedure SDL_Delay(msec: LongWord); cdecl; external SDLLibName;
+function SDL_GetTicks: LongWord; cdecl; external SDLLibName;
function SDL_MustLock(Surface: PSDL_Surface): Boolean;
function SDL_LockSurface(Surface: PSDL_Surface): LongInt; cdecl; external SDLLibName;
@@ -769,23 +820,23 @@
function SDL_GetError: PChar; cdecl; external SDLLibName;
-function SDL_SetVideoMode(width, height, bpp: LongInt; flags: Longword): PSDL_Surface; cdecl; external SDLLibName;
-function SDL_CreateRGBSurface(flags: Longword; Width, Height, Depth: LongInt; RMask, GMask, BMask, AMask: Longword): PSDL_Surface; cdecl; external SDLLibName;
-function SDL_CreateRGBSurfaceFrom(pixels: Pointer; width, height, depth, pitch: LongInt; RMask, GMask, BMask, AMask: Longword): PSDL_Surface; cdecl; external SDLLibName;
+function SDL_SetVideoMode(width, height, bpp: LongInt; flags: LongWord): PSDL_Surface; cdecl; external SDLLibName;
+function SDL_CreateRGBSurface(flags: LongWord; Width, Height, Depth: LongInt; RMask, GMask, BMask, AMask: LongWord): PSDL_Surface; cdecl; external SDLLibName;
+function SDL_CreateRGBSurfaceFrom(pixels: Pointer; width, height, depth, pitch: LongInt; RMask, GMask, BMask, AMask: LongWord): PSDL_Surface; cdecl; external SDLLibName;
procedure SDL_FreeSurface(Surface: PSDL_Surface); cdecl; external SDLLibName;
-function SDL_SetColorKey(surface: PSDL_Surface; flag, key: Longword): LongInt; cdecl; external SDLLibName;
-function SDL_SetAlpha(surface: PSDL_Surface; flag, key: Longword): LongInt; cdecl; external SDLLibName;
+function SDL_SetColorKey(surface: PSDL_Surface; flag, key: LongWord): LongInt; cdecl; external SDLLibName;
+function SDL_SetAlpha(surface: PSDL_Surface; flag, key: LongWord): LongInt; cdecl; external SDLLibName;
function SDL_ConvertSurface(src: PSDL_Surface; fmt: PSDL_PixelFormat; flags: LongInt): PSDL_Surface; cdecl; external SDLLibName;
function SDL_UpperBlit(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): LongInt; cdecl; external SDLLibName;
-function SDL_FillRect(dst: PSDL_Surface; dstrect: PSDL_Rect; color: Longword): LongInt; cdecl; external SDLLibName;
-procedure SDL_UpdateRect(Screen: PSDL_Surface; x, y: LongInt; w, h: Longword); cdecl; external SDLLibName;
+function SDL_FillRect(dst: PSDL_Surface; dstrect: PSDL_Rect; color: LongWord): LongInt; cdecl; external SDLLibName;
+procedure SDL_UpdateRect(Screen: PSDL_Surface; x, y: LongInt; w, h: LongWord); cdecl; external SDLLibName;
function SDL_Flip(Screen: PSDL_Surface): LongInt; cdecl; external SDLLibName;
-procedure SDL_GetRGB(pixel: Longword; fmt: PSDL_PixelFormat; r, g, b: PByte); cdecl; external SDLLibName;
-procedure SDL_GetRGBA(pixel: Longword; fmt: PSDL_PixelFormat; r, g, b, a: PByte); cdecl; external SDLLibName;
-function SDL_MapRGB(format: PSDL_PixelFormat; r, g, b: Byte): Longword; cdecl; external SDLLibName;
-function SDL_MapRGBA(format: PSDL_PixelFormat; r, g, b, a: Byte): Longword; cdecl; external SDLLibName;
+procedure SDL_GetRGB(pixel: LongWord; fmt: PSDL_PixelFormat; r, g, b: PByte); cdecl; external SDLLibName;
+procedure SDL_GetRGBA(pixel: LongWord; fmt: PSDL_PixelFormat; r, g, b, a: PByte); cdecl; external SDLLibName;
+function SDL_MapRGB(format: PSDL_PixelFormat; r, g, b: Byte): LongWord; cdecl; external SDLLibName;
+function SDL_MapRGBA(format: PSDL_PixelFormat; r, g, b, a: Byte): LongWord; cdecl; external SDLLibName;
function SDL_DisplayFormat(Surface: PSDL_Surface): PSDL_Surface; cdecl; external SDLLibName;
function SDL_DisplayFormatAlpha(Surface: PSDL_Surface): PSDL_Surface; cdecl; external SDLLibName;
@@ -794,11 +845,12 @@
function SDL_SaveBMP_RW(surface: PSDL_Surface; dst: PSDL_RWops; freedst: LongInt): LongInt; cdecl; external SDLLibName;
{$IFDEF SDL13}
-function SDL_CreateWindow(title: PChar; x,y,w,h, flags: LongInt): PSDL_Window; cdecl; external SDLLibName;
-function SDL_CreateRenderer(window: PSDL_Window; index, flags: LongInt): PSDL_Renderer; cdecl; external SDLLibName;
+function SDL_CreateWindow(title: PChar; x,y,w,h: LongInt; flags: LongWord): PSDL_Window; cdecl; external SDLLibName;
+function SDL_CreateRenderer(window: PSDL_Window; index: LongInt; flags: LongWord): PSDL_Renderer; cdecl; external SDLLibName;
function SDL_DestroyWindow(window: PSDL_Window): LongInt; cdecl; external SDLLibName;
function SDL_DestroyRenderer(renderer: PSDL_Renderer): LongInt; cdecl; external SDLLibName;
procedure SDL_SetWindowSize(window: PSDL_Window; w, h: LongInt); cdecl; external SDLLibName;
+function SDL_GetCurrentVideoDriver:Pchar; cdecl; external SDLLibName;
function SDL_GL_CreateContext(window: PSDL_Window): PSDL_GLContext; cdecl; external SDLLibName;
procedure SDL_GL_DeleteContext(context: PSDL_GLContext); cdecl; external SDLLibName;
@@ -809,44 +861,40 @@
function SDL_GetNumVideoDisplays: LongInt; cdecl; external SDLLibName;
procedure SDL_ShowWindow(window: PSDL_Window); cdecl; external SDLLibName;
-function SDL_SetRenderDrawColor(renderer: PSDL_Renderer; r,g,b,a: byte): LongInt; cdecl; external SDLLibName;
+function SDL_SetRenderDrawColor(renderer: PSDL_Renderer; r,g,b,a: Byte): LongInt; cdecl; external SDLLibName;
function SDL_GetRenderer(window: PSDL_Window): PSDL_Renderer; cdecl; external SDLLibName;
function SDL_RenderFillRect(renderer: PSDL_Renderer; rect: PSDL_Rect): LongInt; cdecl; external SDLLibName;
function SDL_RenderClear(renderer: PSDL_Renderer): LongInt; cdecl; external SDLLibName;
procedure SDL_RenderPresent(renderer: PSDL_Renderer); cdecl; external SDLLibName;
-function SDL_RenderReadPixels(renderer: PSDL_Renderer; rect: PSDL_Rect; format: LongInt; pixels: pointer; pitch: LongInt): LongInt; cdecl; external SDLLibName;
+function SDL_RenderReadPixels(renderer: PSDL_Renderer; rect: PSDL_Rect; format: LongInt; pixels: Pointer; pitch: LongInt): LongInt; cdecl; external SDLLibName;
function SDL_RenderSetViewport(window: PSDL_Window; rect: PSDL_Rect): LongInt; cdecl; external SDLLibName;
-function SDL_SelectMouse(index: LongInt): LongInt; cdecl; external SDLLibName;
function SDL_GetRelativeMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName;
-function SDL_GetNumMice: LongInt; cdecl; external SDLLibName;
-function SDL_PixelFormatEnumToMasks(format: TSDL_ArrayByteOrder; bpp: PLongInt; Rmask, Gmask, Bmask, Amask: PLongInt): boolean; cdecl; external SDLLibName;
-
+function SDL_PixelFormatEnumToMasks(format: TSDL_ArrayByteOrder; bpp: PLongInt; Rmask, Gmask, Bmask, Amask: PLongInt): Boolean; cdecl; external SDLLibName;
procedure SDL_WarpMouseInWindow(window: PSDL_Window; x, y: LongInt); cdecl; external SDLLibName;
-function SDL_SetHint(name, value: PChar): boolean; cdecl; external SDLLibName;
+function SDL_SetHint(name, value: PChar): Boolean; cdecl; external SDLLibName;
+procedure SDL_StartTextInput; cdecl; external SDLLibName;
-function SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: SDL_eventaction; minType, maxType: LongInt): LongInt; cdecl; external SDLLibName;
+function SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: SDL_eventaction; minType, maxType: LongWord): LongInt; cdecl; external SDLLibName;
{$ELSE}
-function SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: SDL_eventaction; mask: Longword): LongInt; cdecl; external SDLLibName;
+function SDL_PeepEvents(event: PSDL_Event; numevents: LongInt; action: SDL_eventaction; mask: LongWord): LongInt; cdecl; external SDLLibName;
{$ENDIF}
function SDL_GetMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName;
-function SDL_GetKeyName(key: Longword): PChar; cdecl; external SDLLibName;
+function SDL_GetKeyName(key: LongWord): PChar; cdecl; external SDLLibName;
procedure SDL_PumpEvents; cdecl; external SDLLibName;
function SDL_PollEvent(event: PSDL_Event): LongInt; cdecl; external SDLLibName;
function SDL_WaitEvent(event: PSDL_Event): LongInt; cdecl; external SDLLibName;
-procedure SDL_SetEventFilter( filter : TSDL_EventFilter ); cdecl; external SDLLibName;
+procedure SDL_SetEventFilter(filter: TSDL_EventFilter); cdecl; external SDLLibName;
function SDL_ShowCursor(toggle: LongInt): LongInt; cdecl; external SDLLibName;
-procedure SDL_WM_SetIcon(icon: PSDL_Surface; mask : byte); cdecl; external SDLLibName;
+procedure SDL_WM_SetIcon(icon: PSDL_Surface; mask : Byte); cdecl; external SDLLibName;
procedure SDL_WM_SetCaption(title: PChar; icon: PChar); cdecl; external SDLLibName;
function SDL_WM_ToggleFullScreen(surface: PSDL_Surface): LongInt; cdecl; external SDLLibName;
-function SDL_CreateThread(fn: pointer; data: pointer): PSDL_Thread; cdecl; external SDLLibName;
-procedure SDL_WaitThread(thread: PSDL_Thread; status: PLongInt); cdecl; external SDLLibName;
function SDL_CreateMutex: PSDL_mutex; cdecl; external SDLLibName;
procedure SDL_DestroyMutex(mutex: PSDL_mutex); cdecl; external SDLLibName;
function SDL_LockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName name 'SDL_mutexP';
@@ -880,14 +928,17 @@
{* Compatibility between SDL-1.2 and SDL-1.3 *}
procedure SDL_WarpMouse(x, y: Word); {$IFNDEF SDL13}cdecl; external SDLLibName;{$ENDIF}
function SDL_GetKeyState(numkeys: PLongInt): PByteArray; cdecl; external SDLLibName {$IFDEF SDL13} name 'SDL_GetKeyboardState'{$ENDIF};
-function SDL_AllocFormat(format: Longword): PSDL_PixelFormat; {$IFDEF SDL13}cdecl; external SDLLibName;{$ENDIF}
+function SDL_AllocFormat(format: LongWord): PSDL_PixelFormat; {$IFDEF SDL13}cdecl; external SDLLibName;{$ENDIF}
procedure SDL_FreeFormat(pixelformat: PSDL_PixelFormat); {$IFDEF SDL13}cdecl; external SDLLibName;{$ENDIF}
+function SDL_VideoDriverName(namebuf: PChar; maxlen: LongInt): PChar; {$IFNDEF SDL13}cdecl; external SDLLibName;{$ENDIF}
+function SDL_EnableUNICODE(enable: LongInt): LongInt; {$IFNDEF SDL13}cdecl; external SDLLibName;{$ENDIF}
+function SDL_EnableKeyRepeat(delay_, interval: LongInt): LongInt; {$IFNDEF SDL13}cdecl; external SDLLibName;{$ENDIF}
(* SDL_ttf *)
function TTF_Init: LongInt; cdecl; external SDL_TTFLibName;
procedure TTF_Quit; cdecl; external SDL_TTFLibName;
-function TTF_SizeUTF8(font: PTTF_Font; const text: PChar; out w, h: LongInt): LongInt; cdecl; external SDL_TTFLibName;
+function TTF_SizeUTF8(font: PTTF_Font; const text: PChar; w, h: PLongInt): LongInt; cdecl; external SDL_TTFLibName;
function TTF_RenderUTF8_Solid(font: PTTF_Font; const text: PChar; fg: TSDL_Color): PSDL_Surface; cdecl; external SDL_TTFLibName;
function TTF_RenderUTF8_Blended(font: PTTF_Font; const text: PChar; fg: TSDL_Color): PSDL_Surface; cdecl; external SDL_TTFLibName;
@@ -953,13 +1004,13 @@
function SDLNet_CheckSockets(_set: PSDLNet_SocketSet; timeout: LongInt): LongInt; cdecl; external SDL_NetLibName;
-procedure SDLNet_Write16(value: Word; buf: pointer);
-procedure SDLNet_Write32(value: LongWord; buf: pointer);
-function SDLNet_Read16(buf: pointer): Word;
-function SDLNet_Read32(buf: pointer): LongWord;
+procedure SDLNet_Write16(value: Word; buf: Pointer);
+procedure SDLNet_Write32(value: LongWord; buf: Pointer);
+function SDLNet_Read16(buf: Pointer): Word;
+function SDLNet_Read32(buf: Pointer): LongWord;
implementation
-uses uVariables;
+uses strings, uVariables;
{$IFDEF SDL13}
// this needs to be reimplemented because in SDL_compat.c the window is the one created in the SDL_SetVideoMode
@@ -968,8 +1019,31 @@
begin
SDL_WarpMouseInWindow(SDLwindow, x, y);
end;
+
+function SDL_VideoDriverName(namebuf: PChar; maxlen: LongInt): PChar;
+var name : PChar = nil;
+begin
+ name:= SDL_GetCurrentVideoDriver();
+ if (name <> nil) and (namebuf <> nil) then
+ begin
+ strlcopy(namebuf, name, maxlen);
+ exit(namebuf)
+ end;
+ exit(name);
+end;
+
+function SDL_EnableUNICODE(enable: LongInt): LongInt;
+begin
+ SDL_StartTextInput();
+ exit(0);
+end;
+
+function SDL_EnableKeyRepeat(delay_, interval: LongInt): LongInt;
+begin
+ exit(0);
+end;
{$ELSE}
-function SDL_AllocFormat(format: Longword): PSDL_PixelFormat;
+function SDL_AllocFormat(format: LongWord): PSDL_PixelFormat;
const conversionFormat: TSDL_PixelFormat = (
palette: nil; BitsPerPixel: 32; BytesPerPixel: 4;
Rloss: 0; Gloss: 0; Bloss: 0; Aloss: 0;
@@ -1019,13 +1093,13 @@
end;
{$ENDIF}
-procedure SDLNet_Write16(value: Word; buf: pointer);
+procedure SDLNet_Write16(value: Word; buf: Pointer);
begin
PByteArray(buf)^[1]:= value;
PByteArray(buf)^[0]:= value shr 8
end;
-procedure SDLNet_Write32(value: LongWord; buf: pointer);
+procedure SDLNet_Write32(value: LongWord; buf: Pointer);
begin
PByteArray(buf)^[3]:= value;
PByteArray(buf)^[2]:= value shr 8;
@@ -1033,13 +1107,13 @@
PByteArray(buf)^[0]:= value shr 24
end;
-function SDLNet_Read16(buf: pointer): Word;
+function SDLNet_Read16(buf: Pointer): Word;
begin
SDLNet_Read16:= PByteArray(buf)^[1] or
(PByteArray(buf)^[0] shl 8)
end;
-function SDLNet_Read32(buf: pointer): LongWord;
+function SDLNet_Read32(buf: Pointer): LongWord;
begin
SDLNet_Read32:= PByteArray(buf)^[3] or
(PByteArray(buf)^[2] shl 8) or
--- a/hedgewars/VGSHandlers.inc Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/VGSHandlers.inc Sat Nov 12 17:06:49 2011 +0100
@@ -79,7 +79,8 @@
if round(X) < cLeftScreenBorder then X:= X + cScreenSpace else
if round(X) > cRightScreenBorder then X:= X - cScreenSpace;
// if round(Y) < (LAND_HEIGHT - 1024 - 75) then Y:= Y + 25.0; // For if flag is set for flakes rising upwards?
- if round(Y) - 225 > LAND_HEIGHT then Y:= Y - (1024 + 300); // TODO - configure in theme (jellies for example could use limited range)
+ if (Gear^.Layer = 2) and (round(Y) - 225 > LAND_HEIGHT) then Y:= Y - (1024 + 300) // TODO - configure in theme (jellies for example could use limited range)
+ else if (Gear^.Layer <> 2) and (round(Y) + 50 > LAND_HEIGHT) then Y:= Y - (1024 + 25);
Timer:= 0;
tdX:= 0;
tdY:= 0
--- a/hedgewars/hwengine.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/hwengine.pas Sat Nov 12 17:06:49 2011 +0100
@@ -116,15 +116,11 @@
s:= 'hw_' + FormatDateTime('YYYY-MM-DD_HH-mm-ss', Now()) + inttostr(GameTicks);
playSound(sndShutter);
-{$IFNDEF IPHONEOS}
- if not MakeScreenshot(s) then
- begin
+ if MakeScreenshot(s) then WriteLnToConsole('Screenshot saved: ' + s)
+ else begin
WriteLnToConsole('Screenshot failed.');
AddChatString(#5 + 'screen capture failed (lack of memory or write permissions)');
- end
- else
-{$ENDIF}
- WriteLnToConsole('Screenshot saved: ' + s);
+ end
end;
end;
@@ -149,11 +145,8 @@
///////////////////
procedure MainLoop;
-{$WARNINGS OFF}
-// disable "Some fields weren't initialized" warning
-const event: TSDL_Event = ();
-{$WARNINGS ON}
-var PrevTime, CurrTime: Longword;
+var event: TSDL_Event;
+ PrevTime, CurrTime: Longword;
{$IFDEF SDL13}
previousGameState: TGameState;
{$ELSE}
@@ -263,8 +256,10 @@
begin
{$IFDEF HWLIBRARY}
cBits:= 32;
+ cFullScreen:= false;
cTimerInterval:= 8;
- cFullScreen:= {$IFDEF MOBILE}true{$ELSE}false{$ENDIF};
+ PathPrefix:= 'Data';
+ UserPathPrefix:= '../Documents';
cShowFPS:= {$IFDEF DEBUGFILE}true{$ELSE}false{$ENDIF};
val(gameArgs[0], ipcPort);
val(gameArgs[1], cScreenWidth);
--- a/hedgewars/uAI.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uAI.pas Sat Nov 12 17:06:49 2011 +0100
@@ -267,8 +267,7 @@
WalkMe:= BackMe;
Walk(@WalkMe);
- if (StartTicks > GameTicks - 1500) and not StopThinking then SDL_Delay(1000);
-
+ if (StartTicks > GameTicks - 1500) and (not StopThinking) then SDL_Delay(1000);
if BestActions.Score < -1023 then
begin
BestActions.Count:= 0;
@@ -286,9 +285,7 @@
end;
PGear(Me)^.State:= PGear(Me)^.State and not gstHHThinking;
Think:= 0;
-
-InterlockedDecrement(hasThread);
-
+InterlockedDecrement(hasThread)
end;
procedure StartThink(Me: PGear);
--- a/hedgewars/uChat.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uChat.pas Sat Nov 12 17:06:49 2011 +0100
@@ -84,7 +84,7 @@
font:= CheckCJKFont(str, fnt16);
w:= 0; h:= 0; // avoid compiler hints
-TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(str), w, h);
+TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(str), @w, @h);
resSurface:= SDL_CreateRGBSurface(0, toPowerOf2(w), toPowerOf2(h), 32, RMask, GMask, BMask, AMask);
--- a/hedgewars/uCollisions.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uCollisions.pas Sat Nov 12 17:06:49 2011 +0100
@@ -52,7 +52,8 @@
function TestRectancleForObstacle(x1, y1, x2, y2: LongInt; landOnly: boolean): boolean;
-function CalcSlopeTangentBelowGear(Gear: PGear; var outDeltaX, outDeltaY: LongInt): boolean;
+// returns: negative sign if going downhill to left, value is steepness (noslope/error = _0, 45° = _0_5)
+function CalcSlopeBelowGear(Gear: PGear): hwFloat;
function CalcSlopeTangent(Gear: PGear; collisionX, collisionY: LongInt; var outDeltaX, outDeltaY: LongInt; TestWord: LongWord): Boolean;
implementation
@@ -403,7 +404,7 @@
if (dx.QWordValue > _0_995.QWordValue )
or (dy.QWordValue > _0_995.QWordValue ) then
begin // scale
- s := _1 / Distance(dx,dy);
+ s := _0_995 / Distance(dx,dy);
dx := s * dx;
dy := s * dy;
end;
@@ -519,17 +520,12 @@
exit(true);
end;
-function CalcSlopeTangentBelowGear(Gear: PGear; var outDeltaX, outDeltaY: LongInt): boolean;
+function CalcSlopeBelowGear(Gear: PGear): hwFloat;
var dx, dy: hwFloat;
- collX, i, y, x, gx: LongInt;
+ collX, i, y, x, gx, sdx, sdy: LongInt;
isColl, succ: Boolean;
begin
-// save original dx/dy
-dx:= Gear^.dX;
-dy:= Gear^.dY;
-Gear^.dX.QWordValue:= 0;
-Gear^.dY:= _1;
y:= hwRound(Gear^.Y) + Gear^.Radius;
gx:= hwRound(Gear^.X);
@@ -553,15 +549,32 @@
end;
if isColl then
- succ := CalcSlopeTangent(Gear, collX, y, outDeltaX, outDeltaY, 255)
-else
- succ := false;
+ begin
+ // save original dx/dy
+ dx := Gear^.dX;
+ dy := Gear^.dY;
+
+ Gear^.dX.QWordValue:= 0;
+ Gear^.dX.isNegative:= (collX >= gx);
+ Gear^.dY:= _1;
+
+ sdx:= 0;
+ sdy:= 0;
+ succ := CalcSlopeTangent(Gear, collX, y, sdx, sdy, 255);
-// restore original dx/dy
-Gear^.dX:= dx;
-Gear^.dY:= dy;
+ // restore original dx/dy
+ Gear^.dX := dx;
+ Gear^.dY := dy;
-CalcSlopeTangentBelowGear := succ;
+ if succ and (sdx <> 0) and (sdy <> 0) then
+ begin
+ dx := int2hwFloat(sdy) / (abs(sdx) + abs(sdy));
+ dx.isNegative := (sdx * sdy) < 0;
+ exit (dx);
+ end;
+ end;
+
+CalcSlopeBelowGear := _0;
end;
procedure initModule;
--- a/hedgewars/uCommandHandlers.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uCommandHandlers.pas Sat Nov 12 17:06:49 2011 +0100
@@ -130,6 +130,7 @@
begin
if s[1]='"' then Delete(s, 1, 1);
if s[byte(s[0])]='"' then Delete(s, byte(s[0]), 1);
+cScriptName:= s;
ScriptLoad(s)
end;
@@ -457,7 +458,7 @@
InitStepsFlags:= InitStepsFlags or cifMap
end;
-ScriptLoad(s)
+ScriptLoad('Maps/' + s + '/map.lua')
end;
procedure chSetTheme(var s: shortstring);
@@ -526,7 +527,7 @@
else begin
AddCaption('Auto Camera On', $CCCCCC, capgrpVolume);
bShowFinger:= true;
- FollowGear:= CurrentHedgehog^.Gear;
+ if not CurrentHedgehog^.Unplaced then FollowGear:= CurrentHedgehog^.Gear;
autoCameraOn:= true
end
end;
@@ -614,7 +615,7 @@
RegisterVariable('seed' , vtCommand, @chSetSeed , false);
RegisterVariable('template_filter', vtLongInt, @cTemplateFilter, false);
RegisterVariable('mapgen' , vtLongInt, @cMapGen , false);
- RegisterVariable('maze_size',vtLongInt, @cMazeSize , false);
+ RegisterVariable('maze_size',vtLongInt, @cTemplateFilter, false);
RegisterVariable('delay' , vtLongInt, @cInactDelay , false);
RegisterVariable('ready' , vtLongInt, @cReadyDelay , false);
RegisterVariable('casefreq', vtLongInt, @cCaseFactor , false);
--- a/hedgewars/uFloat.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uFloat.pas Sat Nov 12 17:06:49 2011 +0100
@@ -116,6 +116,7 @@
_0_01: hwFloat = (isNegative: false; QWordValue: 42949673);
_0_02: hwFloat = (isNegative: false; QWordValue: 85899345);
_0_03: hwFloat = (isNegative: false; QWordValue: 128849018);
+ _0_07: hwFloat = (isNegative: false; QWordValue: 300647710);
_0_08: hwFloat = (isNegative: false; QWordValue: 343597383);
_0_1: hwFloat = (isNegative: false; QWordValue: 429496730);
_0_15: hwFloat = (isNegative: false; QWordValue: 644245094);
@@ -321,7 +322,7 @@
str(z.Round, cstr);
if z.Frac <> 0 then
begin
- str(z.Frac / $100000000:1:15, tmpstr);
+ str(z.Frac / $100000000:1:10, tmpstr);
delete(tmpstr, 1, 2);
cstr:= cstr + '.' + tmpstr
end;
--- a/hedgewars/uGame.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uGame.pas Sat Nov 12 17:06:49 2011 +0100
@@ -78,7 +78,7 @@
AddVisualGear(0, 0, vgtTeamHealthSorter);
AddVisualGear(0, 0, vgtSmoothWindBar);
{$IFDEF IPHONEOS}InitIPC;{$ENDIF}
- uMobile.SaveFinished();
+ uMobile.SaveLoadingEnded();
end;
end
else ProcessGears
--- a/hedgewars/uGears.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uGears.pas Sat Nov 12 17:06:49 2011 +0100
@@ -320,7 +320,7 @@
gear^.Timer:= 500;
gear^.RenderTimer:= true;
gear^.Elasticity:= _0_9;
- gear^.Tag:= getRandom(32);
+ gear^.Tag:= 0;
end;
gtSeduction: begin
gear^.Radius:= 250;
@@ -1290,7 +1290,7 @@
gtMelonPiece,
gtGrenade,
gtClusterBomb,
- gtCluster,
+ // gtCluster, too game breaking I think
gtSMine,
gtCase,
gtTarget,
@@ -1314,8 +1314,17 @@
if ((Mask and EXPLDoNotTouchAny) = 0) and (((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog)) then
begin
DeleteCI(Gear);
- Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - fX);
- Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, Gear^.Y - fY);
+ if Gear^.Kind <> gtHedgehog then
+ begin
+ Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - fX)/Gear^.Density;
+ Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, Gear^.Y - fY)/Gear^.Density;
+ end
+ else
+ begin
+ Gear^.dX:= Gear^.dX + SignAs(_0_005 * dmg + cHHKick, Gear^.X - fX);
+ Gear^.dY:= Gear^.dY + SignAs(_0_005 * dmg + cHHKick, Gear^.Y - fY);
+ end;
+
Gear^.State:= (Gear^.State or gstMoving) and (not gstLoser);
if not Gear^.Invulnerable then
Gear^.State:= (Gear^.State or gstMoving) and (not gstWinner);
--- a/hedgewars/uGearsRender.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uGearsRender.pas Sat Nov 12 17:06:49 2011 +0100
@@ -897,15 +897,15 @@
Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF);
if Gear^.Tag = -1 then
begin
- DrawRotatedTextureF(SpritesData[sprPlane].Texture, 1, 0, 0, x, y, 0, -1, SpritesData[sprPlane].Width, SpritesData[sprPlane].Height, DxDy2Angle(Gear^.dX, Gear^.dY) + 90);
+ DrawRotatedF(sprPlane, x, y, 0, -1, DxDy2Angle(Gear^.dX, Gear^.dY) + 90);
Tint($FF, $FF, $FF, $FF);
- DrawRotatedTextureF(SpritesData[sprPlane].Texture, 1, 0, 0, x, y, 1, -1, SpritesData[sprPlane].Width, SpritesData[sprPlane].Height, DxDy2Angle(Gear^.dX, Gear^.dY) + 90)
+ DrawRotatedF(sprPlane, x, y, 1, -1, DxDy2Angle(Gear^.dX, Gear^.dY) + 90)
end
else
begin
- DrawRotatedTextureF(SpritesData[sprPlane].Texture, 1, 0, 0, x, y, 0, 0, SpritesData[sprPlane].Width, SpritesData[sprPlane].Height, DxDy2Angle(Gear^.dY, Gear^.dX));
+ DrawRotatedF(sprPlane, x, y, 0, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
Tint($FF, $FF, $FF, $FF);
- DrawRotatedTextureF(SpritesData[sprPlane].Texture, 1, 0, 0, x, y, 1, 0, SpritesData[sprPlane].Width, SpritesData[sprPlane].Height, DxDy2Angle(Gear^.dY, Gear^.dX))
+ DrawRotatedF(sprPlane, x, y, 1, 0, DxDy2Angle(Gear^.dY, Gear^.dX))
end
end;
gtBall: DrawRotatedf(sprBalls, x, y, Gear^.Tag,0, Gear^.DirAngle);
@@ -983,13 +983,19 @@
gtDynamite: DrawSprite2(sprDynamite, x - 16, y - 25, Gear^.Tag and 1, Gear^.Tag shr 1);
gtClusterBomb: DrawRotated(sprClusterBomb, x, y, 0, Gear^.DirAngle);
gtCluster: DrawSprite(sprClusterParticle, x - 8, y - 8, 0);
- gtFlame: DrawTextureF(SpritesData[sprFlame].Texture, 2 / (Gear^.Tag mod 3 + 2), x, y, (GameTicks shr 7 + LongWord(Gear^.Tag)) mod 8, 1, 16, 16);
+ gtFlame: if Gear^.Tag and 1 = 0 then
+ DrawTextureF(SpritesData[sprFlame].Texture, 2 / (Gear^.Tag mod 3 + 2), x, y, (GameTicks shr 7 + LongWord(Gear^.Tag)) mod 8, 1, 16, 16)
+ else DrawTextureF(SpritesData[sprFlame].Texture, 2 / (Gear^.Tag mod 3 + 2), x, y, (GameTicks shr 7 + LongWord(Gear^.Tag)) mod 8, -1, 16, 16);
gtParachute: begin
DrawSprite(sprParachute, x - 24, y - 48, 0);
DrawAltWeapon(Gear, x + 1, y - 3)
end;
- gtAirAttack: if Gear^.Tag > 0 then DrawSprite(sprAirplane, x - SpritesData[sprAirplane].Width div 2, y - SpritesData[sprAirplane].Height div 2, 0)
- else DrawSprite(sprAirplane, x - SpritesData[sprAirplane].Width div 2, y - SpritesData[sprAirplane].Height div 2, 1);
+ gtAirAttack: begin
+ Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF);
+ DrawRotatedF(sprAirplane, x, y, 0, Gear^.Tag, 0);
+ Tint($FF, $FF, $FF, $FF);
+ DrawRotatedF(sprAirplane, x, y, 1, Gear^.Tag, 0);
+ end;
gtAirBomb: DrawRotated(sprAirBomb, x, y, 0, DxDy2Angle(Gear^.dY, Gear^.dX));
gtTeleport: begin
HHGear:= Gear^.Hedgehog^.Gear;
@@ -1051,10 +1057,10 @@
begin
Tint($FF, $FF, $FF, $10);
for i:= 8 downto 1 do
- DrawRotatedTextureF(SpritesData[sprPiano].Texture, 1, 0, 0, x, y - hwRound(Gear^.dY * 4 * i), 0, 1, 128, 128, 0);
+ DrawTextureF(SpritesData[sprPiano].Texture, 1, x, y - hwRound(Gear^.dY * 4 * i), 0, 1, 128, 128);
Tint($FF, $FF, $FF, $FF)
end;
- DrawRotatedTextureF(SpritesData[sprPiano].Texture, 1, 0, 0, x, y, 0, 1, 128, 128, 0);
+ DrawTextureF(SpritesData[sprPiano].Texture, 1, x, y, 0, 1, 128, 128);
end;
gtPoisonCloud: begin
if Gear^.Timer < 1020 then
--- a/hedgewars/uIO.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uIO.pas Sat Nov 12 17:06:49 2011 +0100
@@ -40,7 +40,7 @@
procedure doPut(putX, putY: LongInt; fromAI: boolean);
implementation
-uses uConsole, uConsts, uVariables, uCommands, uUtils, uDebug, uMobile;
+uses uConsole, uConsts, uVariables, uCommands, uUtils, uDebug;
type PCmd = ^TCmd;
TCmd = packed record
@@ -175,8 +175,6 @@
s: shortstring absolute buf;
begin
-uMobile.SaveBegan();
-
// set RDNLY on file open
filemode:= 0;
{$I-}
--- a/hedgewars/uLand.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uLand.pas Sat Nov 12 17:06:49 2011 +0100
@@ -36,7 +36,7 @@
implementation
uses uConsole, uStore, uRandom, uLandObjects, uIO, uLandTexture, sysutils,
- uVariables, uUtils, uCommands, Adler32, uDebug, uLandPainted;
+ uVariables, uUtils, uCommands, Adler32, uDebug, uLandPainted, uTextures;
operator=(const a, b: direction) c: Boolean;
begin
@@ -302,6 +302,7 @@
// freed in freeModule() below
LandBackSurface:= LoadImage(UserPathz[ptCurrTheme] + '/LandBackTex', ifIgnoreCaps or ifTransparent);
if LandBackSurface = nil then LandBackSurface:= LoadImage(Pathz[ptCurrTheme] + '/LandBackTex', ifIgnoreCaps or ifTransparent);
+ if (LandBackSurface <> nil) and cGrayScale then Surface2GrayScale(LandBackSurface);
tmpsurf:= LoadImage(UserPathz[ptCurrTheme] + '/Border', ifIgnoreCaps or ifTransparent);
if tmpsurf = nil then tmpsurf:= LoadImage(Pathz[ptCurrTheme] + '/Border', ifCritical or ifIgnoreCaps or ifTransparent);
@@ -855,7 +856,7 @@
end;
begin
-case cMazeSize of
+case cTemplateFilter of
0: begin
cellsize := small_cell_size;
maze_inverted := false;
@@ -1180,7 +1181,8 @@
begin
// freed in freeModule() below
LandBackSurface:= LoadImage(UserPathz[ptCurrTheme] + '/LandBackTex', ifIgnoreCaps or ifTransparent);
- if LandBackSurface = nil then LandBackSurface:= LoadImage(Pathz[ptCurrTheme] + '/LandBackTex', ifIgnoreCaps or ifTransparent)
+ if LandBackSurface = nil then LandBackSurface:= LoadImage(Pathz[ptCurrTheme] + '/LandBackTex', ifIgnoreCaps or ifTransparent);
+ if (LandBackSurface <> nil) and cGrayScale then Surface2GrayScale(LandBackSurface)
end;
end;
if (tmpsurf <> nil) then
@@ -1439,7 +1441,7 @@
adler:= 1;
for i:= 0 to LAND_HEIGHT-1 do
Adler32Update(adler, @Land[i,0], LAND_WIDTH);
- s:= 'M' + IntToStr(adler);
+ s:= 'M' + IntToStr(adler) + cScriptName;
chLandCheck(s);
SendIPCRaw(@s[0], Length(s) + 1)
--- a/hedgewars/uLandObjects.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uLandObjects.pas Sat Nov 12 17:06:49 2011 +0100
@@ -392,6 +392,26 @@
begin
AddProgress;
+// Set default water greyscale values
+if cGrayScale then
+ begin
+ for i:= 0 to 3 do
+ begin
+ t:= round(SDWaterColorArray[i].r * RGB_LUMINANCE_RED + SDWaterColorArray[i].g * RGB_LUMINANCE_GREEN + SDWaterColorArray[i].b * RGB_LUMINANCE_BLUE);
+ if t > 255 then t:= 255;
+ SDWaterColorArray[i].r:= t;
+ SDWaterColorArray[i].g:= t;
+ SDWaterColorArray[i].b:= t
+ end;
+ for i:= 0 to 1 do
+ begin
+ t:= round(WaterColorArray[i].r * RGB_LUMINANCE_RED + WaterColorArray[i].g * RGB_LUMINANCE_GREEN + WaterColorArray[i].b * RGB_LUMINANCE_BLUE);
+ if t > 255 then t:= 255;
+ WaterColorArray[i].r:= t;
+ WaterColorArray[i].g:= t;
+ WaterColorArray[i].b:= t
+ end
+ end;
s:= UserPathz[ptCurrTheme] + '/' + cThemeCFGFilename;
if not FileExists(s) then s:= Pathz[ptCurrTheme] + '/' + cThemeCFGFilename;
@@ -445,6 +465,14 @@
c2.g:= StrToInt(Trim(Copy(s, 1, Pred(i))));
Delete(s, 1, i);
c2.b:= StrToInt(Trim(s));
+ if cGrayScale then
+ begin
+ t:= round(SkyColor.r * RGB_LUMINANCE_RED + SkyColor.g * RGB_LUMINANCE_GREEN + SkyColor.b * RGB_LUMINANCE_BLUE);
+ if t > 255 then t:= 255;
+ c2.r:= t;
+ c2.g:= t;
+ c2.b:= t
+ end;
cExplosionBorderColor:= c2.value or AMask;
end
else if key = 'water-top' then
@@ -588,6 +616,8 @@
vobFallSpeed:= StrToInt(Trim(s));
end;
end
+ else if key = 'flatten-flakes' then cFlattenFlakes:= true
+ else if key = 'flatten-clouds' then cFlattenClouds:= true
else if key = 'sd-water-top' then
begin
i:= Pos(',', s);
--- a/hedgewars/uMisc.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uMisc.pas Sat Nov 12 17:06:49 2011 +0100
@@ -53,21 +53,21 @@
f: file;
// Windows Bitmap Header
head: array[0..53] of Byte = (
- $42, $4D, // identifier ("BM")
- 0, 0, 0, 0, // file size
- 0, 0, 0, 0, // reserved
- 54, 0, 0, 0, // starting offset
- 40, 0, 0, 0, // header size
- 0, 0, 0, 0, // width
- 0, 0, 0, 0, // height
- 1, 0, // color planes
- 24, 0, // bit depth
- 0, 0, 0, 0, // compression method (uncompressed)
- 0, 0, 0, 0, // image size
- 96, 0, 0, 0, // horizontal resolution
- 96, 0, 0, 0, // vertical resolution
- 0, 0, 0, 0, // number of colors (all)
- 0, 0, 0, 0 // number of important colors
+ $42, $4D, // identifier ("BM")
+ 0, 0, 0, 0, // file size
+ 0, 0, 0, 0, // reserved
+ 54, 0, 0, 0, // starting offset
+ 40, 0, 0, 0, // header size
+ 0, 0, 0, 0, // width
+ 0, 0, 0, 0, // height
+ 1, 0, // color planes
+ 32, 0, // bit depth
+ 0, 0, 0, 0, // compression method (uncompressed)
+ 0, 0, 0, 0, // image size
+ 96, 0, 0, 0, // horizontal resolution
+ 96, 0, 0, 0, // vertical resolution
+ 0, 0, 0, 0, // number of colors (all)
+ 0, 0, 0, 0 // number of important colors
);
begin
// flash
@@ -75,7 +75,7 @@
ScreenFadeValue:= sfMax;
ScreenFadeSpeed:= 5;
-size:= toPowerOf2(cScreenWidth) * toPowerOf2(cScreenHeight) * 3;
+size:= toPowerOf2(cScreenWidth) * toPowerOf2(cScreenHeight) * 4;
p:= GetMem(size);
// memory could not be allocated
@@ -86,7 +86,6 @@
end;
// update header information and file name
-
filename:= UserPathPrefix + '/Screenshots/' + filename + '.bmp';
head[$02]:= (size + 54) and $ff;
@@ -106,9 +105,8 @@
head[$24]:= (size shr 16) and $ff;
head[$25]:= (size shr 24) and $ff;
-//remember that opengles operates on a single surface, so GL_FRONT *should* be implied
-//glReadBuffer(GL_FRONT);
-glReadPixels(0, 0, cScreenWidth, cScreenHeight, GL_BGR, GL_UNSIGNED_BYTE, p);
+// read pixel from the front buffer
+glReadPixels(0, 0, cScreenWidth, cScreenHeight, GL_BGRA, GL_UNSIGNED_BYTE, p);
{$IOCHECKS OFF}
Assign(f, filename);
@@ -128,7 +126,6 @@
{$IOCHECKS ON}
FreeMem(p, size);
-
MakeScreenshot:= success;
end;
--- a/hedgewars/uMobile.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uMobile.pas Sat Nov 12 17:06:49 2011 +0100
@@ -24,11 +24,9 @@
{$IFDEF IPHONEOS}
(* iOS calls written in ObjcExports.m *)
procedure clearView; cdecl; external;
-procedure startSpinningProgress; cdecl; external;
-procedure stopSpinningProgress; cdecl; external;
-procedure saveBeganSynching; cdecl; external;
+procedure startLoadingIndicator; cdecl; external;
+procedure stopLoadingIndicator; cdecl; external;
procedure saveFinishedSynching; cdecl; external;
-procedure setGameRunning(arg: boolean); cdecl; external;
procedure updateVisualsNewTurn; cdecl; external;
function isApplePhone: Boolean; cdecl; external;
procedure AudioServicesPlaySystemSound(num: LongInt); cdecl; external;
@@ -40,8 +38,7 @@
procedure GameLoaded; inline;
procedure AmmoUpdate; // do not inline
procedure NewTurnBeginning; inline;
-procedure SaveBegan; inline;
-procedure SaveFinished; inline;
+procedure SaveLoadingEnded; inline;
implementation
uses uVariables;
@@ -71,14 +68,14 @@
procedure GameLoading; inline;
begin
{$IFDEF IPHONEOS}
- startSpinningProgress();
+ startLoadingIndicator();
{$ENDIF}
end;
procedure GameLoaded; inline;
begin
{$IFDEF IPHONEOS}
- stopSpinningProgress();
+ stopLoadingIndicator();
{$ENDIF}
end;
@@ -101,14 +98,7 @@
AmmoUpdate();
end;
-procedure SaveBegan; inline;
-begin
-{$IFDEF IPHONEOS}
- saveBeganSynching();
-{$ENDIF}
-end;
-
-procedure SaveFinished; inline;
+procedure SaveLoadingEnded; inline;
begin
{$IFDEF IPHONEOS}
saveFinishedSynching();
--- a/hedgewars/uRender.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uRender.pas Sat Nov 12 17:06:49 2011 +0100
@@ -147,11 +147,9 @@
glPushMatrix;
glTranslatef(X, Y, 0);
+if Dir = 0 then Dir:= 1;
-if Dir < 0 then
- glRotatef(Angle, 0, 0, -1)
-else
- glRotatef(Angle, 0, 0, 1);
+glRotatef(Angle, 0, 0, Dir);
glTranslatef(Dir*OffsetX, OffsetY, 0);
glScalef(Scale, Scale, 1);
@@ -159,10 +157,7 @@
// Any reason for this call? And why only in t direction, not s?
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-if Dir < 0 then
- hw:= w div -2
-else
- hw:= w div 2;
+hw:= w div (2 div Dir);
nx:= round(Texture^.w / w); // number of horizontal frames
ny:= round(Texture^.h / h); // number of vertical frames
--- a/hedgewars/uRenderUtils.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uRenderUtils.pas Sat Nov 12 17:06:49 2011 +0100
@@ -68,7 +68,7 @@
clr: TSDL_Color;
finalRect: TSDL_Rect;
begin
- TTF_SizeUTF8(Fontz[Font].Handle, Str2PChar(s), w, h);
+ TTF_SizeUTF8(Fontz[Font].Handle, Str2PChar(s), @w, @h);
finalRect.x:= X;
finalRect.y:= Y;
finalRect.w:= w + FontBorder * 2 + 4;
@@ -173,7 +173,7 @@
if length(s) = 0 then s:= ' ';
font:= CheckCJKFont(s, font);
w:= 0; h:= 0; // avoid compiler hints
- TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(s), w, h);
+ TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(s), @w, @h);
finalSurface:= SDL_CreateRGBSurface(SDL_SWSURFACE, w + FontBorder * 2 + 4, h + FontBorder * 2,
32, RMask, GMask, BMask, AMask);
@@ -229,7 +229,7 @@
if length(s) = 0 then s:= '...';
font:= CheckCJKFont(s, font);
w:= 0; h:= 0; // avoid compiler hints
- TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(s), w, h);
+ TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(s), @w, @h);
if w<8 then w:= 8;
j:= 0;
if (length(s) > 20) then
@@ -248,7 +248,7 @@
while s[prevpos+1] = ' ' do inc(prevpos);
substr:= copy(s, prevpos+1, pos-prevpos-1);
i:= 0; j:= 0;
- TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(substr), i, j);
+ TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(substr), @i, @j);
if i > w then w:= i;
prevpos:= pos;
end;
--- a/hedgewars/uScript.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uScript.pas Sat Nov 12 17:06:49 2011 +0100
@@ -1627,23 +1627,24 @@
// pop game variables
ParseCommand('seed ' + ScriptGetString('Seed'), true);
-ParseCommand('template_filter ' + IntToStr(ScriptGetInteger('TemplateFilter')), true);
-ParseCommand('mapgen ' + IntToStr(ScriptGetInteger('MapGen')), true);
-ParseCommand('$gmflags ' + ScriptGetString('GameFlags'), true);
-ParseCommand('$turntime ' + ScriptGetString('TurnTime'), true);
-ParseCommand('$casefreq ' + ScriptGetString('CaseFreq'), true);
-ParseCommand('$healthprob ' + ScriptGetString('HealthCaseProb'), true);
-ParseCommand('$hcaseamount ' + ScriptGetString('HealthCaseAmount'), true);
-ParseCommand('$damagepct ' + ScriptGetString('DamagePercent'), true);
-ParseCommand('$minesnum ' + ScriptGetString('MinesNum'), true);
-ParseCommand('$minestime ' + ScriptGetString('MinesTime'), true);
-ParseCommand('$minedudpct ' + ScriptGetString('MineDudPercent'), true);
-ParseCommand('$explosives ' + ScriptGetString('Explosives'), true);
-ParseCommand('$delay ' + ScriptGetString('Delay'), true);
-ParseCommand('$ready ' + ScriptGetString('Ready'), true);
-ParseCommand('$sd_turns ' + ScriptGetString('SuddenDeathTurns'), true);
-ParseCommand('$waterrise ' + ScriptGetString('WaterRise'), true);
-ParseCommand('$healthdec ' + ScriptGetString('HealthDecrease'), true);
+cTemplateFilter := ScriptGetInteger('TemplateFilter');
+cMapGen := ScriptGetInteger('MapGen');
+GameFlags := ScriptGetInteger('GameFlags');
+cHedgehogTurnTime:= ScriptGetInteger('TurnTime');
+cCaseFactor := ScriptGetInteger('CaseFreq');
+cHealthCaseProb := ScriptGetInteger('HealthCaseProb');
+cHealthCaseAmount:= ScriptGetInteger('HealthCaseAmount');
+cDamagePercent := ScriptGetInteger('DamagePercent');
+cLandMines := ScriptGetInteger('MinesNum');
+cMinesTime := ScriptGetInteger('MinesTime');
+cMineDudPercent := ScriptGetInteger('MineDudPercent');
+cExplosives := ScriptGetInteger('Explosives');
+cInactDelay := ScriptGetInteger('Delay');
+cReadyDelay := ScriptGetInteger('Ready');
+cSuddenDTurns := ScriptGetInteger('SuddenDeathTurns');
+cWaterRise := ScriptGetInteger('WaterRise');
+cHealthDecrease := ScriptGetInteger('HealthDecrease');
+
if ScriptGetString('Map') <> '' then
ParseCommand('map ' + ScriptGetString('Map'), true);
if ScriptGetString('Theme') <> '' then
--- a/hedgewars/uStats.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uStats.pas Sat Nov 12 17:06:49 2011 +0100
@@ -129,7 +129,7 @@
else if AmmoDamagingUsed then
AddVoice(sndMissed, PreviousTeam^.voicepack)
- else if (AmmoUsedCount > 0) and not isTurnSkipped then
+ else if (AmmoUsedCount > 0) and (not isTurnSkipped) then
// nothing ?
else if isTurnSkipped then
begin
--- a/hedgewars/uStore.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uStore.pas Sat Nov 12 17:06:49 2011 +0100
@@ -56,7 +56,7 @@
finalRect: TSDL_Rect;
begin
w:= 0; h:= 0; // avoid compiler hints
-TTF_SizeUTF8(Fontz[Font].Handle, Str2PChar(s), w, h);
+TTF_SizeUTF8(Fontz[Font].Handle, Str2PChar(s), @w, @h);
finalRect.x:= X + FontBorder + 2;
finalRect.y:= Y + FontBorder;
finalRect.w:= w + FontBorder * 2 + 4;
@@ -796,13 +796,13 @@
// TODO: Recheck height/position calculation
// get caption's dimensions
-TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(caption), i, j);
+TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(caption), @i, @j);
// width adds 36 px (image + space)
w:= i + 36 + wa;
h:= j + ha;
// get sub caption's dimensions
-TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(subcaption), i, j);
+TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(subcaption), @i, @j);
// width adds 36 px (image + space)
if w < (i + 36 + wa) then w:= i + 36 + wa;
inc(h, j + ha);
@@ -815,7 +815,7 @@
SplitByChar(tmpline, tmpdesc, '|');
if tmpline <> '' then
begin
- TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(tmpline), i, j);
+ TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(tmpline), @i, @j);
if w < (i + wa) then w:= i + wa;
inc(h, j + ha)
end
@@ -824,7 +824,7 @@
if extra <> '' then
begin
// get extra label's dimensions
- TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(extra), i, j);
+ TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(extra), @i, @j);
if w < (i + wa) then w:= i + wa;
inc(h, j + ha);
end;
--- a/hedgewars/uTextures.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uTextures.pas Sat Nov 12 17:06:49 2011 +0100
@@ -23,6 +23,7 @@
uses SDLh, uTypes;
function NewTexture(width, height: Longword; buf: Pointer): PTexture;
+procedure Surface2GrayScale(surf: PSDL_Surface);
function Surface2Tex(surf: PSDL_Surface; enableClamp: boolean): PTexture;
procedure FreeTexture(tex: PTexture);
@@ -98,6 +99,26 @@
SetTextureParameters(true);
end;
+procedure Surface2GrayScale(surf: PSDL_Surface);
+var tw, x, y: Longword;
+ fromP4: PLongWordArray;
+begin
+fromP4:= Surf^.pixels;
+for y:= 0 to Pred(Surf^.h) do
+ begin
+ for x:= 0 to Pred(Surf^.w) do
+ begin
+ tw:= fromP4^[x];
+ tw:= round((tw shr RShift and $FF) * RGB_LUMINANCE_RED +
+ (tw shr GShift and $FF) * RGB_LUMINANCE_GREEN +
+ (tw shr BShift and $FF) * RGB_LUMINANCE_BLUE);
+ if tw > 255 then tw:= 255;
+ tw:= (tw and $FF shl RShift) or (tw and $FF shl BShift) or (tw and $FF shl GShift) or (fromP4^[x] and AMask);
+ fromP4^[x]:= tw;
+ end;
+ fromP4:= @(fromP4^[Surf^.pitch div 4])
+ end;
+end;
function Surface2Tex(surf: PSDL_Surface; enableClamp: boolean): PTexture;
var tw, th, x, y: Longword;
tmpp: pointer;
@@ -133,22 +154,8 @@
fromP4:= Surf^.pixels;
-if cGrayScale then
- for y:= 0 to Pred(Surf^.h) do
- begin
- for x:= 0 to Pred(Surf^.w) do
- begin
- tw:= fromP4^[x];
- tw:= round((tw shr RShift and $FF) * RGB_LUMINANCE_RED +
- (tw shr GShift and $FF) * RGB_LUMINANCE_GREEN +
- (tw shr BShift and $FF) * RGB_LUMINANCE_BLUE);
- if tw > 255 then tw:= 255;
- tw:= (tw and $FF shl RShift) or (tw and $FF shl BShift) or (tw and $FF shl GShift) or (fromP4^[x] and AMask);
- fromP4^[x]:= tw;
- end;
- fromP4:= @(fromP4^[Surf^.pitch div 4])
- end;
-
+if cGrayScale then Surface2GrayScale(Surf);
+
if (not SupportNPOTT) and (not (isPowerOf2(Surf^.w) and isPowerOf2(Surf^.h))) then
begin
tw:= toPowerOf2(Surf^.w);
--- a/hedgewars/uTypes.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uTypes.pas Sat Nov 12 17:06:49 2011 +0100
@@ -32,7 +32,7 @@
type
HwColor4f = record
- r, g, b, a: byte
+ r, g, b, a: byte;
end;
// Possible states of the game
--- a/hedgewars/uVariables.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uVariables.pas Sat Nov 12 17:06:49 2011 +0100
@@ -46,6 +46,8 @@
PathPrefix : shortstring = './';
UserPathPrefix : shortstring = './';
cShowFPS : boolean = false;
+ cFlattenFlakes : boolean = false;
+ cFlattenClouds : boolean = false;
cAltDamage : boolean = true;
cReducedQuality : LongWord = rqNone;
UserNick : shortstring = '';
@@ -83,7 +85,6 @@
cMineDudPercent : LongWord;
cTemplateFilter : LongInt;
cMapGen : LongInt;
- cMazeSize : LongInt;
cRopePercent : LongWord;
cGetAwayTime : LongWord;
@@ -126,6 +127,7 @@
cLandMines : Longword;
cExplosives : Longword;
+ cScriptName : shortstring;
cSeed : shortstring;
cVolumeDelta : LongInt;
cHasFocus : boolean;
@@ -345,7 +347,7 @@
(FileName: 'AirBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAirBomb
(FileName: 'Airplane'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
- Width: 254; Height: 101; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAirplane
+ Width: 256; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAirplane
(FileName: 'amAirplane'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAmAirplane
(FileName: 'amGirder'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
@@ -1209,8 +1211,7 @@
ammoprop_NeedTarget or
ammoprop_AttackingPut or
ammoprop_DontHold or
- ammoprop_NotBorder or
- ammoprop_SetBounce;
+ ammoprop_NotBorder;
Count: 1;
NumPerTurn: 0;
Timer: 0;
@@ -2338,7 +2339,7 @@
framel, framer, depthl, depthr: GLuint;
texl, texr: GLuint;
- VisualGearLayers: array[0..3] of PVisualGear;
+ VisualGearLayers: array[0..6] of PVisualGear;
lastVisualGearByUID: PVisualGear;
vobFrameTicks, vobFramesCount, vobCount: Longword;
vobVelocity, vobFallSpeed: LongInt;
@@ -2465,7 +2466,6 @@
cMineDudPercent := 0;
cTemplateFilter := 0;
cMapGen := 0; // MAPGEN_REGULAR
- cMazeSize := 0;
cHedgehogTurnTime := 45000;
cMinesTime := 3000;
cMaxAIThinkTime := 9000;
@@ -2505,6 +2505,7 @@
isFirstFrame := true;
isSEBackup := true;
autoCameraOn := true;
+ cScriptName := '';
cSeed := '';
cVolumeDelta := 0;
cHasFocus := true;
@@ -2555,10 +2556,13 @@
PathPrefix := './';
UserPathPrefix := './';
cShowFPS := false;
+ cFlattenFlakes := false;
+ cFlattenClouds := false;
cAltDamage := true;
cReducedQuality := rqNone;
UserNick := '';
recordFileName := '';
+ cScriptName := '';
cReadyDelay := 5000;
cStereoMode := smNone;
end;
--- a/hedgewars/uVisualGears.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uVisualGears.pas Sat Nov 12 17:06:49 2011 +0100
@@ -337,14 +337,21 @@
if State <> 0 then gear^.State:= State;
case Gear^.Kind of
- vgtFlake: if random(2) = 0 then gear^.Layer:= 0 // 50%
- else if random(2) = 0 then gear^.Layer:= 1 // 25%
- else gear^.Layer:= random(2)+2; // 12.5% each
+ vgtFlake: if cFlattenFlakes then gear^.Layer:= 0
+ else if random(3) = 0 then gear^.Layer:= 0 // 33% - far back
+ else if random(3) = 0 then gear^.Layer:= 4 // 22% - mid-distance
+ else if random(3) <> 0 then gear^.Layer:= 5 // 30% - just behind land
+ else if random(2) = 0 then gear^.Layer:= 6 // 7% - just in front of land
+ else gear^.Layer:= 2; // 7% - close up
- // 0: this layer is very distant in the background when stereo
+ vgtCloud: if cFlattenClouds then gear^.Layer:= 5
+ else if random(3) = 0 then gear^.Layer:= 0
+ else gear^.Layer:= random(2) + 4;
+
+ // 0: this layer is very distant in the background when in stereo
vgtTeamHealthSorter,
- vgtSmoothWindBar,
- vgtCloud: gear^.Layer:= 0;
+ vgtSmoothWindBar: gear^.Layer:= 0;
+
// 1: this layer is on the land level (which is close but behind the screen plane) when stereo
vgtSmokeTrace,
@@ -413,7 +420,7 @@
begin
if Steps = 0 then exit;
-for i:= 0 to 3 do
+for i:= 0 to 6 do
begin
t:= VisualGearLayers[i];
while t <> nil do
@@ -427,47 +434,32 @@
procedure KickFlakes(Radius, X, Y: LongInt);
var Gear, t: PVisualGear;
- dmg: LongInt;
+ dmg, i: LongInt;
begin
if (vobCount = 0) or (vobCount > 200) then exit;
-t:= VisualGearLayers[1];
-while t <> nil do
- begin
- Gear:= t;
- if Gear^.Kind = vgtFlake then
- begin
- // Damage calc from doMakeExplosion
- dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5);
- if dmg > 1 then
+for i:= 2 to 6 do
+ if i <> 3 then
+ begin
+ t:= VisualGearLayers[i];
+ while t <> nil do
begin
- Gear^.tdX:= 0.02 * dmg + 0.01;
- if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX;
- Gear^.tdY:= 0.02 * dmg + 0.01;
- if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY;
- Gear^.Timer:= 200
+ Gear:= t;
+ if Gear^.Kind = vgtFlake then
+ begin
+ // Damage calc from doMakeExplosion
+ dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5);
+ if dmg > 1 then
+ begin
+ Gear^.tdX:= 0.02 * dmg + 0.01;
+ if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX;
+ Gear^.tdY:= 0.02 * dmg + 0.01;
+ if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY;
+ Gear^.Timer:= 200
+ end
+ end;
+ t:= Gear^.NextGear
end
- end;
- t:= Gear^.NextGear
- end;
-t:= VisualGearLayers[3];
-while t <> nil do
- begin
- Gear:= t;
- if Gear^.Kind = vgtFlake then
- begin
- // Damage calc from doMakeExplosion
- dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5);
- if dmg > 1 then
- begin
- Gear^.tdX:= 0.02 * dmg + 0.01;
- if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX;
- Gear^.tdY:= 0.02 * dmg + 0.01;
- if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY;
- Gear^.Timer:= 200
- end
- end;
- t:= Gear^.NextGear
- end
+ end
end;
procedure DrawVisualGears(Layer: LongWord);
@@ -484,20 +476,36 @@
begin
if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint);
case Gear^.Kind of
- vgtFlake: if SuddenDeathDmg then
- if vobSDVelocity = 0 then
- DrawTextureF(SpritesData[sprSDFlake].Texture, 0.5, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)
- else
- DrawRotatedTextureF(SpritesData[sprSDFlake].Texture, 0.5, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle)
+ vgtCloud: if SuddenDeathDmg then
+ DrawTextureF(SpritesData[sprSDCloud].Texture, 0.25, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 2, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height)
else
- if vobVelocity = 0 then
- DrawTextureF(SpritesData[sprFlake].Texture, 0.5, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)
+ DrawTextureF(SpritesData[sprCloud].Texture, 0.25, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 2, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height);
+ vgtFlake: if cFlattenFlakes then
+ begin
+ if SuddenDeathDmg then
+ if vobSDVelocity = 0 then
+ DrawSprite(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
+ else
+ DrawRotatedF(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
else
- DrawRotatedTextureF(SpritesData[sprFlake].Texture, 0.5, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle);
- vgtCloud: if SuddenDeathDmg then
- DrawSprite(sprSDCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
+ if vobVelocity = 0 then
+ DrawSprite(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
+ else
+ DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
+ end
else
- DrawSprite(sprCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame);
+ begin
+ if SuddenDeathDmg then
+ if vobSDVelocity = 0 then
+ DrawTextureF(SpritesData[sprSDFlake].Texture, 0.5, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)
+ else
+ DrawRotatedTextureF(SpritesData[sprSDFlake].Texture, 0.5, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle)
+ else
+ if vobVelocity = 0 then
+ DrawTextureF(SpritesData[sprFlake].Texture, 0.5, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)
+ else
+ DrawRotatedTextureF(SpritesData[sprFlake].Texture, 0.5, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle)
+ end;
end;
if Gear^.Tint <> $FFFFFFFF then Tint($FF,$FF,$FF,$FF);
Gear:= Gear^.NextGear
@@ -527,7 +535,7 @@
end;
if (cReducedQuality and rqAntiBoom) = 0 then
case Gear^.Kind of
- vgtSmoke: DrawTextureF(SpritesData[sprSmoke].Texture, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 7 - Gear^.Frame, 0, SpritesData[sprSmoke].Width, SpritesData[sprSmoke].Height);
+ vgtSmoke: DrawTextureF(SpritesData[sprSmoke].Texture, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 7 - Gear^.Frame, 1, SpritesData[sprSmoke].Width, SpritesData[sprSmoke].Height);
vgtSmokeWhite: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame);
vgtDust: if Gear^.State = 1 then
DrawSprite(sprSnowDust, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame)
@@ -560,6 +568,7 @@
tinted:= false;
if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint);
case Gear^.Kind of
+(*
vgtFlake: if SuddenDeathDmg then
if vobSDVelocity = 0 then
DrawSprite(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
@@ -569,7 +578,7 @@
if vobVelocity = 0 then
DrawSprite(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
else
- DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
+ DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);*)
vgtSpeechBubble: begin
if (Gear^.Tex <> nil) and (((Gear^.State = 0) and (Gear^.Hedgehog^.Team <> CurrentTeam)) or (Gear^.State = 1)) then
begin
@@ -686,7 +695,81 @@
if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF);
Gear:= Gear^.NextGear
end
- end
+ end;
+ // this layer is half-way between the screen plane (depth = 0) when in stereo, and the land
+ 4: begin
+ Gear:= VisualGearLayers[4];
+ while Gear <> nil do
+ begin
+ if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint);
+ case Gear^.Kind of
+ vgtCloud: if SuddenDeathDmg then
+ DrawTextureF(SpritesData[sprSDCloud].Texture, 0.4, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 2, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height)
+ else
+ DrawTextureF(SpritesData[sprCloud].Texture, 0.4, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 2, SpritesData[sprCloud].Width, SpritesData[sprCloud].Height);
+ vgtFlake: if SuddenDeathDmg then
+ if vobSDVelocity = 0 then
+ DrawTextureF(SpritesData[sprSDFlake].Texture, 0.8, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)
+ else
+ DrawRotatedTextureF(SpritesData[sprSDFlake].Texture, 0.8, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle)
+ else
+ if vobVelocity = 0 then
+ DrawTextureF(SpritesData[sprFlake].Texture, 0.8, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height)
+ else
+ DrawRotatedTextureF(SpritesData[sprFlake].Texture, 0.8, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, SpritesData[sprFlake].Width, SpritesData[sprFlake].Height, Gear^.Angle);
+ end;
+ if (Gear^.Tint <> $FFFFFFFF) then Tint($FF,$FF,$FF,$FF);
+ Gear:= Gear^.NextGear
+ end
+ end;
+ // this layer is on the screen plane (depth = 0) when stereo, but just behind the land
+ 5: begin
+ Gear:= VisualGearLayers[5];
+ while Gear <> nil do
+ begin
+ if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint);
+ case Gear^.Kind of
+ vgtCloud: if SuddenDeathDmg then
+ DrawSprite(sprSDCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
+ else
+ DrawSprite(sprCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame);
+ vgtFlake: if SuddenDeathDmg then
+ if vobSDVelocity = 0 then
+ DrawSprite(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
+ else
+ DrawRotatedF(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
+ else
+ if vobVelocity = 0 then
+ DrawSprite(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
+ else
+ DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
+ end;
+ if (Gear^.Tint <> $FFFFFFFF) then Tint($FF,$FF,$FF,$FF);
+ Gear:= Gear^.NextGear
+ end
+ end;
+ // this layer is on the screen plane (depth = 0) when stereo, but just in front of the land
+ 6: begin
+ Gear:= VisualGearLayers[6];
+ while Gear <> nil do
+ begin
+ if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint);
+ case Gear^.Kind of
+ vgtFlake: if SuddenDeathDmg then
+ if vobSDVelocity = 0 then
+ DrawSprite(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
+ else
+ DrawRotatedF(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle)
+ else
+ if vobVelocity = 0 then
+ DrawSprite(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame)
+ else
+ DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle);
+ end;
+ if (Gear^.Tint <> $FFFFFFFF) then Tint($FF,$FF,$FF,$FF);
+ Gear:= Gear^.NextGear
+ end
+ end;
end;
end;
@@ -762,7 +845,7 @@
begin
if (cReducedQuality and rqKillFlakes) <> 0 then exit;
if vobCount = vobSDCount then exit;
-for i:= 0 to 3 do
+for i:= 0 to 6 do
begin
vg:= VisualGearLayers[i];
while vg <> nil do
@@ -785,14 +868,14 @@
procedure initModule;
var i: LongWord;
begin
-for i:= 0 to 3 do
+for i:= 0 to 6 do
VisualGearLayers[i]:= nil;
end;
procedure freeModule;
var i: LongWord;
begin
-for i:= 0 to 3 do
+for i:= 0 to 6 do
while VisualGearLayers[i] <> nil do DeleteVisualGear(VisualGearLayers[i]);
end;
--- a/hedgewars/uWorld.pas Sat Nov 12 15:48:55 2011 +0100
+++ b/hedgewars/uWorld.pas Sat Nov 12 17:06:49 2011 +0100
@@ -74,10 +74,11 @@
const cStereo_Sky = 0.0500;
cStereo_Horizon = 0.0250;
+ cStereo_MidDistance = 0.0175;
cStereo_Water_distant = 0.0125;
cStereo_Land = 0.0075;
cStereo_Water_near = 0.0025;
- cStereo_Outside = 0.0400;
+ cStereo_Outside = -0.0400;
procedure InitWorld;
var i, t: LongInt;
@@ -184,9 +185,17 @@
WorldDx:= - (LAND_WIDTH div 2) + cScreenWidth div 2;
WorldDy:= - (LAND_HEIGHT - (playHeight div 2)) + (cScreenHeight div 2);
AMSlotSize:= 33;
-{$IFDEF MOBILE}
-AMxOffset:= 10;
-AMyOffset:= 10 + 123; // moved downwards
+{$IFDEF IPHONEOS}
+if isPhone() then
+ begin
+ AMxOffset:= -30 + cScreenHeight div 2;
+ AMyOffset:= 10;
+ end
+else
+ begin
+ AMxOffset:= AMSlotSize + cScreenHeight div 2;
+ AMyOffset:= -10 + cScreenWidth div 3;
+ end;
AMWidth:= (cMaxSlotAmmoIndex + 1) * AMSlotSize + AMxOffset;
{$ELSE}
AMxOffset:= 10;
@@ -210,205 +219,201 @@
Slot, Pos, STurns: LongInt;
Ammo: PHHAmmo;
begin
-if (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) then
- bShowAmmoMenu:= false;
-if bShowAmmoMenu then
- begin
- FollowGear:= nil;
- if AMxShift = AMWidth then prevPoint.X:= 0;
- if (cReducedQuality and rqSlowMenu) <> 0 then
- AMxShift:= 0
- else
- if AMxShift > MENUSPEED then
- dec(AMxShift, MENUSPEED)
- else
- AMxShift:= 0;
- end else
- begin
- if AMxShift = 0 then
- begin
- CursorPoint.X:= cScreenWidth shr 1;
- CursorPoint.Y:= cScreenHeight shr 1;
- prevPoint:= CursorPoint;
- end;
- if (cReducedQuality and rqSlowMenu) <> 0 then
- AMxShift:= AMWidth
- else
- if AMxShift < (AMWidth - MENUSPEED) then
- inc(AMxShift, MENUSPEED)
- else
- AMxShift:= AMWidth;
- end;
-Ammo:= nil;
-if (CurrentTeam <> nil) and (CurrentHedgehog <> nil) and (not CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel = 0) then
- Ammo:= CurrentHedgehog^.Ammo
-else if (LocalAmmo <> -1) then
- Ammo:= GetAmmoByNum(LocalAmmo);
-Pos:= -1;
-if Ammo = nil then
- begin
- bShowAmmoMenu:= false;
- exit
- end;
-SlotsNum:= 0;
-x:= (cScreenWidth shr 1) - AMWidth + AMxShift;
+ if (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or
+ ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) then
+ bShowAmmoMenu:= false;
-{$IFDEF MOBILE}
-Slot:= cMaxSlotIndex;
-x:= x - cOffsetY;
-y:= AMyOffset;
-dec(y, BORDERSIZE);
-DrawSprite(sprAMCorners, x - BORDERSIZE, y, 0);
-for i:= 0 to cMaxSlotAmmoIndex do
- DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 0);
-DrawSprite(sprAMCorners, x + AMWidth - AMxOffset, y, 1);
-inc(y, BORDERSIZE);
-
-for i:= 0 to cMaxSlotIndex do
- if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then
+ if bShowAmmoMenu then
+ // show ammo menu
begin
- if (cScreenHeight - CursorPoint.Y >= y) and (cScreenHeight - CursorPoint.Y <= y + AMSlotSize) then Slot:= i;
- inc(SlotsNum);
- DrawSprite(sprAMBorderVertical, x - BORDERSIZE, y, 0);
- t:= 0;
- g:= 0;
- while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do
+ FollowGear:= nil;
+ if AMxShift = AMWidth then prevPoint.X:= 0;
+ if (cReducedQuality and rqSlowMenu) <> 0 then AMxShift:= 0
+ else
+ if AMxShift > MENUSPEED then dec(AMxShift, MENUSPEED)
+ else AMxShift:= 0;
+ end
+ else
+ // hide ammo menu
+ begin
+ if AMxShift = 0 then
begin
- DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1);
- if (Ammo^[i, t].AmmoType <> amNothing) then
- begin
- STurns:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber;
-
- if STurns >= 0 then
- begin
- DrawSprite(sprAMAmmosBW, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
- if STurns < 100 then DrawSprite(sprTurnsLeft, x + (g + 1) * AMSlotSize - 16, y + AMSlotSize - 16, STurns);
- end else
- DrawSprite(sprAMAmmos, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
- if (Slot = i)
- and (CursorPoint.X >= x + g * AMSlotSize)
- and (CursorPoint.X <= x + (g + 1) * AMSlotSize) then
- begin
- if (STurns < 0) then DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 0);
- Pos:= t;
- end;
- inc(g)
- end;
- inc(t)
+ CursorPoint.X:= cScreenWidth shr 1;
+ CursorPoint.Y:= cScreenHeight shr 1;
+ prevPoint:= CursorPoint;
end;
- for g:= g to cMaxSlotAmmoIndex do
- DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1);
- DrawSprite(sprAMBorderVertical, x + AMWidth - AMxOffset, y, 1);
- inc(y, AMSlotSize);
+ if (cReducedQuality and rqSlowMenu) <> 0 then AMxShift:= AMWidth+2
+ else
+ if AMxShift < (AMWidth - MENUSPEED) then inc(AMxShift, MENUSPEED)
+ else AMxShift:= AMWidth;
end;
-DrawSprite(sprAMCorners, x - BORDERSIZE, y, 2);
-for i:= 0 to cMaxSlotAmmoIndex do
- DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 1);
-DrawSprite(sprAMCorners, x + AMWidth - AMxOffset, y, 3);
-{$ELSE}
-Slot:= 0;
-y:= cScreenHeight - AMyOffset;
-DrawSprite(sprAMCorners, x - BORDERSIZE, y, 2);
-for i:= 0 to cMaxSlotAmmoIndex + 1 do
- DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 1);
-DrawSprite(sprAMCorners, x + AMWidth - AMxOffset, y, 3);
-dec(y, AMSlotSize);
-DrawSprite(sprAMBorderVertical, x - BORDERSIZE, y, 0);
-for i:= 0 to cMaxSlotAmmoIndex do
- DrawSprite(sprAMSlot, x + i * AMSlotSize, y, 2);
-DrawSprite(sprAMSlot, x + (cMaxSlotAmmoIndex + 1) * AMSlotSize, y, 1);
-DrawSprite(sprAMBorderVertical, x + AMWidth - AMxOffset, y, 1);
-
-for i:= cMaxSlotIndex downto 0 do
- if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then
+ // give the assigned ammo to hedgehog
+ Ammo:= nil;
+ if (CurrentTeam <> nil) and (CurrentHedgehog <> nil) and
+ (not CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel = 0) then
+ Ammo:= CurrentHedgehog^.Ammo
+ else if (LocalAmmo <> -1) then
+ Ammo:= GetAmmoByNum(LocalAmmo);
+ Pos:= -1;
+ if Ammo = nil then
begin
- if (cScreenHeight - CursorPoint.Y >= y - AMSlotSize) and (cScreenHeight - CursorPoint.Y <= y) then Slot:= i;
- dec(y, AMSlotSize);
- inc(SlotsNum);
- DrawSprite(sprAMBorderVertical, x - BORDERSIZE, y, 0);
- DrawSprite(sprAMSlot, x, y, 1);
- DrawSprite(sprAMSlotKeys, x, y + 1, i);
- t:= 0;
- g:= 1;
- while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do
- begin
- DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1);
- if (Ammo^[i, t].AmmoType <> amNothing) then
- begin
- STurns:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber;
+ bShowAmmoMenu:= false;
+ exit
+ end;
+ SlotsNum:= 0;
+ x:= (cScreenWidth shr 1) - AMWidth + AMxShift;
+
+{$IFDEF IPHONEOS}
+ Slot:= cMaxSlotIndex;
+ x:= x - cOffsetY;
+ y:= AMyOffset;
+ dec(y, BORDERSIZE);
+ DrawSprite(sprAMCorners, x - BORDERSIZE, y, 0);
+ for i:= 0 to cMaxSlotAmmoIndex do
+ DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 0);
+ DrawSprite(sprAMCorners, x + AMWidth - AMxOffset, y, 1);
+ inc(y, BORDERSIZE);
- if STurns >= 0 then
+ for i:= 0 to cMaxSlotIndex do
+ if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then
+ begin
+ if (cScreenHeight - CursorPoint.Y >= y) and (cScreenHeight - CursorPoint.Y <= y + AMSlotSize) then Slot:= i;
+ inc(SlotsNum);
+ DrawSprite(sprAMBorderVertical, x - BORDERSIZE, y, 0);
+ t:= 0;
+ g:= 0;
+ while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do
+ begin
+ DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1);
+ if (Ammo^[i, t].AmmoType <> amNothing) then
begin
- DrawSprite(sprAMAmmosBW, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
- if STurns < 100 then DrawSprite(sprTurnsLeft, x + (g + 1) * AMSlotSize - 16, y + AMSlotSize - 16, STurns);
- end else
- DrawSprite(sprAMAmmos, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
- if (Slot = i)
- and (CursorPoint.X >= x + g * AMSlotSize)
- and (CursorPoint.X <= x + (g + 1) * AMSlotSize) then
- begin
- if (STurns < 0) then DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 0);
- Pos:= t;
+ STurns:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber;
+
+ if STurns >= 0 then
+ begin
+ DrawSprite(sprAMAmmosBW, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
+ if STurns < 100 then DrawSprite(sprTurnsLeft, x + (g + 1) * AMSlotSize - 16, y + AMSlotSize - 16, STurns);
+ end
+ else
+ DrawSprite(sprAMAmmos, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
+ if (Slot = i) and (CursorPoint.X >= x + g * AMSlotSize) and
+ (CursorPoint.X <= x + (g + 1) * AMSlotSize) then
+ begin
+ if (STurns < 0) then DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 0);
+ Pos:= t;
+ end;
+ inc(g)
end;
- inc(g)
- end;
inc(t)
end;
- for g:= g to cMaxSlotAmmoIndex + 1 do
- DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1);
- DrawSprite(sprAMBorderVertical, x + AMWidth - AMxOffset, y, 1);
- end;
+
+ DrawSprite(sprAMCorners, x - BORDERSIZE, y, 2);
+ for i:= 0 to cMaxSlotAmmoIndex do
+ DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 1);
+ DrawSprite(sprAMCorners, x + AMWidth - AMxOffset, y, 3);
+{$ELSE}
+ Slot:= 0;
+ y:= cScreenHeight - AMyOffset;
+ DrawSprite(sprAMCorners, x - BORDERSIZE, y, 2);
+ for i:= 0 to cMaxSlotAmmoIndex + 1 do
+ DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 1);
+ DrawSprite(sprAMCorners, x + AMWidth - AMxOffset, y, 3);
+ dec(y, AMSlotSize);
+ DrawSprite(sprAMBorderVertical, x - BORDERSIZE, y, 0);
+ for i:= 0 to cMaxSlotAmmoIndex do
+ DrawSprite(sprAMSlot, x + i * AMSlotSize, y, 2);
+ DrawSprite(sprAMSlot, x + (cMaxSlotAmmoIndex + 1) * AMSlotSize, y, 1);
+ DrawSprite(sprAMBorderVertical, x + AMWidth - AMxOffset, y, 1);
-dec(y, BORDERSIZE);
-DrawSprite(sprAMCorners, x - BORDERSIZE, y, 0);
-for i:= 0 to cMaxSlotAmmoIndex + 1 do
- DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 0);
-DrawSprite(sprAMCorners, x + AMWidth - AMxOffset, y, 1);
-{$ENDIF}
+ for i:= cMaxSlotIndex downto 0 do
+ if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then
+ begin
+ if (cScreenHeight - CursorPoint.Y >= y - AMSlotSize) and (cScreenHeight - CursorPoint.Y <= y) then Slot:= i;
+ dec(y, AMSlotSize);
+ inc(SlotsNum);
+ DrawSprite(sprAMBorderVertical, x - BORDERSIZE, y, 0);
+ DrawSprite(sprAMSlot, x, y, 1);
+ DrawSprite(sprAMSlotKeys, x, y + 1, i);
+ t:= 0;
+ g:= 1;
+ while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do
+ begin
+ DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1);
+ if (Ammo^[i, t].AmmoType <> amNothing) then
+ begin
+ STurns:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber;
-if (Pos >= 0) then
- begin
- if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then
- begin
- if (amSel <> Ammo^[Slot, Pos].AmmoType) or (WeaponTooltipTex = nil) then
- begin
- amSel:= Ammo^[Slot, Pos].AmmoType;
- RenderWeaponTooltip(amSel)
+ if STurns >= 0 then
+ begin
+ DrawSprite(sprAMAmmosBW, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
+ if STurns < 100 then DrawSprite(sprTurnsLeft, x + (g + 1) * AMSlotSize - 16, y + AMSlotSize - 16, STurns);
+ end else
+ DrawSprite(sprAMAmmos, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
+ if (Slot = i) and (CursorPoint.X >= x + g * AMSlotSize) and
+ (CursorPoint.X <= x + (g + 1) * AMSlotSize) then
+ begin
+ if (STurns < 0) then DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 0);
+ Pos:= t;
+ end;
+ inc(g)
+ end;
+ inc(t)
+ end;
+ for g:= g to cMaxSlotAmmoIndex + 1 do
+ DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1);
+ DrawSprite(sprAMBorderVertical, x + AMWidth - AMxOffset, y, 1);
end;
-{$IFDEF MOBILE}
- DrawTexture(cScreenWidth div 2 - (AMWidth - 10) + AMxShift, AMyOffset - 25, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex);
-
- if Ammo^[Slot, Pos].Count < AMMO_INFINITE then
- DrawTexture(cScreenWidth div 2 + AMxOffset - 45, AMyOffset - 25, CountTexz[Ammo^[Slot, Pos].Count]);
-{$ELSE}
- DrawTexture(cScreenWidth div 2 - (AMWidth - 10) + AMxShift, cScreenHeight - AMyOffset - 25, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex);
- if Ammo^[Slot, Pos].Count < AMMO_INFINITE then
- DrawTexture(cScreenWidth div 2 + AMxOffset - 45, cScreenHeight - AMyOffset - 25, CountTexz[Ammo^[Slot, Pos].Count]);
+ dec(y, BORDERSIZE);
+ DrawSprite(sprAMCorners, x - BORDERSIZE, y, 0);
+ for i:= 0 to cMaxSlotAmmoIndex + 1 do
+ DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 0);
+ DrawSprite(sprAMCorners, x + AMWidth - AMxOffset, y, 1);
{$ENDIF}
- if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber < 0) then
+ if (Pos >= 0) then
+ begin
+ if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then
begin
- bShowAmmoMenu:= false;
- SetWeapon(Ammo^[Slot, Pos].AmmoType);
- bSelected:= false;
- FreeWeaponTooltip;
- exit
- end;
- end
- end
-else
- FreeWeaponTooltip;
-if (WeaponTooltipTex <> nil) and (AMxShift = 0) then
-{$IFDEF MOBILE}
- ShowWeaponTooltip(x - WeaponTooltipTex^.w - 3, AMyOffset - 1);
+ if (amSel <> Ammo^[Slot, Pos].AmmoType) or (WeaponTooltipTex = nil) then
+ begin
+ amSel:= Ammo^[Slot, Pos].AmmoType;
+ RenderWeaponTooltip(amSel)
+ end;
+
+{$IFDEF IPHONEOS}
+ DrawTexture(cScreenWidth div 2 - (AMWidth - 10) + AMxShift, AMyOffset - 25, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex);
+ if Ammo^[Slot, Pos].Count < AMMO_INFINITE then
+ DrawTexture(cScreenWidth div 2 - (AMWidth - 10) + 163, AMyOffset - 25, CountTexz[Ammo^[Slot, Pos].Count]);
{$ELSE}
- ShowWeaponTooltip(x - WeaponTooltipTex^.w - 3, Min(y + 1, cScreenHeight - WeaponTooltipTex^.h - 40));
+ DrawTexture(cScreenWidth div 2 - (AMWidth - 10) + AMxShift, cScreenHeight - AMyOffset - 25, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex);
+ if Ammo^[Slot, Pos].Count < AMMO_INFINITE then
+ DrawTexture(cScreenWidth div 2 + AMxOffset - 45, cScreenHeight - AMyOffset - 25, CountTexz[Ammo^[Slot, Pos].Count]);
{$ENDIF}
-bSelected:= false;
-if AMxShift = 0 then DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8)
+ if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber < 0) then
+ begin
+ bShowAmmoMenu:= false;
+ SetWeapon(Ammo^[Slot, Pos].AmmoType);
+ bSelected:= false;
+ FreeWeaponTooltip;
+ exit
+ end;
+ end
+ end
+ else
+ FreeWeaponTooltip;
+
+ if (WeaponTooltipTex <> nil) and (AMxShift = 0) then
+{$IFDEF IPHONEOS}
+ ShowWeaponTooltip(-WeaponTooltipTex^.w div 2, 100);
+{$ELSE}
+ ShowWeaponTooltip(x - WeaponTooltipTex^.w - 3, Min(y + 1, cScreenHeight - WeaponTooltipTex^.h - 40));
+{$ENDIF}
+
+ bSelected:= false;
+ if AMxShift = 0 then DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8)
end;
procedure DrawWater(Alpha: byte; OffsetY: LongInt);
@@ -790,6 +795,8 @@
end;
DrawVisualGears(0);
+ ChangeDepth(RM, -cStereo_MidDistance);
+ DrawVisualGears(4);
if (cReducedQuality and rq2DWater) = 0 then
begin
@@ -808,6 +815,7 @@
DrawWaves(-1, 100, - (cWaveHeight + (cWaveHeight shr 1)), 0);
changeDepth(RM, cStereo_Land);
+ DrawVisualGears(5);
DrawLand(WorldDx, WorldDy);
DrawWater(255, 0);
@@ -836,6 +844,7 @@
DrawVisualGears(1);
DrawGears;
+ DrawVisualGears(6);
if SuddenDeathDmg then
DrawWater(cSDWaterOpacity, 0)
@@ -1201,21 +1210,21 @@
uCursor.updatePosition();
{$ENDIF}
z:= round(200/zoom);
-if (not PlacingHogs) and (FollowGear <> nil) and (not isCursorVisible) and (not fastUntilLag) then
+if not PlacingHogs and (FollowGear <> nil) and not isCursorVisible and not bShowAmmoMenu and not fastUntilLag then
if (not autoCameraOn) or ((abs(CursorPoint.X - prevPoint.X) + abs(CursorPoint.Y - prevpoint.Y)) > 4) then
- begin
+ begin
FollowGear:= nil;
prevPoint:= CursorPoint;
exit
- end
+ end
else
- begin
+ begin
CursorPoint.X:= (prevPoint.X * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * z + WorldDx) div 8;
if isPhone() or (cScreenHeight < 600) or ((hwSign(FollowGear^.dY) * z) < 10) then
CursorPoint.Y:= (prevPoint.Y * 7 + cScreenHeight - (hwRound(FollowGear^.Y) + WorldDy)) div 8
else
CursorPoint.Y:= (prevPoint.Y * 7 + cScreenHeight - (hwRound(FollowGear^.Y) + hwSign(FollowGear^.dY) * z + WorldDy)) div 8;
- end;
+ end;
wdy:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 - cWaterLine - cVisibleWater;
if WorldDy < wdy then WorldDy:= wdy;
@@ -1327,7 +1336,6 @@
procedure HideMission;
begin
missionTimer:= 0;
- if missionTex <> nil then FreeTexture(missionTex);
end;
procedure ShakeCamera(amount: LongInt);
--- a/project_files/Android-build/SDL-android-project/jni/SDL/src/core/android/SDL_android.cpp Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/Android-build/SDL-android-project/jni/SDL/src/core/android/SDL_android.cpp Sat Nov 12 17:06:49 2011 +0100
@@ -127,9 +127,10 @@
// Touch
extern "C" void Java_org_hedgewars_hedgeroid_SDLActivity_onNativeTouch(
JNIEnv* env, jclass jcls,
- jint action, jint pointerId, jfloat x, jfloat y, jfloat p)
+ jint touch_device_id_in, jint pointer_finger_id_in,
+ jint action, jfloat x, jfloat y, jfloat p)
{
- Android_OnTouch(action, pointerId, x, y, p);
+ Android_OnTouch(touch_device_id_in, pointer_finger_id_in, action, x, y, p);
}
// Accelerometer
--- a/project_files/HedgewarsMobile/Classes/Appirater.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/Appirater.m Sat Nov 12 17:06:49 2011 +0100
@@ -37,7 +37,6 @@
#import "Appirater.h"
#import <SystemConfiguration/SCNetworkReachability.h>
#import <netinet/in.h>
-#import "ServerSetup.h"
NSString *const kAppiraterLaunchDate = @"kAppiraterLaunchDate";
NSString *const kAppiraterLaunchCount = @"kAppiraterLaunchCount";
@@ -106,7 +105,7 @@
launchCount > LAUNCHES_UNTIL_PROMPT &&
!declinedToRate &&
!ratedApp) {
- if ([ServerSetup isNetworkReachable]) { // check if they can reach the app store
+ if ([HWUtils isNetworkReachable]) { // check if they can reach the app store
willShowPrompt = YES;
[self performSelectorOnMainThread:@selector(showPrompt) withObject:nil waitUntilDone:NO];
}
--- a/project_files/HedgewarsMobile/Classes/DefinesAndMacros.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/DefinesAndMacros.h Sat Nov 12 17:06:49 2011 +0100
@@ -55,6 +55,7 @@
#define WEAPONS_DIRECTORY() [DOCUMENTS_FOLDER() stringByAppendingString:@"/Weapons/"]
#define SCHEMES_DIRECTORY() [DOCUMENTS_FOLDER() stringByAppendingString:@"/Schemes/"]
#define SAVES_DIRECTORY() [DOCUMENTS_FOLDER() stringByAppendingString:@"/Saves/"]
+#define SCREENSHOTS_DIRECTORY() [DOCUMENTS_FOLDER() stringByAppendingString:@"/Screenshots/"]
#define GRAPHICS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/"]
#define ICONS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/Icons/"]
@@ -79,5 +80,3 @@
#define IS_NOT_VERY_POWERFUL(x) ([x hasPrefix:@"iPad1"] || [x hasPrefix:@"iPhone2"] || [x hasPrefix:@"iPod3"] || [x hasPrefix:@"iPod4"])
#define IS_VERY_POWERFUL(x) (IS_NOT_POWERFUL(x) == NO && IS_NOT_VERY_POWERFUL(x) == NO)
-#define UIVIEW_HW_SDLVIEW [[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0]
-
--- a/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.h Sat Nov 12 17:06:49 2011 +0100
@@ -32,21 +32,21 @@
id<EngineProtocolDelegate> delegate;
NSOutputStream *stream;
- NSInteger ipcPort; // Port on which engine will listen
- TCPsocket csd; // Client socket descriptor
+ TCPsocket csd;
+ NSInteger enginePort;
}
@property (nonatomic,assign) id<EngineProtocolDelegate> delegate;
@property (nonatomic,retain) NSOutputStream *stream;
-@property (assign) NSInteger ipcPort;
@property (assign) TCPsocket csd;
+@property (assign) NSInteger enginePort;
-(id) init;
--(id) initOnPort:(NSInteger) port;
--(void) spawnThread:(NSString *)onSaveFile;
--(void) spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary;
++(void) spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary;
++(NSInteger) activeEnginePort;
+
-(void) engineProtocol:(id) object;
-(void) gameHasEndedWithStats:(NSArray *)stats;
--- a/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m Sat Nov 12 17:06:49 2011 +0100
@@ -25,23 +25,20 @@
#define BUFFER_SIZE 255 // like in original frontend
+static NSInteger activeEnginePort;
+
@implementation EngineProtocolNetwork
-@synthesize delegate, stream, ipcPort, csd;
+@synthesize delegate, stream, csd, enginePort;
-(id) init {
if (self = [super init]) {
self.delegate = nil;
- self.ipcPort = 0;
self.csd = NULL;
self.stream = nil;
+ self.enginePort = [HWUtils randomPort];
}
- return self;
-}
-
--(id) initOnPort:(NSInteger) port {
- if (self = [self init])
- self.ipcPort = port;
+ activeEnginePort = self.enginePort;
return self;
}
@@ -60,17 +57,20 @@
#pragma mark -
#pragma mark Spawner functions
--(void) spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary {
- self.stream = (onSaveFile) ? [[NSOutputStream alloc] initToFileAtPath:onSaveFile append:YES] : nil;
- [self.stream open];
++(void) spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary {
+ EngineProtocolNetwork *proto = [[EngineProtocolNetwork alloc] init];
+ proto.stream = (onSaveFile) ? [[NSOutputStream alloc] initToFileAtPath:onSaveFile append:YES] : nil;
+ [proto.stream open];
+ // +detachNewThreadSelector retain/release self automatically
[NSThread detachNewThreadSelector:@selector(engineProtocol:)
- toTarget:self
+ toTarget:proto
withObject:dictionary];
+ [proto release];
}
--(void) spawnThread:(NSString *)onSaveFile {
- [self spawnThread:onSaveFile withOptions:nil];
++(NSInteger) activeEnginePort {
+ return activeEnginePort;
}
#pragma mark -
@@ -249,18 +249,18 @@
}
// Resolving the host using NULL make network interface to listen
- if (SDLNet_ResolveHost(&ip, NULL, ipcPort) < 0 && !clientQuit) {
+ if (SDLNet_ResolveHost(&ip, NULL, self.enginePort) < 0 && !clientQuit) {
DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
clientQuit = YES;
}
// Open a connection with the IP provided (listen on the host's port)
if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
- DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), ipcPort);
+ DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), self.enginePort);
clientQuit = YES;
}
- DLog(@"Waiting for a client on port %d", ipcPort);
+ DLog(@"Waiting for a client on port %d", self.enginePort);
while (csd == NULL)
csd = SDLNet_TCP_Accept(sd);
SDLNet_TCP_Close(sd);
@@ -393,7 +393,8 @@
}
break;
case 'q':
- // game ended, can remove the savefile and the trailing overlay (when dualhead)
+ // game ended, can remove the savefile and present the statistics of the match
+ [HWUtils setGameStatus:gsEnded];
[self gameHasEndedWithStats:statsArray];
break;
case 'Q':
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/ExtraCategories.h Sat Nov 12 17:06:49 2011 +0100
@@ -0,0 +1,65 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2009-2010 Vittorio Giovara <vittorio.giovara@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * File created on 25/10/2011.
+ */
+
+
+#import <Foundation/Foundation.h>
+
+
+@interface UIScreen (safe)
+
+-(CGFloat) safeScale;
+
+@end
+
+
+@interface UITableView (backgroundColor)
+
+-(void) setBackgroundColorForAnyTable:(UIColor *)color;
+
+@end
+
+
+@interface UIColor (HWColors)
+
++(UIColor *)darkYellowColor;
++(UIColor *)lightYellowColor;
++(UIColor *)darkBlueColor;
++(UIColor *)darkBlueColorTransparent;
++(UIColor *)blackColorTransparent;
+
+@end
+
+
+@interface UILabel (quickStyle)
+
+-(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title;
+-(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth;
+-(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth
+ withBorderColor:(UIColor *)borderColor withBackgroundColor:(UIColor *)backColor;
+
+@end
+
+
+@interface NSString (MD5)
+
+-(NSString *)MD5hash;
+
+@end
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/ExtraCategories.m Sat Nov 12 17:06:49 2011 +0100
@@ -0,0 +1,146 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2009-2010 Vittorio Giovara <vittorio.giovara@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * File created on 25/10/2011.
+ */
+
+
+#import "ExtraCategories.h"
+#import <QuartzCore/QuartzCore.h>
+#import <CommonCrypto/CommonDigest.h>
+
+
+#pragma mark -
+@implementation UIScreen (safe)
+
+-(CGFloat) safeScale {
+ CGFloat theScale = 1.0f;
+ if ([self respondsToSelector:@selector(scale)])
+ theScale = [self scale];
+ return theScale;
+}
+
+@end
+
+
+#pragma mark -
+@implementation UITableView (backgroundColor)
+
+-(void) setBackgroundColorForAnyTable:(UIColor *) color {
+ if ([self respondsToSelector:@selector(backgroundView)]) {
+ UIView *backView = [[UIView alloc] initWithFrame:self.frame];
+ backView.backgroundColor = color;
+ self.backgroundView = backView;
+ [backView release];
+ self.backgroundColor = [UIColor clearColor];
+ } else
+ self.backgroundColor = color;
+}
+
+@end
+
+
+#pragma mark -
+@implementation UIColor (HWColors)
+
++(UIColor *)darkYellowColor {
+ return [UIColor colorWithRed:(CGFloat)0xFE/255 green:(CGFloat)0xC0/255 blue:0 alpha:1];
+}
+
++(UIColor *)lightYellowColor {
+ return [UIColor colorWithRed:(CGFloat)0xF0/255 green:(CGFloat)0xD0/255 blue:0 alpha:1];
+}
+
++(UIColor *)darkBlueColor {
+ return [UIColor colorWithRed:(CGFloat)0x0F/255 green:0 blue:(CGFloat)0x42/255 alpha:1];
+}
+
+// older devices don't get any transparency for performance reasons
++(UIColor *)darkBlueColorTransparent {
+ return [UIColor colorWithRed:(CGFloat)0x0F/255
+ green:0
+ blue:(CGFloat)0x55/255
+ alpha:IS_NOT_POWERFUL([HWUtils modelType]) ? 1 : 0.6f];
+}
+
++(UIColor *)blackColorTransparent {
+ return [UIColor colorWithRed:0
+ green:0
+ blue:0
+ alpha:IS_NOT_POWERFUL([HWUtils modelType]) ? 1 : 0.65f];
+}
+
+@end
+
+
+#pragma mark -
+@implementation UILabel (quickStyle)
+
+-(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title {
+ return [self initWithFrame:frame
+ andTitle:title
+ withBorderWidth:1.5f
+ withBorderColor:[UIColor darkYellowColor]
+ withBackgroundColor:[UIColor darkBlueColor]];
+}
+
+-(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth {
+ return [self initWithFrame:frame
+ andTitle:title
+ withBorderWidth:borderWidth
+ withBorderColor:[UIColor darkYellowColor]
+ withBackgroundColor:[UIColor darkBlueColorTransparent]];
+}
+
+-(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth
+ withBorderColor:(UIColor *)borderColor withBackgroundColor:(UIColor *)backColor{
+ UILabel *theLabel = [self initWithFrame:frame];
+ theLabel.backgroundColor = backColor;
+
+ if (title != nil) {
+ theLabel.text = title;
+ theLabel.textColor = [UIColor lightYellowColor];
+ theLabel.textAlignment = UITextAlignmentCenter;
+ theLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]*80/100];
+ }
+
+ [theLabel.layer setBorderWidth:borderWidth];
+ [theLabel.layer setBorderColor:borderColor.CGColor];
+ [theLabel.layer setCornerRadius:8.0f];
+ [theLabel.layer setMasksToBounds:YES];
+
+ return theLabel;
+}
+
+@end
+
+
+#pragma mark -
+@implementation NSString (MD5)
+
+-(NSString *)MD5hash {
+ const char *cStr = [self UTF8String];
+ unsigned char result[16];
+ CC_MD5( cStr, strlen(cStr), result );
+ return [NSString stringWithFormat:
+ @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+ result[0], result[1], result[2], result[3], result[4], result[5],
+ result[6], result[7], result[8], result[9], result[10], result[11],
+ result[12], result[13], result[14], result[15]];
+}
+
+@end
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -210,7 +210,7 @@
script = self.schemeWeaponConfigViewController.scriptCommand;
// create the configuration file that is going to be sent to engine
- NSDictionary *gameDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
+ NSDictionary *gameDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
self.mapConfigViewController.seedCommand,@"seed_command",
self.mapConfigViewController.templateFilterCommand,@"templatefilter_command",
self.mapConfigViewController.mapGenCommand,@"mapgen_command",
@@ -223,9 +223,8 @@
script,@"mission_command",
nil];
- GameInterfaceBridge *bridge = [[GameInterfaceBridge alloc] initWithController:self];
- [bridge startLocalGame:gameDictionary];
- [bridge release];
+ [GameInterfaceBridge startLocalGame:gameDictionary];
+ [gameDictionary release];
}
-(void) loadNiceHogs {
--- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.h Sat Nov 12 17:06:49 2011 +0100
@@ -20,41 +20,16 @@
#import <Foundation/Foundation.h>
-#import "EngineProtocolNetwork.h"
-typedef enum {gtNone, gtLocal, gtSave, gtMission, gtNet} TGameType;
-typedef enum {gsNone, gsInGame, gsEnded, gsInterrupted} TGameStatus;
-
-@class OverlayViewController;
-@interface GameInterfaceBridge : NSObject <EngineProtocolDelegate> {
- UIViewController *parentController;
- OverlayViewController *overlayController;
-
- NSString *savePath;
- EngineProtocolNetwork *engineProtocol;
-
- NSInteger ipcPort; // Port on which engine will listen
- TGameType gameType;
+@interface GameInterfaceBridge : NSObject {
+ UIView *blackView;
}
-@property (assign) UIViewController *parentController;
-@property (nonatomic,retain) NSString *savePath;
-
-@property (nonatomic,retain) OverlayViewController *overlayController;
-@property (nonatomic,retain) EngineProtocolNetwork *engineProtocol;
-
-@property (assign) NSInteger ipcPort;
-@property (assign) TGameType gameType;
+@property (nonatomic,retain) UIView *blackView;
-
--(id) initWithController:(id) viewController;
--(void) startLocalGame:(NSDictionary *)withOptions;
--(void) startSaveGame:(NSString *)atPath;
--(void) startMissionGame:(NSString *)withScript;
-
--(void) prepareEngineLaunch;
--(void) engineLaunch;
--(void) gameHasEndedWithStats:(NSArray *)stats;
++(void) startLocalGame:(NSDictionary *)withOptions;
++(void) startSaveGame:(NSString *)atPath;
++(void) startMissionGame:(NSString *)withScript;
@end
--- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -239,9 +239,6 @@
cell.detailTextLabel.text = NSLocalizedString(@"Select which style of ammo menu you prefer",@"");
switchContent.on = [[settings objectForKey:@"classic_menu"] boolValue];
switchContent.tag = 60;
- // remove this when classic ammomenu works on iphone as well
- if (IS_IPAD() == NO)
- switchContent.enabled = NO;
break;
default:
DLog(@"Nope");
--- a/project_files/HedgewarsMobile/Classes/HWUtils.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.h Sat Nov 12 17:06:49 2011 +0100
@@ -21,12 +21,24 @@
#import <Foundation/Foundation.h>
+typedef enum {gtNone, gtLocal, gtSave, gtMission, gtNet} TGameType;
+typedef enum {gsNone, gsLoading, gsInGame, gsEnded} TGameStatus;
+
@interface HWUtils : NSObject {
}
++(TGameType) gameType;
++(void) setGameType:(TGameType) type;
++(TGameStatus) gameStatus;
++(void) setGameStatus:(TGameStatus) status;
++(BOOL) isGameLaunched;
++(BOOL) isGameRunning;
+
+(NSString *)modelType;
+(NSArray *)teamColors;
++(NSInteger) randomPort;
++(BOOL) isNetworkReachable;
+(void) releaseCache;
@end
--- a/project_files/HedgewarsMobile/Classes/HWUtils.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.m Sat Nov 12 17:06:49 2011 +0100
@@ -22,13 +22,47 @@
#import "HWUtils.h"
#import <sys/types.h>
#import <sys/sysctl.h>
+#import <netinet/in.h>
+#import <SystemConfiguration/SCNetworkReachability.h>
#import "hwconsts.h"
+#import "EngineProtocolNetwork.h"
static NSString *cachedModel = nil;
static NSArray *cachedColors = nil;
+static TGameType gameType = gtNone;
+static TGameStatus gameStatus = gsNone;
+
@implementation HWUtils
+#pragma mark -
+#pragma mark game status and type info
++(TGameType) gameType {
+ return gameType;
+}
+
++(void) setGameType:(TGameType) type {
+ gameType = type;
+}
+
++(TGameStatus) gameStatus {
+ return gameStatus;
+}
+
++(void) setGameStatus:(TGameStatus) status {
+ gameStatus = status;
+}
+
++(BOOL) isGameLaunched {
+ return ((gameStatus == gsLoading) || (gameStatus == gsInGame));
+}
+
++(BOOL) isGameRunning {
+ return (gameStatus == gsInGame);
+}
+
+#pragma mark -
+#pragma mark Helper Functions
+(NSString *)modelType {
if (cachedModel == nil) {
size_t size;
@@ -60,9 +94,53 @@
return cachedColors;
}
++(NSInteger) randomPort {
+ srandom(time(NULL));
+ NSInteger res = (random() % 64511) + 1024;
+ // recall self until you get a free port
+ if (res == NETGAME_DEFAULT_PORT || res == [EngineProtocolNetwork activeEnginePort])
+ return [self randomPort];
+ else
+ return res;
+}
+
++(BOOL) isNetworkReachable {
+ // Create zero addy
+ struct sockaddr_in zeroAddress;
+ bzero(&zeroAddress, sizeof(zeroAddress));
+ zeroAddress.sin_len = sizeof(zeroAddress);
+ zeroAddress.sin_family = AF_INET;
+
+ // Recover reachability flags
+ SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
+ SCNetworkReachabilityFlags flags;
+
+ BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
+ CFRelease(defaultRouteReachability);
+
+ if (!didRetrieveFlags) {
+ NSLog(@"Error. Could not recover network reachability flags");
+ return NO;
+ }
+
+ BOOL isReachable = flags & kSCNetworkFlagsReachable;
+ BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
+ BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;
+
+ NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"];
+ NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL
+ cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
+ timeoutInterval:20.0];
+ NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:nil];
+ BOOL testResult = testConnection ? YES : NO;
+ [testConnection release];
+
+ return ((isReachable && !needsConnection) || nonWiFi) ? testResult : NO;
+}
+
+(void) releaseCache {
- releaseAndNil(cachedModel);
- releaseAndNil(cachedColors);
+ [cachedModel release], cachedModel = nil;
+ [cachedColors release], cachedColors = nil;
}
@end
--- a/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.h Sat Nov 12 17:06:49 2011 +0100
@@ -28,13 +28,11 @@
MainMenuViewController *mainViewController;
UIWindow *uiwindow;
UIWindow *secondWindow;
- BOOL isInGame;
}
@property (nonatomic,retain) MainMenuViewController *mainViewController;
@property (nonatomic,retain) UIWindow *uiwindow;
@property (nonatomic,retain) UIWindow *secondWindow;
-@property (assign) BOOL isInGame;
+(HedgewarsAppDelegate *)sharedAppDelegate;
--- a/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m Sat Nov 12 17:06:49 2011 +0100
@@ -34,7 +34,7 @@
@end
@implementation HedgewarsAppDelegate
-@synthesize mainViewController, uiwindow, secondWindow, isInGame;
+@synthesize mainViewController, uiwindow, secondWindow;
// convenience method
+(HedgewarsAppDelegate *)sharedAppDelegate {
@@ -48,7 +48,6 @@
mainViewController = nil;
uiwindow = nil;
secondWindow = nil;
- isInGame = NO;
}
return self;
}
@@ -92,7 +91,7 @@
-(void) applicationDidReceiveMemoryWarning:(UIApplication *)application {
[HWUtils releaseCache];
// don't stop music if it is playing
- if (self.isInGame) {
+ if ([HWUtils isGameLaunched]) {
[AudioManagerController releaseCache];
}
MSG_MEMCLEAN();
@@ -101,7 +100,7 @@
// true multitasking with sdl works only on 4.2 and above; we close the game to avoid a black screen at return
-(void) applicationWillResignActive:(UIApplication *)application {
- if (self.isInGame && [[[UIDevice currentDevice] systemVersion] floatValue] < 4.2f)
+ if ([HWUtils isGameLaunched] && [[[UIDevice currentDevice] systemVersion] floatValue] < 4.2f)
HW_terminate(NO);
[super applicationWillResignActive:application];
--- a/project_files/HedgewarsMobile/Classes/InGameMenuViewController.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/InGameMenuViewController.h Sat Nov 12 17:06:49 2011 +0100
@@ -23,14 +23,11 @@
@interface InGameMenuViewController : UITableViewController <UIActionSheetDelegate> {
- NSArray *menuList;
- BOOL shouldTakeScreenshot;
+
}
-@property (nonatomic,retain) NSArray *menuList;
-(void) present;
-(void) dismiss;
-//-(void) saveCurrentScreenToPhotoAlbum:(UIAlertView *)alert;
@end
--- a/project_files/HedgewarsMobile/Classes/InGameMenuViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/InGameMenuViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -23,46 +23,18 @@
#import "SDL_sysvideo.h"
#import "SDL_uikitkeyboard.h"
+//FIXME: add a proper #import when this is exposed in SDL
+extern UIView *SDL_getUikitView(void *);
#define VIEW_HEIGHT 200
@implementation InGameMenuViewController
-@synthesize menuList;
-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
return rotationManager(interfaceOrientation);
}
--(void) didReceiveMemoryWarning {
- self.menuList = nil;
- [super didReceiveMemoryWarning];
-}
-
--(void) viewDidLoad {
- NSArray *array = [[NSArray alloc] initWithObjects:
- NSLocalizedString(@"Show Help", @""),
- NSLocalizedString(@"Tag", @""),
-// NSLocalizedString(@"Snapshot",@""),
- NSLocalizedString(@"End Game", @""),
- nil];
- self.menuList = array;
- [array release];
-
- [super viewDidLoad];
-}
-
--(void) viewDidUnload {
- self.menuList = nil;
- MSG_DIDUNLOAD();
- [super viewDidUnload];
-}
-
--(void) dealloc {
- releaseAndNil(menuList);
- [super dealloc];
-}
-
#pragma mark -
#pragma mark animating
-(void) present {
@@ -87,27 +59,6 @@
}
SDL_iPhoneKeyboardHide((SDL_Window *)HW_getSDLWindow());
-
- /*
- if (shouldTakeScreenshot) {
- UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Please wait"
- message:nil
- delegate:nil
- cancelButtonTitle:nil
- otherButtonTitles:nil];
- [alert show];
- UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
- initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
- indicator.center = CGPointMake(alert.bounds.size.width / 2, alert.bounds.size.height - 45);
- [indicator startAnimating];
- [alert addSubview:indicator];
- [indicator release];
-
- // all these hacks because of the PAUSE caption on top of everything...
- [self performSelector:@selector(saveCurrentScreenToPhotoAlbum:) withObject:alert afterDelay:0.3];
- }
- */
- shouldTakeScreenshot = NO;
}
#pragma mark -
@@ -118,18 +69,26 @@
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 3;
-// return 4;
}
-(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"CellIdentifier";
+ NSInteger row = [indexPath row];
+ NSString *cellTitle;
+ if (row == 0)
+ cellTitle = NSLocalizedString(@"Show Help", @"");
+ else if (row == 1)
+ cellTitle = NSLocalizedString(@"Tag", @"");
+ else
+ cellTitle = NSLocalizedString(@"End Game", @"");
+
UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (nil == cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier] autorelease];
}
- cell.textLabel.text = [self.menuList objectAtIndex:[indexPath row]];
+ cell.textLabel.text = cellTitle;
if (IS_IPAD())
cell.textLabel.textAlignment = UITextAlignmentCenter;
@@ -139,7 +98,6 @@
-(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIActionSheet *actionSheet;
-// UIAlertView *alert;
switch ([indexPath row]) {
case 0:
@@ -152,25 +110,12 @@
break;
case 2:
-/*
- alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Going to take a screenshot",@"")
- message:NSLocalizedString(@"The game snapshot will be placed in your Photo Album and it will be taken as soon as the pause menu is dismissed",@"")
- delegate:nil
- cancelButtonTitle:NSLocalizedString(@"Ok, got it",@"")
- otherButtonTitles:nil];
- [alert show];
- [alert release];
- shouldTakeScreenshot = YES;
-
- break;
- case 3:
-*/
actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Are you reeeeeally sure?", @"")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Well, maybe not...", @"")
destructiveButtonTitle:NSLocalizedString(@"Of course!", @"")
otherButtonTitles:nil];
- [actionSheet showInView:(IS_IPAD() ? self.view : UIVIEW_HW_SDLVIEW)];
+ [actionSheet showInView:(IS_IPAD() ? self.view : SDL_getUikitView(HW_getSDLWindow()))];
[actionSheet release];
break;
@@ -191,63 +136,4 @@
}
}
-//TODO: check this is still needed since we switched to SDL_GL_CreateContext()
-/*
-#pragma mark -
-#pragma mark save screenshot
-//by http://www.bit-101.com/blog/?p=1861
-// callback for CGDataProviderCreateWithData
-void releaseData(void *info, const void *data, size_t dataSize) {
- DLog(@"freeing raw data\n");
- free((void *)data);
-}
-
-// callback for UIImageWriteToSavedPhotosAlbum
--(void) image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
- DLog(@"Save finished\n");
- [image release];
- UIAlertView *alert = (UIAlertView *)contextInfo;
- [alert dismissWithClickedButtonIndex:0 animated:YES];
- [alert release];
-}
-
-// the resolution of the buffer is always equal to the hardware device even if scaled
--(void) saveCurrentScreenToPhotoAlbum:(UIAlertView *)alert {
- CGRect screenRect = [[UIScreen mainScreen] bounds];
- int width = screenRect.size.width;
- int height = screenRect.size.height;
-
- NSInteger size = width * height * 4;
- GLubyte *buffer = (GLubyte *) malloc(size * sizeof(GLubyte));
- GLubyte *buffer_flipped = (GLubyte *) malloc(size * sizeof(GLubyte));
-
- glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
- HW_screenshot();
- // flip the data as glReadPixels here reads upside down
- for(int y = 0; y <height; y++)
- for(int x = 0; x <width * 4; x++)
- buffer_flipped[(int)((height - 1 - y) * width * 4 + x)] = buffer[(int)(y * 4 * width + x)];
- free(buffer);
-
- CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer_flipped, size, releaseData);
- CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
- CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
- CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
- CGImageRef imageRef = CGImageCreate(width, height, 8, 32, 4 * width, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
-
- CGColorSpaceRelease(colorSpaceRef);
- CGDataProviderRelease(provider);
-
- UIImage *image;
- if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)])
- image = [[UIImage alloc] initWithCGImage:imageRef scale:1 orientation:UIImageOrientationRight];
- else
- image = [[UIImage alloc] initWithCGImage:imageRef];
- CGImageRelease(imageRef);
-
- // add callback for cleaning memory and removing alert
- UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), (void *)alert);
-}
-*/
-
@end
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -29,7 +29,7 @@
#import "MissionTrainingViewController.h"
#import "GameInterfaceBridge.h"
#import "Appirater.h"
-#import "ServerSetup.h"
+#import "ServerProtocolNetwork.h"
@implementation MainMenuViewController
@@ -52,7 +52,14 @@
withIntermediateDirectories:NO
attributes:nil
error:NULL];
-
+
+ // SCREENSHOTS - just create it the first time
+ if ([[NSFileManager defaultManager] fileExistsAtPath:SCREENSHOTS_DIRECTORY()] == NO)
+ [[NSFileManager defaultManager] createDirectoryAtPath:SCREENSHOTS_DIRECTORY()
+ withIntermediateDirectories:NO
+ attributes:nil
+ error:NULL];
+
// SETTINGS - nsuserdefaults ftw
[CreationChamber createSettings];
@@ -122,16 +129,8 @@
[Appirater appLaunched];
}
-
/*
- ServerSetup *setup = [[ServerSetup alloc] init];
- if (isNetworkReachable()) {
- DLog(@"network is reachable");
- [NSThread detachNewThreadSelector:@selector(serverProtocol)
- toTarget:setup
- withObject:nil];
- }
- [setup release];
+ [ServerProtocolNetwork openServerConnection];
*/
}
@@ -238,9 +237,7 @@
#pragma mark -
-(void) launchRestoredGame {
[[NSNotificationCenter defaultCenter] removeObserver:self];
- GameInterfaceBridge *bridge = [[GameInterfaceBridge alloc] initWithController:self];
- [bridge startSaveGame:[[NSUserDefaults standardUserDefaults] objectForKey:@"savedGamePath"]];
- [bridge release];
+ [GameInterfaceBridge startSaveGame:[[NSUserDefaults standardUserDefaults] objectForKey:@"savedGamePath"]];
}
#pragma mark -
--- a/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m Sat Nov 12 17:06:49 2011 +0100
@@ -22,7 +22,6 @@
#import "MapPreviewButtonView.h"
#import "MapConfigViewController.h"
#import "UIImageExtra.h"
-#import "ServerSetup.h"
#import <pthread.h>
#import <QuartzCore/QuartzCore.h>
@@ -69,7 +68,7 @@
IPaddress ip;
BOOL serverQuit = NO;
static uint8_t map[128*32];
- int port = [ServerSetup randomPort];
+ int port = [HWUtils randomPort];
if (SDLNet_Init() < 0) {
DLog(@"SDLNet_Init: %s", SDLNet_GetError());
--- a/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -74,9 +74,7 @@
[AudioManagerController playBackSound];
[[self parentViewController] dismissModalViewControllerAnimated:YES];
} else {
- GameInterfaceBridge *bridge = [[GameInterfaceBridge alloc] initWithController:self];
- [bridge startMissionGame:self.missionName];
- [bridge release];
+ [GameInterfaceBridge startMissionGame:self.missionName];
}
}
--- a/project_files/HedgewarsMobile/Classes/ObjcExports.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/ObjcExports.h Sat Nov 12 17:06:49 2011 +0100
@@ -23,16 +23,13 @@
}
-+(void) initialize;
++(void) setGrenadeTime:(NSInteger) value;
++(NSInteger) grenadeTime;
@end
-BOOL isGameRunning(void);
-void setGameRunning(BOOL value);
-NSInteger cachedGrenadeTime(void);
void clearView(void);
-void setGrenadeTime(NSInteger value);
BOOL isApplePhone(void);
void startSpinningProgress(void);
--- a/project_files/HedgewarsMobile/Classes/ObjcExports.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/ObjcExports.m Sat Nov 12 17:06:49 2011 +0100
@@ -23,11 +23,9 @@
#import "OverlayViewController.h"
#import "AmmoMenuViewController.h"
+//FIXME: add a proper #import when this is exposed in SDL
+extern UIView *SDL_getUikitView(void *);
-// actual game started (controls should be enabled)
-static BOOL gameRunning;
-// black screen present
-static BOOL savedGame;
// cache the grenade time
static NSInteger grenadeTime;
// the reference to the newMenu instance
@@ -35,32 +33,16 @@
@implementation ObjcExports
-+(void) initialize {
- overlay_instance = [OverlayViewController mainOverlay];
- gameRunning = NO;
- savedGame = NO;
- grenadeTime = 2;
++(void) setGrenadeTime:(NSInteger) value {
+ grenadeTime = value;
+}
+
++(NSInteger) grenadeTime {
+ return grenadeTime;
}
@end
-#pragma mark -
-#pragma mark functions called by objc code
-BOOL inline isGameRunning() {
- return gameRunning;
-}
-
-void inline setGameRunning(BOOL value) {
- gameRunning = value;
-}
-
-NSInteger cachedGrenadeTime() {
- return grenadeTime;
-}
-
-void inline setGrenadeTime(NSInteger value) {
- grenadeTime = value;
-}
#pragma mark -
#pragma mark functions called by pascal code
@@ -68,24 +50,54 @@
return (IS_IPAD() == NO);
}
-void startSpinningProgress() {
- gameRunning = NO;
- overlay_instance.lowerIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
+void startLoadingIndicator() {
+ // this is the first ojbc function called by engine, so we have to initialize some variables here
+ overlay_instance = [[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil];
+ // in order to get rotation events we have to insert the view inside the first view of the second window
+ //TODO: when multihead make sure that overlay is displayed in the touch-enabled window
+ [SDL_getUikitView(HW_getSDLWindow()) addSubview:overlay_instance.view];
+ grenadeTime = 2;
+ if ([HWUtils gameType] == gtSave) {
+ [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
+
+ overlay_instance.view.backgroundColor = [UIColor blackColor];
+ overlay_instance.view.alpha = 0.75;
+ overlay_instance.view.userInteractionEnabled = NO;
+ }
CGPoint center = overlay_instance.view.center;
- overlay_instance.lowerIndicator.center = (IS_DUALHEAD() ? center : CGPointMake(center.x, center.y * 5/3));
+ CGPoint loaderCenter = ((IS_DUALHEAD() || [HWUtils gameType] == gtSave) ? center : CGPointMake(center.x, center.y * 5/3));
- [overlay_instance.lowerIndicator startAnimating];
- [overlay_instance.view addSubview:overlay_instance.lowerIndicator];
- [overlay_instance.lowerIndicator release];
+ overlay_instance.loadingIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
+ overlay_instance.loadingIndicator.hidesWhenStopped = YES;
+ overlay_instance.loadingIndicator.center = loaderCenter;
+ [overlay_instance.loadingIndicator startAnimating];
+ [overlay_instance.view addSubview:overlay_instance.loadingIndicator];
+ [overlay_instance.loadingIndicator release];
}
-void stopSpinningProgress() {
- [overlay_instance.lowerIndicator stopAnimating];
- [overlay_instance.lowerIndicator removeFromSuperview];
+void stopLoadingIndicator() {
HW_zoomSet(1.7);
- if (savedGame == NO)
- gameRunning = YES;
+ if ([HWUtils gameType] != gtSave) {
+ [overlay_instance.loadingIndicator stopAnimating];
+ [overlay_instance.loadingIndicator removeFromSuperview];
+ [HWUtils setGameStatus:gsInGame];
+ }
+}
+
+void saveFinishedSynching() {
+ [UIView beginAnimations:@"fading from save synch" context:NULL];
+ [UIView setAnimationDuration:1];
+ overlay_instance.view.backgroundColor = [UIColor clearColor];
+ overlay_instance.view.alpha = 1;
+ overlay_instance.view.userInteractionEnabled = YES;
+ [UIView commitAnimations];
+
+ [overlay_instance.loadingIndicator stopAnimating];
+ [overlay_instance.loadingIndicator performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1];
+
+ [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
+ [HWUtils setGameStatus:gsInGame];
}
void clearView() {
@@ -105,40 +117,6 @@
grenadeTime = 2;
}
-void saveBeganSynching() {
- savedGame = YES;
- stopSpinningProgress();
- [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
-
- overlay_instance.view.backgroundColor = [UIColor blackColor];
- overlay_instance.view.alpha = 0.75;
- overlay_instance.view.userInteractionEnabled = NO;
-
- overlay_instance.savesIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
-
- overlay_instance.savesIndicator.center = overlay_instance.view.center;
- overlay_instance.savesIndicator.hidesWhenStopped = YES;
-
- [overlay_instance.savesIndicator startAnimating];
- [overlay_instance.view addSubview:overlay_instance.savesIndicator];
- [overlay_instance.savesIndicator release];
-}
-
-void saveFinishedSynching() {
- [UIView beginAnimations:@"fading from save synch" context:NULL];
- [UIView setAnimationDuration:1];
- overlay_instance.view.backgroundColor = [UIColor clearColor];
- overlay_instance.view.alpha = 1;
- overlay_instance.view.userInteractionEnabled = YES;
- [UIView commitAnimations];
-
- [overlay_instance.savesIndicator stopAnimating];
- [overlay_instance.savesIndicator performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1];
-
- [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
- gameRunning = YES;
-}
-
void updateVisualsNewTurn(void) {
[overlay_instance.amvc updateAmmoVisuals];
}
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.h Sat Nov 12 17:06:49 2011 +0100
@@ -49,8 +49,7 @@
NSInteger initialScreenCount;
// various other widgets
- UIActivityIndicatorView *lowerIndicator;
- UIActivityIndicatorView *savesIndicator;
+ UIActivityIndicatorView *loadingIndicator;
UIButton *confirmButton;
UISegmentedControl *grenadeTimeSegment;
}
@@ -59,8 +58,7 @@
@property (nonatomic,retain) InGameMenuViewController *popupMenu;
@property (nonatomic,retain) HelpPageViewController *helpPage;
@property (nonatomic,retain) AmmoMenuViewController *amvc;
-@property (nonatomic,retain) UIActivityIndicatorView *lowerIndicator;
-@property (nonatomic,retain) UIActivityIndicatorView *savesIndicator;
+@property (nonatomic,retain) UIActivityIndicatorView *loadingIndicator;
@property (nonatomic,retain) UIButton *confirmButton;
@property (nonatomic,retain) UISegmentedControl *grenadeTimeSegment;
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -36,7 +36,7 @@
static OverlayViewController *mainOverlay;
@implementation OverlayViewController
-@synthesize popoverController, popupMenu, helpPage, amvc, initialScreenCount, lowerIndicator, savesIndicator,
+@synthesize popoverController, popupMenu, helpPage, amvc, initialScreenCount, loadingIndicator,
confirmButton, grenadeTimeSegment;
#pragma mark -
@@ -53,8 +53,7 @@
isAttacking = NO;
isPopoverVisible = NO;
initialScreenCount = (IS_DUALHEAD() ? 2 : 1);
- lowerIndicator = nil;
- savesIndicator = nil;
+ loadingIndicator = nil;
mainOverlay = self;
}
return self;
@@ -119,8 +118,7 @@
[self dismissPopover];
self.popoverController = nil;
self.amvc = nil;
- self.lowerIndicator = nil;
- self.savesIndicator = nil;
+ self.loadingIndicator = nil;
MSG_DIDUNLOAD();
[super viewDidUnload];
}
@@ -132,10 +130,8 @@
self.helpPage = nil;
if (self.amvc.view.superview == nil)
self.amvc = nil;
- if (self.lowerIndicator.superview == nil)
- self.lowerIndicator = nil;
- if (self.savesIndicator.superview == nil)
- self.savesIndicator = nil;
+ if (self.loadingIndicator.superview == nil)
+ self.loadingIndicator = nil;
if (self.confirmButton.superview == nil)
self.confirmButton = nil;
if (self.grenadeTimeSegment.superview == nil)
@@ -153,8 +149,7 @@
releaseAndNil(helpPage);
releaseAndNil(popoverController);
releaseAndNil(amvc);
- releaseAndNil(lowerIndicator);
- releaseAndNil(savesIndicator);
+ releaseAndNil(loadingIndicator);
releaseAndNil(confirmButton);
releaseAndNil(grenadeTimeSegment);
// dimTimer is autoreleased
@@ -191,7 +186,7 @@
#pragma mark overlay appearance
// nice transition for dimming, should be called only by the timer himself
-(void) dimOverlay {
- if (isGameRunning()) {
+ if ([HWUtils isGameRunning]) {
[UIView beginAnimations:@"overlay dim" context:NULL];
[UIView setAnimationDuration:0.6];
self.view.alpha = 0.2;
@@ -209,13 +204,15 @@
[self.popupMenu performSelectorOnMainThread:@selector(dismiss) withObject:nil waitUntilDone:YES];
[self.popoverController performSelectorOnMainThread:@selector(dismissPopoverAnimated:) withObject:nil waitUntilDone:YES];
[self.view performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:YES];
+ [self performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:YES];
+ mainOverlay = nil;
}
#pragma mark -
#pragma mark overlay user interaction
// dim the overlay when there's no more input for a certain amount of time
-(IBAction) buttonReleased:(id) sender {
- if (isGameRunning() == NO)
+ if ([HWUtils isGameRunning] == NO)
return;
UIButton *theButton = (UIButton *)sender;
@@ -248,7 +245,7 @@
-(IBAction) buttonPressed:(id) sender {
[self activateOverlay];
- if (isGameRunning() == NO)
+ if ([HWUtils isGameRunning] == NO)
return;
if (isPopoverVisible)
@@ -333,9 +330,9 @@
-(void) setGrenadeTime:(id) sender {
UISegmentedControl *theSegment = (UISegmentedControl *)sender;
- if (cachedGrenadeTime() != theSegment.selectedSegmentIndex) {
+ if ([ObjcExports grenadeTime] != theSegment.selectedSegmentIndex) {
HW_setGrenadeTime(theSegment.selectedSegmentIndex + 1);
- setGrenadeTime(theSegment.selectedSegmentIndex);
+ [ObjcExports setGrenadeTime:theSegment.selectedSegmentIndex];
}
}
@@ -401,7 +398,7 @@
#pragma mark -
#pragma mark Custom touch event handling
-(BOOL) shouldIgnoreTouch:(NSSet *)allTouches {
- if (isGameRunning() == NO)
+ if ([HWUtils isGameRunning] == NO)
return YES;
// ignore activity near the dpad and buttons
@@ -441,10 +438,14 @@
HW_zoomReset();
break;
case 2:
- // pinching
- first = [[allTouches allObjects] objectAtIndex:0];
- second = [[allTouches allObjects] objectAtIndex:1];
- initialDistanceForPinching = distanceBetweenPoints([first locationInView:self.view], [second locationInView:self.view]);
+ if (2 == [[[allTouches allObjects] objectAtIndex:0] tapCount])
+ HW_screenshot();
+ else {
+ // pinching
+ first = [[allTouches allObjects] objectAtIndex:0];
+ second = [[allTouches allObjects] objectAtIndex:1];
+ initialDistanceForPinching = distanceBetweenPoints([first locationInView:self.view], [second locationInView:self.view]);
+ }
break;
default:
break;
@@ -512,7 +513,7 @@
[grenadeSegment release];
}
self.grenadeTimeSegment.frame = CGRectMake(screen.size.height / 2 - 125, screen.size.width, 250, 50);
- self.grenadeTimeSegment.selectedSegmentIndex = cachedGrenadeTime();
+ self.grenadeTimeSegment.selectedSegmentIndex = [ObjcExports grenadeTime];
self.grenadeTimeSegment.alpha = 1;
[self.view addSubview:self.grenadeTimeSegment];
--- a/project_files/HedgewarsMobile/Classes/RestoreViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/RestoreViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -36,14 +36,13 @@
if (theButton.tag != 0) {
[AudioManagerController playClickSound];
- [self.parentViewController dismissModalViewControllerAnimated:NO];
[[NSNotificationCenter defaultCenter] postNotificationName:@"launchRestoredGame" object:nil];
} else {
[AudioManagerController playBackSound];
[defaults setObject:@"" forKey:@"savedGamePath"];
[defaults synchronize];
- [self.parentViewController dismissModalViewControllerAnimated:YES];
}
+ [self.parentViewController dismissModalViewControllerAnimated:YES];
}
-(void) viewDidLoad {
--- a/project_files/HedgewarsMobile/Classes/SavedGamesViewController.h Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/SavedGamesViewController.h Sat Nov 12 17:06:49 2011 +0100
@@ -22,19 +22,16 @@
#import <UIKit/UIKit.h>
#import "EditableCellView.h"
-@class GameInterfaceBridge;
@interface SavedGamesViewController : UIViewController <UITableViewDelegate, UITableViewDataSource,
EditableCellViewDelegate, UIActionSheetDelegate> {
UITableView *tableView;
NSMutableArray *listOfSavegames;
NSInteger numberOfItems;
- GameInterfaceBridge *interfaceBridge;
}
@property (nonatomic,retain) IBOutlet UITableView *tableView;
@property (nonatomic,retain) NSMutableArray *listOfSavegames;
-@property (nonatomic,retain) GameInterfaceBridge *interfaceBridge;
@property (assign) NSInteger numberOfItems;
-(IBAction) buttonPressed:(id) sender;
--- a/project_files/HedgewarsMobile/Classes/SavedGamesViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/SavedGamesViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -24,7 +24,7 @@
@implementation SavedGamesViewController
-@synthesize tableView, listOfSavegames, interfaceBridge, numberOfItems;
+@synthesize tableView, listOfSavegames, numberOfItems;
-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
return rotationManager(interfaceOrientation);
@@ -189,13 +189,7 @@
self.numberOfItems++;
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
- if (self.interfaceBridge == nil) {
- GameInterfaceBridge *bridge = [[GameInterfaceBridge alloc] initWithController:self];
- self.interfaceBridge = bridge;
- [bridge release];
- }
-
- [self.interfaceBridge startSaveGame:currentFilePath];
+ [GameInterfaceBridge startSaveGame:currentFilePath];
[currentFilePath release];
}
@@ -219,8 +213,6 @@
#pragma mark Memory Management
-(void) didReceiveMemoryWarning {
self.listOfSavegames = nil;
- // don't nil this one or it won't be able to send messages
- //self.interfaceBridge = nil;
MSG_MEMCLEAN();
[super didReceiveMemoryWarning];
}
@@ -228,7 +220,6 @@
-(void) viewDidUnload {
self.tableView = nil;
self.listOfSavegames = nil;
- self.interfaceBridge = nil;
MSG_DIDUNLOAD();
[super viewDidUnload];
}
@@ -236,7 +227,6 @@
-(void) dealloc {
releaseAndNil(tableView);
releaseAndNil(listOfSavegames);
- releaseAndNil(interfaceBridge);
[super dealloc];
}
--- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -329,7 +329,7 @@
#pragma mark -
#pragma mark Memory management
-(void) didReceiveMemoryWarning {
- if ([[HedgewarsAppDelegate sharedAppDelegate] isInGame]) {
+ if ([HWUtils isGameLaunched]) {
self.tableView = nil;
self.lastIndexPath_sc = nil;
self.lastIndexPath_we = nil;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.h Sat Nov 12 17:06:49 2011 +0100
@@ -0,0 +1,42 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * File created on 16/12/2010.
+ */
+
+
+#import <Foundation/Foundation.h>
+#import "SDL_net.h"
+//#import "EngineProtocolNetwork.h"
+
+@interface ServerProtocolNetwork : NSObject {
+ NSInteger serverPort;
+ NSString *serverAddress;
+ TCPsocket ssd;
+}
+
+@property (assign) TCPsocket ssd;
+@property (assign) NSInteger serverPort;
+@property (nonatomic,retain) NSString *serverAddress;
+
+-(id) init;
+-(id) init:(NSInteger) onPort withAddress:(NSString *)address;
+-(id) initOnPort:(NSInteger) port;
+-(id) initToAddress:(NSString *)address;
++(ServerProtocolNetwork *)openServerConnection;
+
+@end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m Sat Nov 12 17:06:49 2011 +0100
@@ -0,0 +1,214 @@
+/*
+ * Hedgewars-iOS, a Hedgewars port for iOS devices
+ * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * File created on 10/01/2010.
+ */
+
+
+#import "ServerProtocolNetwork.h"
+#import "hwconsts.h"
+
+#define BUFFER_SIZE 256
+
+static ServerProtocolNetwork *serverConnection;
+
+@implementation ServerProtocolNetwork
+@synthesize serverPort, serverAddress, ssd;
+
+#pragma mark -
+#pragma mark init and class methods
+-(id) init:(NSInteger) onPort withAddress:(NSString *)address {
+ if (self = [super init]) {
+ self.serverPort = onPort;
+ self.serverAddress = address;
+ }
+ serverConnection = self;
+ return self;
+}
+
+-(id) init {
+ return [self init:NETGAME_DEFAULT_PORT withAddress:@"netserver.hedgewars.org"];
+}
+
+-(id) initOnPort:(NSInteger) port {
+ return [self init:port withAddress:@"netserver.hedgewars.org"];
+}
+
+-(id) initToAddress:(NSString *)address {
+ return [self init:NETGAME_DEFAULT_PORT withAddress:address];
+}
+
+-(void) dealloc {
+ releaseAndNil(serverAddress);
+ serverConnection = nil;
+ [super dealloc];
+}
+
++(ServerProtocolNetwork *)openServerConnection {
+ ServerProtocolNetwork *connection = [[ServerProtocolNetwork alloc] init];
+ [NSThread detachNewThreadSelector:@selector(serverProtocol)
+ toTarget:connection
+ withObject:nil];
+ [connection retain]; // retain count here is +2
+ return connection;
+}
+
+#pragma mark -
+#pragma mark Communication layer
+-(int) sendToServer:(NSString *)command {
+ NSString *message = [[NSString alloc] initWithFormat:@"%@\n\n",command];
+ int result = SDLNet_TCP_Send(self.ssd, [message UTF8String], [message length]);
+ [message release];
+ return result;
+}
+
+-(int) sendToServer:(NSString *)command withArgument:(NSString *)argument {
+ NSString *message = [[NSString alloc] initWithFormat:@"%@\n%@\n\n",command,argument];
+ int result = SDLNet_TCP_Send(self.ssd, [message UTF8String], [message length]);
+ [message release];
+ return result;
+}
+
+-(void) serverProtocol {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ IPaddress ip;
+ BOOL clientQuit = NO;
+ char *buffer = (char *)malloc(sizeof(char)*BUFFER_SIZE);
+ int dim = BUFFER_SIZE;
+ uint8_t msgSize;
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+
+ if (SDLNet_Init() < 0) {
+ DLog(@"SDLNet_Init: %s", SDLNet_GetError());
+ clientQuit = YES;
+ }
+
+ // Resolving the host using NULL make network interface to listen
+ if (SDLNet_ResolveHost(&ip, [self.serverAddress UTF8String] , self.serverPort) < 0 && !clientQuit) {
+ DLog(@"SDLNet_ResolveHost: %s", SDLNet_GetError());
+ clientQuit = YES;
+ }
+
+ // Open a connection with the IP provided (listen on the host's port)
+ if (!(self.ssd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
+ DLog(@"SDLNet_TCP_Open: %s %d", SDLNet_GetError(), self.serverPort);
+ clientQuit = YES;
+ }
+
+ DLog(@"Found server on port %d", self.serverPort);
+ while (!clientQuit) {
+ int index = 0;
+ BOOL exitBufferLoop = NO;
+ memset(buffer, '\0', dim);
+
+ while (exitBufferLoop != YES) {
+ msgSize = SDLNet_TCP_Recv(self.ssd, &buffer[index], 2);
+
+ // exit in case of error
+ if (msgSize <= 0) {
+ DLog(@"SDLNet_TCP_Recv: %s", SDLNet_GetError());
+ clientQuit = YES;
+ break;
+ }
+
+ // update index position and check for End-Of-Message
+ index += msgSize;
+ if (strncmp(&buffer[index-2], "\n\n", 2) == 0) {
+ exitBufferLoop = YES;
+ }
+
+ // if message is too big allocate new space
+ if (index >= dim) {
+ dim += BUFFER_SIZE;
+ buffer = (char *)realloc(buffer, dim);
+ if (buffer == NULL) {
+ clientQuit = YES;
+ break;
+ }
+ }
+ }
+
+ NSString *bufferedMessage = [[NSString alloc] initWithBytes:buffer length:index-2 encoding:NSASCIIStringEncoding];
+ NSArray *listOfCommands = [bufferedMessage componentsSeparatedByString:@"\n"];
+ [bufferedMessage release];
+ NSString *command = [listOfCommands objectAtIndex:0];
+ DLog(@"size = %d, %@", index-2, listOfCommands);
+ if ([command isEqualToString:@"PING"]) {
+ if ([listOfCommands count] > 1)
+ [self sendToServer:@"PONG" withArgument:[listOfCommands objectAtIndex:1]];
+ else
+ [self sendToServer:@"PONG"];
+ DLog(@"PONG");
+ }
+ else if ([command isEqualToString:@"NICK"]) {
+ //what is this for?
+ }
+ else if ([command isEqualToString:@"PROTO"]) {
+ //what is this for?
+ }
+ else if ([command isEqualToString:@"ROOM"]) {
+ //TODO: stub
+ }
+ else if ([command isEqualToString:@"LOBBY:LEFT"]) {
+ //TODO: stub
+ }
+ else if ([command isEqualToString:@"LOBBY:JOINED"]) {
+ //TODO: stub
+ }
+ else if ([command isEqualToString:@"ASKPASSWORD"]) {
+ NSString *pwd = [defaults objectForKey:@"password"];
+ [self sendToServer:@"PASSWORD" withArgument:pwd];
+ }
+ else if ([command isEqualToString:@"CONNECTED"]) {
+ int netProto;
+ char *versionStr;
+ HW_versionInfo(&netProto, &versionStr);
+ NSString *nick = [defaults objectForKey:@"username"];
+ [self sendToServer:@"NICK" withArgument:nick];
+ [self sendToServer:@"PROTO" withArgument:[NSString stringWithFormat:@"%d",netProto]];
+ }
+ else if ([command isEqualToString:@"SERVER_MESSAGE"]) {
+ DLog(@"%@", [listOfCommands objectAtIndex:1]);
+ }
+ else if ([command isEqualToString:@"WARNING"]) {
+ if ([listOfCommands count] > 1)
+ DLog(@"Server warning - %@", [listOfCommands objectAtIndex:1]);
+ else
+ DLog(@"Server warning - unknown");
+ }
+ else if ([command isEqualToString:@"ERROR"]) {
+ DLog(@"Server error - %@", [listOfCommands objectAtIndex:1]);
+ }
+ else if ([command isEqualToString:@"BYE"]) {
+ //TODO: handle "Reconnected too fast"
+ DLog(@"Server disconnected, reason: %@", [listOfCommands objectAtIndex:1]);
+ clientQuit = YES;
+ }
+ else {
+ DLog(@"Unknown/Unsupported message received: %@", command);
+ }
+ }
+ DLog(@"Server closed connection, ending thread");
+
+ free(buffer);
+ SDLNet_TCP_Close(self.ssd);
+ SDLNet_Quit();
+
+ [pool release];
+}
+
+@end
--- a/project_files/HedgewarsMobile/Classes/ServerSetup.h Sat Nov 12 15:48:55 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * Hedgewars-iOS, a Hedgewars port for iOS devices
- * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * File created on 16/12/2010.
- */
-
-
-#import <Foundation/Foundation.h>
-#import "SDL_net.h"
-
-@interface ServerSetup : NSObject {
- NSDictionary *systemSettings;
-
- TCPsocket sd; // External socket descriptor
-}
-
-+(NSInteger) randomPort;
-+(BOOL) isNetworkReachable;
-
-@property (nonatomic, retain) NSDictionary *systemSettings;
-
-@end
--- a/project_files/HedgewarsMobile/Classes/ServerSetup.m Sat Nov 12 15:48:55 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,227 +0,0 @@
-/*
- * Hedgewars-iOS, a Hedgewars port for iOS devices
- * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * File created on 10/01/2010.
- */
-
-
-#import "ServerSetup.h"
-#import <netinet/in.h>
-#import <SystemConfiguration/SCNetworkReachability.h>
-
-#import "hwconsts.h"
-
-#define BUFFER_SIZE 256
-
-@implementation ServerSetup
-@synthesize systemSettings;
-
-
-+(NSInteger) randomPort {
- srandom(time(NULL));
- NSInteger res = (random() % 64511) + 1024;
- return (res == NETGAME_DEFAULT_PORT) ? [ServerSetup randomPort] : res;
-}
-
-+(BOOL) isNetworkReachable {
- // Create zero addy
- struct sockaddr_in zeroAddress;
- bzero(&zeroAddress, sizeof(zeroAddress));
- zeroAddress.sin_len = sizeof(zeroAddress);
- zeroAddress.sin_family = AF_INET;
-
- // Recover reachability flags
- SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
- SCNetworkReachabilityFlags flags;
-
- BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
- CFRelease(defaultRouteReachability);
-
- if (!didRetrieveFlags) {
- NSLog(@"Error. Could not recover network reachability flags");
- return NO;
- }
-
- BOOL isReachable = flags & kSCNetworkFlagsReachable;
- BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
- BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;
-
- NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"];
- NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL
- cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
- timeoutInterval:20.0];
- NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:nil];
- BOOL testResult = testConnection ? YES : NO;
- [testConnection release];
-
- return ((isReachable && !needsConnection) || nonWiFi) ? testResult : NO;
-}
-
--(id) init {
- if (self = [super init]) {
- self.systemSettings = nil; //nsuserdefault
- }
- return self;
-}
-
--(void) dealloc {
-
- [super dealloc];
-}
-
--(int) sendToServer:(NSString *)command {
- NSString *message = [[NSString alloc] initWithFormat:@"%@\n\n",command];
- int result = SDLNet_TCP_Send(sd, [message UTF8String], [message length]);
- [message release];
- return result;
-}
-
--(int) sendToServer:(NSString *)command withArgument:(NSString *)argument {
- NSString *message = [[NSString alloc] initWithFormat:@"%@\n%@\n\n",command,argument];
- int result = SDLNet_TCP_Send(sd, [message UTF8String], [message length]);
- [message release];
- return result;
-}
-
--(void) serverProtocol {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- IPaddress ip;
- BOOL clientQuit = NO;
- char *buffer = (char *)malloc(sizeof(char)*BUFFER_SIZE);
- int dim = BUFFER_SIZE;
- uint8_t msgSize;
-
- if (SDLNet_Init() < 0) {
- DLog(@"SDLNet_Init: %s", SDLNet_GetError());
- clientQuit = YES;
- }
-
- // Resolving the host using NULL make network interface to listen
- if (SDLNet_ResolveHost(&ip, "netserver.hedgewars.org", NETGAME_DEFAULT_PORT) < 0 && !clientQuit) {
- DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
- clientQuit = YES;
- }
-
- // Open a connection with the IP provided (listen on the host's port)
- if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
- DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), NETGAME_DEFAULT_PORT);
- clientQuit = YES;
- }
-
- DLog(@"Found server on port %d", NETGAME_DEFAULT_PORT);
- while (!clientQuit) {
- int index = 0;
- BOOL exitBufferLoop = NO;
- memset(buffer, '\0', dim);
-
- while (exitBufferLoop != YES) {
- msgSize = SDLNet_TCP_Recv(sd, &buffer[index], 2);
-
- // exit in case of error
- if (msgSize <= 0) {
- DLog(@"SDLNet_TCP_Recv: %s", SDLNet_GetError());
- clientQuit = YES;
- break;
- }
-
- // update index position and check for End-Of-Message
- index += msgSize;
- if (strncmp(&buffer[index-2], "\n\n", 2) == 0) {
- exitBufferLoop = YES;
- }
-
- // if message is too big allocate new space
- if (index >= dim) {
- dim += BUFFER_SIZE;
- buffer = (char *)realloc(buffer, dim);
- if (buffer == NULL) {
- clientQuit = YES;
- break;
- }
- }
- }
-
- NSString *bufferedMessage = [[NSString alloc] initWithBytes:buffer length:index-2 encoding:NSASCIIStringEncoding];
- NSArray *listOfCommands = [bufferedMessage componentsSeparatedByString:@"\n"];
- [bufferedMessage release];
- NSString *command = [listOfCommands objectAtIndex:0];
- DLog(@"size = %d, %@", index-2, listOfCommands);
- if ([command isEqualToString:@"PING"]) {
- if ([listOfCommands count] > 1)
- [self sendToServer:@"PONG" withArgument:[listOfCommands objectAtIndex:1]];
- else
- [self sendToServer:@"PONG"];
- DLog(@"PONG");
- }
- else if ([command isEqualToString:@"NICK"]) {
- //what is this for?
- }
- else if ([command isEqualToString:@"PROTO"]) {
- //what is this for?
- }
- else if ([command isEqualToString:@"ROOM"]) {
- //TODO: stub
- }
- else if ([command isEqualToString:@"LOBBY:LEFT"]) {
- //TODO: stub
- }
- else if ([command isEqualToString:@"LOBBY:JOINED"]) {
- //TODO: stub
- }
- else if ([command isEqualToString:@"ASKPASSWORD"]) {
- NSString *pwd = [self.systemSettings objectForKey:@"password"];
- [self sendToServer:@"PASSWORD" withArgument:pwd];
- }
- else if ([command isEqualToString:@"CONNECTED"]) {
- int netProto;
- char *versionStr;
- HW_versionInfo(&netProto, &versionStr);
- NSString *nick = [self.systemSettings objectForKey:@"username"];
- [self sendToServer:@"NICK" withArgument:nick];
- [self sendToServer:@"PROTO" withArgument:[NSString stringWithFormat:@"%d",netProto]];
- }
- else if ([command isEqualToString:@"SERVER_MESSAGE"]) {
- DLog(@"%@", [listOfCommands objectAtIndex:1]);
- }
- else if ([command isEqualToString:@"WARNING"]) {
- if ([listOfCommands count] > 1)
- DLog(@"Server warning - %@", [listOfCommands objectAtIndex:1]);
- else
- DLog(@"Server warning - unknown");
- }
- else if ([command isEqualToString:@"ERROR"]) {
- DLog(@"Server error - %@", [listOfCommands objectAtIndex:1]);
- }
- else if ([command isEqualToString:@"BYE"]) {
- //TODO: handle "Reconnected too fast"
- DLog(@"Server disconnected, reason: %@", [listOfCommands objectAtIndex:1]);
- clientQuit = YES;
- }
- else {
- DLog(@"Unknown/Unsupported message received: %@", command);
- }
- }
- DLog(@"Server closed connection, ending thread");
-
- free(buffer);
- SDLNet_TCP_Close(sd);
- SDLNet_Quit();
-
- [pool release];
-}
-
-@end
--- a/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -284,5 +284,18 @@
[super dealloc];
}
+
+-(void) viewWillDisappear:(BOOL)animated {
+ // this will send -viewWillDisappear: only the active view
+ [self.tabController viewWillDisappear:animated];
+ // let's send that to every page, even though only GeneralSettingsViewController needs it
+ [generalSettingsViewController viewWillDisappear:animated];
+ [teamSettingsViewController viewWillDisappear:animated];
+ [weaponSettingsViewController viewWillDisappear:animated];
+ [schemeSettingsViewController viewWillDisappear:animated];
+ [supportViewController viewWillDisappear:animated];
+ [super viewWillDisappear:animated];
+}
+
@end
--- a/project_files/HedgewarsMobile/Classes/SettingsContainerViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/SettingsContainerViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -68,7 +68,6 @@
self.baseController.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
[self.view addSubview:self.baseController.view];
- // here setting activeController is not needed as the event is kept active by the uitabbarcontroller
}
[super viewDidLoad];
@@ -104,26 +103,31 @@
#pragma mark -
-#pragma mark additional methods as we're using a UINavigationController programmatically
+#pragma mark view event management propagation
+// every time we add a uiviewcontroller programmatically we need to take care of propgating such messages
// see http://davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller/
-(void) viewWillAppear:(BOOL)animated {
+ [self.activeController viewWillAppear:animated];
+ [self.baseController viewWillAppear:animated];
[super viewWillAppear:animated];
- [self.activeController viewWillAppear:animated];
}
-(void) viewWillDisappear:(BOOL)animated {
+ [self.activeController viewWillDisappear:animated];
+ [self.baseController viewWillDisappear:animated];
[super viewWillDisappear:animated];
- [self.activeController viewWillDisappear:animated];
}
-(void) viewDidAppear:(BOOL)animated {
+ [self.activeController viewDidAppear:animated];
+ [self.baseController viewDidAppear:animated];
[super viewDidLoad];
- [self.activeController viewDidAppear:animated];
}
-(void) viewDidDisappear:(BOOL)animated {
+ [self.activeController viewDidDisappear:animated];
+ [self.baseController viewDidDisappear:animated];
[super viewDidUnload];
- [self.activeController viewDidDisappear:animated];
}
--- a/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m Sat Nov 12 17:06:49 2011 +0100
@@ -271,11 +271,6 @@
#pragma mark -
#pragma mark Memory management
-(void) didReceiveMemoryWarning {
- if ([[HedgewarsAppDelegate sharedAppDelegate] isInGame]) {
- self.listOfSelectedTeams = nil;
- self.listOfAllTeams = nil;
- self.tableView = nil;
- }
self.cachedContentsOfDir = nil;
MSG_MEMCLEAN();
[super didReceiveMemoryWarning];
--- a/project_files/HedgewarsMobile/ExtraCategories.h Sat Nov 12 15:48:55 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Hedgewars-iOS, a Hedgewars port for iOS devices
- * Copyright (c) 2009-2010 Vittorio Giovara <vittorio.giovara@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * File created on 25/10/2011.
- */
-
-
-#import <Foundation/Foundation.h>
-
-
-@interface UIScreen (safe)
-
--(CGFloat) safeScale;
-
-@end
-
-
-@interface UITableView (backgroundColor)
-
--(void) setBackgroundColorForAnyTable:(UIColor *)color;
-
-@end
-
-
-@interface UIColor (HWColors)
-
-+(UIColor *)darkYellowColor;
-+(UIColor *)lightYellowColor;
-+(UIColor *)darkBlueColor;
-+(UIColor *)darkBlueColorTransparent;
-+(UIColor *)blackColorTransparent;
-
-@end
-
-
-@interface UILabel (quickStyle)
-
--(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title;
--(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth;
--(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth
- withBorderColor:(UIColor *)borderColor withBackgroundColor:(UIColor *)backColor;
-
-@end
-
-
-@interface NSString (MD5)
-
--(NSString *)MD5hash;
-
-@end
\ No newline at end of file
--- a/project_files/HedgewarsMobile/ExtraCategories.m Sat Nov 12 15:48:55 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*
- * Hedgewars-iOS, a Hedgewars port for iOS devices
- * Copyright (c) 2009-2010 Vittorio Giovara <vittorio.giovara@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * File created on 25/10/2011.
- */
-
-
-#import "ExtraCategories.h"
-#import <QuartzCore/QuartzCore.h>
-#import <CommonCrypto/CommonDigest.h>
-
-
-@implementation UIScreen (safe)
-
--(CGFloat) safeScale {
- CGFloat theScale = 1.0f;
- if ([self respondsToSelector:@selector(scale)])
- theScale = [self scale];
- return theScale;
-}
-
-@end
-
-
-@implementation UITableView (backgroundColor)
-
--(void) setBackgroundColorForAnyTable:(UIColor *) color {
- if ([self respondsToSelector:@selector(backgroundView)]) {
- UIView *backView = [[UIView alloc] initWithFrame:self.frame];
- backView.backgroundColor = color;
- self.backgroundView = backView;
- [backView release];
- self.backgroundColor = [UIColor clearColor];
- } else
- self.backgroundColor = color;
-}
-
-@end
-
-
-@implementation UIColor (HWColors)
-
-+(UIColor *)darkYellowColor {
- return [UIColor colorWithRed:(CGFloat)0xFE/255 green:(CGFloat)0xC0/255 blue:0 alpha:1];
-}
-
-+(UIColor *)lightYellowColor {
- return [UIColor colorWithRed:(CGFloat)0xF0/255 green:(CGFloat)0xD0/255 blue:0 alpha:1];
-}
-
-+(UIColor *)darkBlueColor {
- return [UIColor colorWithRed:(CGFloat)0x0F/255 green:0 blue:(CGFloat)0x42/255 alpha:1];
-}
-
-// older devices don't get any transparency for performance reasons
-+(UIColor *)darkBlueColorTransparent {
- return [UIColor colorWithRed:(CGFloat)0x0F/255
- green:0
- blue:(CGFloat)0x55/255
- alpha:IS_NOT_POWERFUL([HWUtils modelType]) ? 1 : 0.6f];
-}
-
-+(UIColor *)blackColorTransparent {
- return [UIColor colorWithRed:0
- green:0
- blue:0
- alpha:IS_NOT_POWERFUL([HWUtils modelType]) ? 1 : 0.65f];
-}
-
-@end
-
-
-@implementation UILabel (quickStyle)
-
--(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title {
- return [self initWithFrame:frame
- andTitle:title
- withBorderWidth:1.5f
- withBorderColor:[UIColor darkYellowColor]
- withBackgroundColor:[UIColor darkBlueColor]];
-}
-
--(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth {
- return [self initWithFrame:frame
- andTitle:title
- withBorderWidth:borderWidth
- withBorderColor:[UIColor darkYellowColor]
- withBackgroundColor:[UIColor darkBlueColorTransparent]];
-}
-
--(UILabel *)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth
- withBorderColor:(UIColor *)borderColor withBackgroundColor:(UIColor *)backColor{
- UILabel *theLabel = [self initWithFrame:frame];
- theLabel.backgroundColor = backColor;
-
- if (title != nil) {
- theLabel.text = title;
- theLabel.textColor = [UIColor lightYellowColor];
- theLabel.textAlignment = UITextAlignmentCenter;
- theLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]*80/100];
- }
-
- [theLabel.layer setBorderWidth:borderWidth];
- [theLabel.layer setBorderColor:borderColor.CGColor];
- [theLabel.layer setCornerRadius:8.0f];
- [theLabel.layer setMasksToBounds:YES];
-
- return theLabel;
-}
-
-@end
-
-
-@implementation NSString (MD5)
-
--(NSString *)MD5hash {
- const char *cStr = [self UTF8String];
- unsigned char result[16];
- CC_MD5( cStr, strlen(cStr), result );
- return [NSString stringWithFormat:
- @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
- result[0], result[1], result[2], result[3], result[4], result[5],
- result[6], result[7], result[8], result[9], result[10], result[11],
- result[12], result[13], result[14], result[15]];
-}
-
-@end
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Sat Nov 12 17:06:49 2011 +0100
@@ -231,7 +231,7 @@
61DF0EDC1284DF2300F3F10B /* HelpPageLobbyViewController-iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 61DF0EDB1284DF2300F3F10B /* HelpPageLobbyViewController-iPhone.xib */; };
61DF0F211284F72A00F3F10B /* HelpPageInGameViewController-iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 61DF0F201284F72A00F3F10B /* HelpPageInGameViewController-iPhone.xib */; };
61E1F4F811D004240016A5AA /* adler32.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61E1F4F711D004240016A5AA /* adler32.pas */; };
- 61E2E12E12BAAEE30051B659 /* ServerSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = 61E2E12D12BAAEE30051B659 /* ServerSetup.m */; };
+ 61E2E12E12BAAEE30051B659 /* ServerProtocolNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 61E2E12D12BAAEE30051B659 /* ServerProtocolNetwork.m */; };
61E2F7441283752C00E12521 /* fb.png in Resources */ = {isa = PBXBuildFile; fileRef = 61E2F7421283752C00E12521 /* fb.png */; };
61E2F7451283752C00E12521 /* tw.png in Resources */ = {isa = PBXBuildFile; fileRef = 61E2F7431283752C00E12521 /* tw.png */; };
61E5D68D12AB006F00566F29 /* uLandPainted.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61E5D68C12AB006F00566F29 /* uLandPainted.pas */; };
@@ -595,8 +595,8 @@
61C28D3D142D380400DA16C2 /* AudioManagerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioManagerController.h; path = Classes/AudioManagerController.h; sourceTree = "<group>"; };
61C28D3E142D380400DA16C2 /* AudioManagerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AudioManagerController.m; path = Classes/AudioManagerController.m; sourceTree = "<group>"; };
61CADE321402EE290030C3EB /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
- 61D0BDF71457508C0011A899 /* ExtraCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExtraCategories.h; sourceTree = "<group>"; };
- 61D0BDF81457508C0011A899 /* ExtraCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExtraCategories.m; sourceTree = "<group>"; };
+ 61D0BDF71457508C0011A899 /* ExtraCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraCategories.h; path = Classes/ExtraCategories.h; sourceTree = "<group>"; };
+ 61D0BDF81457508C0011A899 /* ExtraCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraCategories.m; path = Classes/ExtraCategories.m; sourceTree = "<group>"; };
61D2059F127CDD1100ABD83E /* ObjcExports.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ObjcExports.h; path = Classes/ObjcExports.h; sourceTree = "<group>"; };
61D205A0127CDD1100ABD83E /* ObjcExports.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ObjcExports.m; path = Classes/ObjcExports.m; sourceTree = "<group>"; };
61D3D2A41290E03A003CE7C3 /* irc.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = irc.png; path = Resources/Icons/irc.png; sourceTree = "<group>"; };
@@ -605,8 +605,8 @@
61DF0EDB1284DF2300F3F10B /* HelpPageLobbyViewController-iPhone.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = "HelpPageLobbyViewController-iPhone.xib"; sourceTree = "<group>"; };
61DF0F201284F72A00F3F10B /* HelpPageInGameViewController-iPhone.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = "HelpPageInGameViewController-iPhone.xib"; sourceTree = "<group>"; };
61E1F4F711D004240016A5AA /* adler32.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = adler32.pas; path = ../../hedgewars/adler32.pas; sourceTree = SOURCE_ROOT; };
- 61E2E12C12BAAEE30051B659 /* ServerSetup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerSetup.h; sourceTree = "<group>"; };
- 61E2E12D12BAAEE30051B659 /* ServerSetup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ServerSetup.m; sourceTree = "<group>"; };
+ 61E2E12C12BAAEE30051B659 /* ServerProtocolNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerProtocolNetwork.h; sourceTree = "<group>"; };
+ 61E2E12D12BAAEE30051B659 /* ServerProtocolNetwork.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ServerProtocolNetwork.m; sourceTree = "<group>"; };
61E2F7421283752C00E12521 /* fb.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fb.png; path = Resources/Icons/fb.png; sourceTree = "<group>"; };
61E2F7431283752C00E12521 /* tw.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tw.png; path = Resources/Icons/tw.png; sourceTree = "<group>"; };
61E5D68C12AB006F00566F29 /* uLandPainted.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandPainted.pas; path = ../../hedgewars/uLandPainted.pas; sourceTree = SOURCE_ROOT; };
@@ -688,8 +688,8 @@
61EDB5AF135B3F97009B29A6 /* GameInterfaceBridge.m */,
616591E611CA9BA200D6E256 /* EngineProtocolNetwork.h */,
616591E711CA9BA200D6E256 /* EngineProtocolNetwork.m */,
- 61E2E12C12BAAEE30051B659 /* ServerSetup.h */,
- 61E2E12D12BAAEE30051B659 /* ServerSetup.m */,
+ 61E2E12C12BAAEE30051B659 /* ServerProtocolNetwork.h */,
+ 61E2E12D12BAAEE30051B659 /* ServerProtocolNetwork.m */,
);
path = Classes;
sourceTree = "<group>";
@@ -726,14 +726,12 @@
61DE91561258B76800B80214 /* Custom UIs */,
61AC067212B2E32D000B52A2 /* Appirater.h */,
61AC067312B2E32D000B52A2 /* Appirater.m */,
+ 61006F93128DE31F00EBA7F7 /* CreationChamber.h */,
+ 61006F94128DE31F00EBA7F7 /* CreationChamber.m */,
6165929C11CA9E2F00D6E256 /* HedgewarsAppDelegate.h */,
6165929D11CA9E2F00D6E256 /* HedgewarsAppDelegate.m */,
61D2059F127CDD1100ABD83E /* ObjcExports.h */,
61D205A0127CDD1100ABD83E /* ObjcExports.m */,
- 61006F93128DE31F00EBA7F7 /* CreationChamber.h */,
- 61006F94128DE31F00EBA7F7 /* CreationChamber.m */,
- 6165922411CA9BD500D6E256 /* CGPointUtils.h */,
- 6165922311CA9BD500D6E256 /* CGPointUtils.c */,
);
name = "Other Sources";
sourceTree = "<group>";
@@ -1106,6 +1104,8 @@
children = (
61C28D3D142D380400DA16C2 /* AudioManagerController.h */,
61C28D3E142D380400DA16C2 /* AudioManagerController.m */,
+ 6165922411CA9BD500D6E256 /* CGPointUtils.h */,
+ 6165922311CA9BD500D6E256 /* CGPointUtils.c */,
61D0BDF71457508C0011A899 /* ExtraCategories.h */,
61D0BDF81457508C0011A899 /* ExtraCategories.m */,
6165922511CA9BD500D6E256 /* HWUtils.h */,
@@ -1644,7 +1644,7 @@
61E5D68D12AB006F00566F29 /* uLandPainted.pas in Sources */,
61F544C712AF1748007FD913 /* HoldTableViewCell.m in Sources */,
61AC067412B2E32D000B52A2 /* Appirater.m in Sources */,
- 61E2E12E12BAAEE30051B659 /* ServerSetup.m in Sources */,
+ 61E2E12E12BAAEE30051B659 /* ServerProtocolNetwork.m in Sources */,
61B7A33812CC21080086B604 /* StatsPageViewController.m in Sources */,
61EDB5B0135B3F97009B29A6 /* GameInterfaceBridge.m in Sources */,
61A976B3136F668500DD9878 /* uCursor.pas in Sources */,
--- a/project_files/HedgewarsMobile/SDL-50560ca58f80.patch Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/HedgewarsMobile/SDL-50560ca58f80.patch Sat Nov 12 17:06:49 2011 +0100
@@ -1,6 +1,6 @@
diff -r 50560ca58f80 Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj
--- a/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj Mon Oct 24 23:18:53 2011 -0400
-+++ b/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj Tue Oct 25 22:13:19 2011 +0200
++++ b/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj Wed Nov 02 09:22:08 2011 +0100
@@ -1596,9 +1596,12 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
GCC_C_LANGUAGE_STANDARD = c99;
@@ -31,7 +31,7 @@
TARGETED_DEVICE_FAMILY = "1,2";
diff -r 50560ca58f80 include/SDL_config_iphoneos.h
--- a/include/SDL_config_iphoneos.h Mon Oct 24 23:18:53 2011 -0400
-+++ b/include/SDL_config_iphoneos.h Tue Oct 25 22:13:19 2011 +0200
++++ b/include/SDL_config_iphoneos.h Wed Nov 02 09:22:08 2011 +0100
@@ -106,7 +106,7 @@
/* enable iPhone version of Core Audio driver */
#define SDL_AUDIO_DRIVER_COREAUDIO 1
@@ -63,7 +63,7 @@
See src/joystick/uikit/SDLUIAccelerationDelegate.m for notes on why this is needed
diff -r 50560ca58f80 src/video/uikit/SDL_uikitopenglview.m
--- a/src/video/uikit/SDL_uikitopenglview.m Mon Oct 24 23:18:53 2011 -0400
-+++ b/src/video/uikit/SDL_uikitopenglview.m Tue Oct 25 22:13:19 2011 +0200
++++ b/src/video/uikit/SDL_uikitopenglview.m Wed Nov 02 09:22:08 2011 +0100
@@ -114,8 +114,8 @@
// !!! FIXME: use the screen this is on!
@@ -86,15 +86,176 @@
}
- (void)setCurrentContext
+diff -r 50560ca58f80 src/video/uikit/SDL_uikitvideo.m
+--- a/src/video/uikit/SDL_uikitvideo.m Mon Oct 24 23:18:53 2011 -0400
++++ b/src/video/uikit/SDL_uikitvideo.m Wed Nov 02 09:22:08 2011 +0100
+@@ -178,7 +178,7 @@
+
+ // UIScreenMode showed up in 3.2 (the iPad and later). We're
+ // misusing this supports_multiple_displays flag here for that.
+- if (!SDL_UIKit_supports_multiple_displays) {
++ if (SDL_UIKit_supports_multiple_displays) {
+ UIScreenMode *uimode = [uiscreen currentMode];
+ [uimode retain]; // once for the desktop_mode
+ [uimode retain]; // once for the current_mode
+@@ -200,10 +200,8 @@
+ {
+ _this->gl_config.driver_loaded = 1;
+
+- NSString *reqSysVer = @"3.2";
+- NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
+- if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
+- SDL_UIKit_supports_multiple_displays = YES;
++ // this tells us whether we are running on ios >= 3.2
++ SDL_UIKit_supports_multiple_displays = [UIScreen instancesRespondToSelector:@selector(currentMode)];
+
+ // Add the main screen.
+ UIScreen *uiscreen = [UIScreen mainScreen];
+diff -r 50560ca58f80 src/video/uikit/SDL_uikitview.m
+--- a/src/video/uikit/SDL_uikitview.m Mon Oct 24 23:18:53 2011 -0400
++++ b/src/video/uikit/SDL_uikitview.m Wed Nov 02 09:22:08 2011 +0100
+@@ -311,7 +311,7 @@
+ /* iPhone keyboard addition functions */
+ #if SDL_IPHONE_KEYBOARD
+
+-SDL_uikitview * getWindowView(SDL_Window * window)
++SDL_uikitview *SDL_getUikitView(SDL_Window *window)
+ {
+ if (window == NULL) {
+ SDL_SetError("Window does not exist");
+@@ -328,9 +328,9 @@
+ return view;
+ }
+
+-int SDL_iPhoneKeyboardShow(SDL_Window * window)
++int SDL_iPhoneKeyboardShow(SDL_Window *window)
+ {
+- SDL_uikitview *view = getWindowView(window);
++ SDL_uikitview *view = SDL_getUikitView(window);
+ if (view == nil) {
+ return -1;
+ }
+@@ -339,9 +339,9 @@
+ return 0;
+ }
+
+-int SDL_iPhoneKeyboardHide(SDL_Window * window)
++int SDL_iPhoneKeyboardHide(SDL_Window *window)
+ {
+- SDL_uikitview *view = getWindowView(window);
++ SDL_uikitview *view = SDL_getUikitView(window);
+ if (view == nil) {
+ return -1;
+ }
+@@ -350,9 +350,9 @@
+ return 0;
+ }
+
+-SDL_bool SDL_iPhoneKeyboardIsShown(SDL_Window * window)
++SDL_bool SDL_iPhoneKeyboardIsShown(SDL_Window *window)
+ {
+- SDL_uikitview *view = getWindowView(window);
++ SDL_uikitview *view = SDL_getUikitView(window);
+ if (view == nil) {
+ return 0;
+ }
+@@ -360,9 +360,9 @@
+ return view.keyboardVisible;
+ }
+
+-int SDL_iPhoneKeyboardToggle(SDL_Window * window)
++int SDL_iPhoneKeyboardToggle(SDL_Window *window)
+ {
+- SDL_uikitview *view = getWindowView(window);
++ SDL_uikitview *view = SDL_getUikitView(window);
+ if (view == nil) {
+ return -1;
+ }
+@@ -380,24 +380,24 @@
+
+ /* stubs, used if compiled without keyboard support */
+
+-int SDL_iPhoneKeyboardShow(SDL_Window * window)
++int SDL_iPhoneKeyboardShow(SDL_Window *window)
+ {
+ SDL_SetError("Not compiled with keyboard support");
+ return -1;
+ }
+
+-int SDL_iPhoneKeyboardHide(SDL_Window * window)
++int SDL_iPhoneKeyboardHide(SDL_Window *window)
+ {
+ SDL_SetError("Not compiled with keyboard support");
+ return -1;
+ }
+
+-SDL_bool SDL_iPhoneKeyboardIsShown(SDL_Window * window)
++SDL_bool SDL_iPhoneKeyboardIsShown(SDL_Window *window)
+ {
+ return 0;
+ }
+
+-int SDL_iPhoneKeyboardToggle(SDL_Window * window)
++int SDL_iPhoneKeyboardToggle(SDL_Window *window)
+ {
+ SDL_SetError("Not compiled with keyboard support");
+ return -1;
diff -r 50560ca58f80 src/video/uikit/SDL_uikitviewcontroller.m
--- a/src/video/uikit/SDL_uikitviewcontroller.m Mon Oct 24 23:18:53 2011 -0400
-+++ b/src/video/uikit/SDL_uikitviewcontroller.m Tue Oct 25 22:13:19 2011 +0200
-@@ -145,7 +145,7 @@
- frame.origin.x = 0;
- frame.origin.y = 0;
++++ b/src/video/uikit/SDL_uikitviewcontroller.m Wed Nov 02 09:22:08 2011 +0100
+@@ -28,8 +28,8 @@
+
+ #include "SDL_uikitwindow.h"
+
+-#import "SDL_uikitviewcontroller.h"
+-
++#include "SDL_uikitviewcontroller.h"
++#include "SDL_uikitvideo.h"
+
+ @implementation SDL_uikitviewcontroller
-- [uiwindow setFrame:frame];
-+ [uiwindow setFrame:[[UIScreen mainScreen] bounds]];
+@@ -116,38 +116,17 @@
+ const UIInterfaceOrientation toInterfaceOrientation = [self interfaceOrientation];
+ SDL_WindowData *data = self->window->driverdata;
+ UIWindow *uiwindow = data->uiwindow;
+- UIScreen *uiscreen = [uiwindow screen];
++ UIScreen *uiscreen;
++ if (SDL_UIKit_supports_multiple_displays)
++ uiscreen = [uiwindow screen];
++ else
++ uiscreen = [UIScreen mainScreen];
+ const int noborder = self->window->flags & SDL_WINDOW_BORDERLESS;
+ CGRect frame = noborder ? [uiscreen bounds] : [uiscreen applicationFrame];
+- const CGSize size = frame.size;
+- int w, h;
+-
+- switch (toInterfaceOrientation) {
+- case UIInterfaceOrientationPortrait:
+- case UIInterfaceOrientationPortraitUpsideDown:
+- w = (size.width < size.height) ? size.width : size.height;
+- h = (size.width > size.height) ? size.width : size.height;
+- break;
+-
+- case UIInterfaceOrientationLandscapeLeft:
+- case UIInterfaceOrientationLandscapeRight:
+- w = (size.width > size.height) ? size.width : size.height;
+- h = (size.width < size.height) ? size.width : size.height;
+- break;
+-
+- default:
+- SDL_assert(0 && "Unexpected interface orientation!");
+- return;
+- }
+-
+- frame.size.width = w;
+- frame.size.height = h;
+- frame.origin.x = 0;
+- frame.origin.y = 0;
+
+ [uiwindow setFrame:frame];
[data->view updateFrame];
- SDL_SendWindowEvent(self->window, SDL_WINDOWEVENT_RESIZED, w, h);
+- SDL_SendWindowEvent(self->window, SDL_WINDOWEVENT_RESIZED, w, h);
++ SDL_SendWindowEvent(self->window, SDL_WINDOWEVENT_RESIZED, frame.size.width, frame.size.height);
}
+
+ @end
--- a/project_files/hedgewars.pro Sat Nov 12 15:48:55 2011 +0100
+++ b/project_files/hedgewars.pro Sat Nov 12 17:06:49 2011 +0100
@@ -70,9 +70,9 @@
../QTfrontend/ui/widget/weaponItem.h \
../QTfrontend/ui/widget/gamecfgwidget.h \
../QTfrontend/ui/widget/mapContainer.h \
- ../QTfrontend/ui/widget/HistoryLineEdit.h \
+ ../QTfrontend/ui/widget/HistoryLineEdit.h \
../QTfrontend/ui/widget/SmartLineEdit.h \
- ../QTfrontend/util/HWDataManager.h \
+ ../QTfrontend/util/HWDataManager.h \
../QTfrontend/net/netregister.h \
../QTfrontend/net/netserver.h \
../QTfrontend/net/netudpwidget.h \
@@ -147,7 +147,7 @@
../QTfrontend/ui/widget/mapContainer.cpp \
../QTfrontend/ui/widget/HistoryLineEdit.cpp \
../QTfrontend/ui/widget/SmartLineEdit.cpp \
- ../QTfrontend/util/HWDataManager.cpp \
+ ../QTfrontend/util/HWDataManager.cpp \
../QTfrontend/net/tcpBase.cpp \
../QTfrontend/net/netregister.cpp \
../QTfrontend/net/proto.cpp \
@@ -166,7 +166,7 @@
../QTfrontend/HWApplication.cpp \
../QTfrontend/hwform.cpp \
../QTfrontend/main.cpp \
- ../QTfrontend/util/SDLInteraction.cpp \
+ ../QTfrontend/util/SDLInteraction.cpp \
../QTfrontend/team.cpp \
../QTfrontend/ui_hwform.cpp \
../QTfrontend/hwconsts.cpp
Binary file share/hedgewars/Data/Graphics/Airplane.png has changed
Binary file share/hedgewars/Data/Graphics/Progress.png has changed
Binary file share/hedgewars/Data/Graphics/SuddenDeath/SDFlake.png has changed
--- a/share/hedgewars/Data/Locale/hedgewars_ar.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ar.ts Sat Nov 12 17:06:49 2011 +0100
@@ -64,24 +64,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 تم ØØ°ÙØ© من قائمة الترك</translation>
+ <translation type="obsolete">%1 *** %2 تم ØØ°ÙØ© من قائمة الترك</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 تم اضاÙته الى قائمة النرك</translation>
+ <translation type="obsolete">%1 *** %2 تم اضاÙته الى قائمة النرك</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 تم Øذقه الى قائمة الاصدقاء</translation>
+ <translation type="obsolete">%1 *** %2 تم Øذقه الى قائمة الاصدقاء</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 تم ØØ°ÙØ© من قائمة الاصدقاء</translation>
+ <translation type="obsolete">%1 *** %2 تم ØØ°ÙØ© من قائمة الاصدقاء</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -132,6 +184,40 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">كلمة السر</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">اسم اللاعب</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -258,7 +344,7 @@
</message>
<message>
<source>Password</source>
- <translation>كلمة السر</translation>
+ <translation type="obsolete">كلمة السر</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -287,21 +373,11 @@
<translation>%1 *** %2 خرج</translation>
</message>
<message>
- <source>Your nickname %1 is
-registered on Hedgewars.org
-Please provide your password below
-or pick another nickname in game config:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Nickname</source>
- <translation type="unfinished">اسم اللاعب</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">اسم اللاعب</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -359,7 +435,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">الغاء</translation>
+ <translation type="obsolete">الغاء</translation>
</message>
</context>
<context>
@@ -484,6 +560,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -969,10 +1052,6 @@
<translation type="unfinished">متاهة عشوائية</translation>
</message>
<message>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
@@ -1167,7 +1246,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>نمط التدريب، تØت التطوير</translation>
+ <translation type="obsolete">نمط التدريب، تØت التطوير</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1178,7 +1257,22 @@
<translation>تØميل</translation>
</message>
<message>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1474,7 +1568,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>This program is distributed under the GNU General Public License</translation>
+ <translation type="obsolete">This program is distributed under the GNU General Public License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1633,10 +1727,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1652,6 +1742,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_bg.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Когато тази наÑтройка е включена, при избирането на игрова Ñхема автоматично ще Ñе избере оръжие</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 беше премахнат от ÑпиÑъка Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð°Ð½Ð¸</translation>
+ <translation type="obsolete">%1 *** %2 беше премахнат от ÑпиÑъка Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð°Ð½Ð¸</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 беше добавен към ÑпиÑъка Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð°Ð½Ð¸</translation>
+ <translation type="obsolete">%1 *** %2 беше добавен към ÑпиÑъка Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð°Ð½Ð¸</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 беше премахнат от ÑпиÑъка Ñ Ð¿Ñ€Ð¸Ñтели</translation>
+ <translation type="obsolete">%1 *** %2 беше премахнат от ÑпиÑъка Ñ Ð¿Ñ€Ð¸Ñтели</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 беше добавен към ÑпиÑъка Ñ Ð¿Ñ€Ð¸Ñтели</translation>
+ <translation type="obsolete">%1 *** %2 беше добавен към ÑпиÑъка Ñ Ð¿Ñ€Ð¸Ñтели</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -131,6 +183,43 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Парола</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">ПрÑкорът ви %1 е
+региÑтриран на Hedgewars.org
+ÐœÐ¾Ð»Ñ Ð²ÑŠÐ´ÐµÑ‚Ðµ паролата Ñи по-долу
+или изберете друг прÑкор в наÑтройките на играта:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">ПрÑкор</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -249,7 +338,7 @@
</message>
<message>
<source>Password</source>
- <translation>Парола</translation>
+ <translation type="obsolete">Парола</translation>
</message>
<message>
<source>Quit reason: </source>
@@ -280,20 +369,17 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>ПрÑкорът ви %1 е
+ <translation type="obsolete">ПрÑкорът ви %1 е
региÑтриран на Hedgewars.org
ÐœÐ¾Ð»Ñ Ð²ÑŠÐ´ÐµÑ‚Ðµ паролата Ñи по-долу
или изберете друг прÑкор в наÑтройките на играта:</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">ПрÑкор</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">ПрÑкор</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -343,7 +429,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Отказ</translation>
+ <translation type="obsolete">Отказ</translation>
</message>
</context>
<context>
@@ -462,6 +548,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -933,7 +1026,7 @@
</message>
<message>
<source>State:</source>
- <translation>СъÑтоÑние:</translation>
+ <translation type="obsolete">СъÑтоÑние:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1123,7 +1216,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Тренировка (упражнете умениÑта Ñи в редица тренировъчни миÑии). Ð’ ПРОЦЕС ÐÐ Ð ÐЗРÐБОТКÐ</translation>
+ <translation type="obsolete">Тренировка (упражнете умениÑта Ñи в редица тренировъчни миÑии). Ð’ ПРОЦЕС ÐÐ Ð ÐЗРÐБОТКÐ</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1135,7 +1228,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Режим ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ñ (...). Ð’ ПРОЦЕС ÐÐ Ð ÐЗРÐБОТКÐ</translation>
+ <translation type="obsolete">Режим ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ñ (...). Ð’ ПРОЦЕС ÐÐ Ð ÐЗРÐБОТКÐ</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1454,7 +1566,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Тази програма Ñе разпроÑтранÑва под GNU (the GNU General Public License) лиценз</translation>
+ <translation type="obsolete">Тази програма Ñе разпроÑтранÑва под GNU (the GNU General Public License) лиценз</translation>
</message>
<message>
<source>Resolution</source>
@@ -1589,10 +1701,6 @@
<translation>Стерео режим</translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1608,6 +1716,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_cs.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts Sat Nov 12 17:06:49 2011 +0100
@@ -64,24 +64,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Pokud je tato volba aktivována, výbÄ›r hernÃho schématu vybere automaticky i zbraňové schéma</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 byl odstraněn ze seznamu ignorovaných</translation>
+ <translation type="obsolete">%1 *** %2 byl odstraněn ze seznamu ignorovaných</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 byl přidán na seznam ignorovaných</translation>
+ <translation type="obsolete">%1 *** %2 byl přidán na seznam ignorovaných</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 byl odstraněn ze seznamu přátel</translation>
+ <translation type="obsolete">%1 *** %2 byl odstraněn ze seznamu přátel</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 byl přidán na seznam přátel</translation>
+ <translation type="obsolete">%1 *** %2 byl přidán na seznam přátel</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -132,6 +184,43 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Heslo</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Tvoje pÅ™ezdÃvka %1 je
+registrovaná na Hedgewars.org
+ProsÃm, zadej své heslo
+nebo si v konfiguraci vyber jinou pÅ™ezdÃvku:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">PÅ™ezdÃvka</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -258,7 +347,7 @@
</message>
<message>
<source>Password</source>
- <translation>Heslo</translation>
+ <translation type="obsolete">Heslo</translation>
</message>
<message>
<source>%1 *** %2 has joined the room</source>
@@ -281,20 +370,17 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Tvoje pÅ™ezdÃvka %1 je
+ <translation type="obsolete">Tvoje pÅ™ezdÃvka %1 je
registrovaná na Hedgewars.org
ProsÃm, zadej své heslo
nebo si v konfiguraci vyber jinou pÅ™ezdÃvku:</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">PÅ™ezdÃvka</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">PÅ™ezdÃvka</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -344,7 +430,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Zrušit</translation>
+ <translation type="obsolete">Zrušit</translation>
</message>
</context>
<context>
@@ -469,6 +555,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -947,7 +1040,7 @@
</message>
<message>
<source>State:</source>
- <translation>Stav:</translation>
+ <translation type="obsolete">Stav:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1142,7 +1235,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Výcvikový mód (ProcviÄ si schopnosti v Å™adÄ› tréningových misÃ). VE VÃVOJI</translation>
+ <translation type="obsolete">Výcvikový mód (ProcviÄ si schopnosti v Å™adÄ› tréningových misÃ). VE VÃVOJI</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1154,7 +1247,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation type="unfinished">Mód taženà (...). VE VÃVOJI</translation>
+ <translation type="obsolete">Mód taženà (...). VE VÃVOJI</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1437,7 +1549,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Tento program je poskytovaný pod GNU General Public licencÃ</translation>
+ <translation type="obsolete">Tento program je poskytovaný pod GNU General Public licencÃ</translation>
</message>
<message>
<source>Developers:</source>
@@ -1608,10 +1720,6 @@
<translation type="unfinished">Duálnà vykreslovánÃ</translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1627,6 +1735,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_de.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Wenn diese Option aktiviert ist, wird durch Auswählen eines Spielprofils auch automatisch Waffen ausgewählt</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation>Spieloptionen</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 wurde aus deiner Ignorierliste entfernt</translation>
+ <translation type="obsolete">%1 *** %2 wurde aus deiner Ignorierliste entfernt</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 wurde in deine Ignorierliste aufgenommen</translation>
+ <translation type="obsolete">%1 *** %2 wurde in deine Ignorierliste aufgenommen</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 wurde aus deiner Freundesliste entfernt</translation>
+ <translation type="obsolete">%1 *** %2 wurde aus deiner Freundesliste entfernt</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 wurde in deine Freundesliste aufgenommen</translation>
+ <translation type="obsolete">%1 *** %2 wurde in deine Freundesliste aufgenommen</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation>%1 wurde aus deiner Ignorierliste entfernt</translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation>%1 wurde in deine Ignorierliste aufgenommen</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation>%1 wurde aus deiner Freundesliste entfernt</translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation>%1 wurde in deine Freundesliste aufgenommen</translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation>Style-Sheet aus %1 importiert</translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation>Gib %1 ein wenn du das jetzige Style-Sheet in Zukunft weiterverwenden willst, gib %2 ein um es zurückzusetzen!</translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation>Konnte %1 nicht lesen</translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation>Style-Sheet verworfen</translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation>Style-Sheet wurde nach %1 gesichert</translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation>Style-Sheet konnte nich nach %1 gesichert werden</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation>%1 ist kein gültiger Befehl!</translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation>%1 wird rausgeworfen ...</translation>
</message>
</context>
<context>
@@ -131,6 +183,48 @@
<source>Demo name:</source>
<translation>Demo-Name:</translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation>Spiel abgebrochen</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>Passwort</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation>Dein Spitzname '%1' wurde
+auf Hedgewars.org registriert.
+
+Bitte gib dein Passwort ein oder
+wähle einen anderen Spitznamen
+in den Spieloptionen:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation>Kein Passwort</translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation>Spitzname</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation>Jemand verwendet
+deinen Spiznamen %1
+bereits auf dem Server.
+Bitte wähle einen anderen Spitznamen:</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation>Kein Spitznahme angegeben.</translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -261,7 +355,7 @@
</message>
<message>
<source>Password</source>
- <translation>Passwort</translation>
+ <translation type="obsolete">Passwort</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -295,7 +389,7 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Dein Spitzname '%1' wurde
+ <translation type="obsolete">Dein Spitzname '%1' wurde
auf Hedgewars.org registriert.
Bitte gib dein Passwort ein oder
@@ -303,18 +397,22 @@
</message>
<message>
<source>Nickname</source>
- <translation>Spitzname</translation>
+ <translation type="obsolete">Spitzname</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>Jemand verwendet
+ <translation type="obsolete">Jemand verwendet
deinen Spiznamen %1
bereits auf dem Server.
Bitte wähle einen anderen Spitznamen:</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation>Benutzer ist gegangen</translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -370,7 +468,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>Abbrechen</translation>
+ <translation type="obsolete">Abbrechen</translation>
</message>
</context>
<context>
@@ -503,6 +601,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation>Im Spiel...</translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -1011,7 +1116,7 @@
</message>
<message>
<source>State:</source>
- <translation>Status:</translation>
+ <translation type="obsolete">Status:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1205,7 +1310,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Trainingsmodus (Verbessere dein Können in verschiedenen Trainingsmissionen). IN ENTWICKLUNG</translation>
+ <translation type="obsolete">Trainingsmodus (Verbessere dein Können in verschiedenen Trainingsmissionen). IN ENTWICKLUNG</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1217,7 +1322,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Kampagnenmodus (...) IN ENTWICKLUNG</translation>
+ <translation type="obsolete">Kampagnenmodus (...) IN ENTWICKLUNG</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation>Trainingsmodus (Verbessere deine Fähigkeiten in verschiedenen Trainingsmissionen)</translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation>Keine Beschreibung verfügbar</translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation>Wähle eine Mission!</translation>
</message>
</context>
<context>
@@ -1500,7 +1624,7 @@
<name>QLabel</name>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Dieses Programm ist unter der GNU General Public License veröffentlicht</translation>
+ <translation type="obsolete">Dieses Programm ist unter der GNU General Public License veröffentlicht</translation>
</message>
<message>
<source>Developers:</source>
@@ -1678,7 +1802,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>Spieloptionen</translation>
+ <translation type="obsolete">Spieloptionen</translation>
</message>
<message>
<source>Style</source>
@@ -1696,6 +1820,10 @@
<source>% Get Away Time</source>
<translation>% Rückzugszeit</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation>Dieses Spiel wird unter den Bedingungen der GNU General Public License v2 verbreitet</translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_en.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_en.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 has been removed from your ignore list</translation>
+ <translation type="obsolete">%1 *** %2 has been removed from your ignore list</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 has been added to your ignore list</translation>
+ <translation type="obsolete">%1 *** %2 has been added to your ignore list</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 has been removed from your friends list</translation>
+ <translation type="obsolete">%1 *** %2 has been removed from your friends list</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 has been added to your friends list</translation>
+ <translation type="obsolete">%1 *** %2 has been added to your friends list</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -131,6 +183,43 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Password</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Nickname</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -257,7 +346,7 @@
</message>
<message>
<source>Password</source>
- <translation>Password</translation>
+ <translation type="obsolete">Password</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -290,20 +379,17 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Your nickname %1 is
+ <translation type="obsolete">Your nickname %1 is
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">Nickname</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">Nickname</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -361,7 +447,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Cancel</translation>
+ <translation type="obsolete">Cancel</translation>
</message>
</context>
<context>
@@ -490,6 +576,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -972,10 +1065,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
@@ -1182,7 +1271,18 @@
<translation>Load (Load a previously saved game)</translation>
</message>
<message>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1478,7 +1578,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>This program is distributed under the GNU General Public License</translation>
+ <translation type="obsolete">This program is distributed under the GNU General Public License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1637,10 +1737,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1656,6 +1752,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_es.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_es.ts Sat Nov 12 17:06:49 2011 +0100
@@ -67,24 +67,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Cuando esta opción esté activada escoger un modo de juego escogerá el set de armas correspondiente</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished">Opciones de juego</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 ha sido eliminado de tu lista de ignorados</translation>
+ <translation type="obsolete">%1 *** %2 ha sido eliminado de tu lista de ignorados</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 has sido añadido a tu lista de ignorados</translation>
+ <translation type="obsolete">%1 *** %2 has sido añadido a tu lista de ignorados</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 ha sido eliminado de tu lista de amigos</translation>
+ <translation type="obsolete">%1 *** %2 ha sido eliminado de tu lista de amigos</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 ha sido añadido a tu lista de amigos</translation>
+ <translation type="obsolete">%1 *** %2 ha sido añadido a tu lista de amigos</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -135,6 +187,46 @@
<source>Demo name:</source>
<translation>Nombre de la demo:</translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Contraseña</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">El nick %1 ya está registrado
+en Hedgewars.org. Por favor,
+introduce ahora tu clave de acceso
+o elige otro nick en las preferencias del juego:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Nick</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished">Ya hay alguien conectado
+como %1 en estos momentos
+en el servidor.
+Por favor, introduce otro nick:</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -265,7 +357,7 @@
</message>
<message>
<source>Password</source>
- <translation>Contraseña</translation>
+ <translation type="obsolete">Contraseña</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -298,25 +390,29 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>El nick %1 ya está registrado
+ <translation type="obsolete">El nick %1 ya está registrado
en Hedgewars.org. Por favor,
introduce ahora tu clave de acceso
o elige otro nick en las preferencias del juego:</translation>
</message>
<message>
<source>Nickname</source>
- <translation>Nick</translation>
+ <translation type="obsolete">Nick</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>Ya hay alguien conectado
+ <translation type="obsolete">Ya hay alguien conectado
como %1 en estos momentos
en el servidor.
Por favor, introduce otro nick:</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -372,7 +468,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>Cancelar</translation>
+ <translation type="obsolete">Cancelar</translation>
</message>
</context>
<context>
@@ -509,6 +605,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -1017,7 +1120,7 @@
</message>
<message>
<source>State:</source>
- <translation>Estado:</translation>
+ <translation type="obsolete">Estado:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1215,7 +1318,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Entrenamiento (Practica tus habilidades en diversas misiones de entrenamiento). EN DESARROLLO</translation>
+ <translation type="obsolete">Entrenamiento (Practica tus habilidades en diversas misiones de entrenamiento). EN DESARROLLO</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1227,7 +1330,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Campaña (...) EN DESARROLLO</translation>
+ <translation type="obsolete">Campaña (...) EN DESARROLLO</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1542,7 +1664,7 @@
<name>QLabel</name>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Este programa está distribuido bajo la licencia GNU General Public License</translation>
+ <translation type="obsolete">Este programa está distribuido bajo la licencia GNU General Public License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1731,7 +1853,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>Opciones de juego</translation>
+ <translation type="obsolete">Opciones de juego</translation>
</message>
<message>
<source>Style</source>
@@ -1749,6 +1871,10 @@
<source>% Get Away Time</source>
<translation>% duración de retirada</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_fi.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 on poistanut sinut huomiotta jättö-listaltaan</translation>
+ <translation type="obsolete">%1 *** %2 on poistanut sinut huomiotta jättö-listaltaan</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 on lisännyt sinut huomiotta jättö-listalleen</translation>
+ <translation type="obsolete">%1 *** %2 on lisännyt sinut huomiotta jättö-listalleen</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 on poistanut sinut kaverilistaltaan</translation>
+ <translation type="obsolete">%1 *** %2 on poistanut sinut kaverilistaltaan</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 on lisännyt sinut kaverilistalleen</translation>
+ <translation type="obsolete">%1 *** %2 on lisännyt sinut kaverilistalleen</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -131,6 +183,43 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Salasana</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Nimimerkkisi %1 on
+rekisteröity Hedgewars.org-sivustolla
+Ole hyvä ja syötä salasanasi
+tai aseta eri nimimerkki asetuksissa:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Nimimerkki</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -257,7 +346,7 @@
</message>
<message>
<source>Password</source>
- <translation>Salasana</translation>
+ <translation type="obsolete">Salasana</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -290,20 +379,17 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Nimimerkkisi %1 on
+ <translation type="obsolete">Nimimerkkisi %1 on
rekisteröity Hedgewars.org-sivustolla
Ole hyvä ja syötä salasanasi
tai aseta eri nimimerkki asetuksissa:</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">Nimimerkki</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">Nimimerkki</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -361,7 +447,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Peruuta</translation>
+ <translation type="obsolete">Peruuta</translation>
</message>
</context>
<context>
@@ -494,6 +580,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -1002,7 +1095,7 @@
</message>
<message>
<source>State:</source>
- <translation>Tila:</translation>
+ <translation type="obsolete">Tila:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1200,7 +1293,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Harjoittelu (Harjoita taitojasi harjoitustasoissa). KEHITYKSEN ALLA</translation>
+ <translation type="obsolete">Harjoittelu (Harjoita taitojasi harjoitustasoissa). KEHITYKSEN ALLA</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1212,7 +1305,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Kampanja-tila (...). KEHITYS KESKEN</translation>
+ <translation type="obsolete">Kampanja-tila (...). KEHITYS KESKEN</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1535,7 +1647,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Tätä ohjelmaa levitetään GNU General Public Licence-lisensisn alla</translation>
+ <translation type="obsolete">Tätä ohjelmaa levitetään GNU General Public Licence-lisensisn alla</translation>
</message>
<message>
<source>Developers:</source>
@@ -1694,10 +1806,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1713,6 +1821,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_fr.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Une fois cette option activée, choisir les paramètres de jeu sélectionne automatiquement les armes correspondantes</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 a été enlevé de votre liste de personnes ignorées</translation>
+ <translation type="obsolete">%1 *** %2 a été enlevé de votre liste de personnes ignorées</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 a été ajouté dans votre liste de personnes ignorées</translation>
+ <translation type="obsolete">%1 *** %2 a été ajouté dans votre liste de personnes ignorées</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 a été enlevé à votre liste d'amis</translation>
+ <translation type="obsolete">%1 *** %2 a été enlevé à votre liste d'amis</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 a été ajouté à votre liste d'amis</translation>
+ <translation type="obsolete">%1 *** %2 a été ajouté à votre liste d'amis</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -131,6 +183,43 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Mot de passe</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Votre pseudo %1 est
+enregistré sur Hedgewars.org
+Veuillez fournir votre mot de passe
+ou choisir un nouveau pseudo :</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Pseudo</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -257,7 +346,7 @@
</message>
<message>
<source>Password</source>
- <translation>Mot de passe</translation>
+ <translation type="obsolete">Mot de passe</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -290,20 +379,17 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Votre pseudo %1 est
+ <translation type="obsolete">Votre pseudo %1 est
enregistré sur Hedgewars.org
Veuillez fournir votre mot de passe
ou choisir un nouveau pseudo :</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">Pseudo</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">Pseudo</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -361,7 +447,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Annuler</translation>
+ <translation type="obsolete">Annuler</translation>
</message>
</context>
<context>
@@ -494,6 +580,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -985,7 +1078,7 @@
</message>
<message>
<source>State:</source>
- <translation>État : </translation>
+ <translation type="obsolete">État : </translation>
</message>
<message>
<source>Rules:</source>
@@ -1182,7 +1275,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Missions d'entraînement (Pratiquez vos talents dans une série de missions d'entraînement). EN DÉVELOPPEMENT</translation>
+ <translation type="obsolete">Missions d'entraînement (Pratiquez vos talents dans une série de missions d'entraînement). EN DÉVELOPPEMENT</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1194,7 +1287,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Mode Campagne (...). EN DÉVELOPPEMENT</translation>
+ <translation type="obsolete">Mode Campagne (...). EN DÉVELOPPEMENT</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1481,7 +1593,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Ce programme est distribué sous la licence GNU GPL (General Public License)</translation>
+ <translation type="obsolete">Ce programme est distribué sous la licence GNU GPL (General Public License)</translation>
</message>
<message>
<source>Resolution</source>
@@ -1652,10 +1764,6 @@
<translation type="unfinished">Rendu stéréo</translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1671,6 +1779,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_hu.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts Sat Nov 12 17:06:49 2011 +0100
@@ -62,24 +62,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 eltávolÃtva a figyelmen kÃvül hagyottak listájáról</translation>
+ <translation type="obsolete">%1 *** %2 eltávolÃtva a figyelmen kÃvül hagyottak listájáról</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 hozzáadva a figyelmen kÃvül hagyottak listájához</translation>
+ <translation type="obsolete">%1 *** %2 hozzáadva a figyelmen kÃvül hagyottak listájához</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 eltávolÃtva a barátlistáról</translation>
+ <translation type="obsolete">%1 *** %2 eltávolÃtva a barátlistáról</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 hozzáadva a barátlistádhoz</translation>
+ <translation type="obsolete">%1 *** %2 hozzáadva a barátlistádhoz</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -130,6 +182,40 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">JElszó</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Becenév</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -256,7 +342,7 @@
</message>
<message>
<source>Password</source>
- <translation>JElszó</translation>
+ <translation type="obsolete">JElszó</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -285,21 +371,11 @@
<translation>%1 *** %2 távozott</translation>
</message>
<message>
- <source>Your nickname %1 is
-registered on Hedgewars.org
-Please provide your password below
-or pick another nickname in game config:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Nickname</source>
- <translation type="unfinished">Becenév</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">Becenév</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -357,7 +433,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Mégse</translation>
+ <translation type="obsolete">Mégse</translation>
</message>
</context>
<context>
@@ -478,6 +554,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -958,10 +1041,6 @@
<translation>Véletlen labirintus</translation>
</message>
<message>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
@@ -1155,7 +1234,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Gyakorlás (fejleszd magad a gyakorlóküldetéseken keresztül). FEJLESZTÉS ALATT</translation>
+ <translation type="obsolete">Gyakorlás (fejleszd magad a gyakorlóküldetéseken keresztül). FEJLESZTÉS ALATT</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1166,7 +1245,22 @@
<translation>Betöltés (korábbi mentett állás visszatöltése)</translation>
</message>
<message>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1462,7 +1556,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Ez a program a GNU General Public License alatt terjesztett</translation>
+ <translation type="obsolete">Ez a program a GNU General Public License alatt terjesztett</translation>
</message>
<message>
<source>Developers:</source>
@@ -1627,10 +1721,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1646,6 +1736,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_it.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_it.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Quando questa opzione è attiva, la scelta di uno schema di gioco selezionerà automaticamente le armi appropriate</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished">Opzioni di gioco</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 è stato rimosso dalla tua lista ignorati</translation>
+ <translation type="obsolete">%1 *** %2 è stato rimosso dalla tua lista ignorati</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 è stato aggiunto alla tua lista ignorati</translation>
+ <translation type="obsolete">%1 *** %2 è stato aggiunto alla tua lista ignorati</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 è stato rimosso dalla tua lista amici</translation>
+ <translation type="obsolete">%1 *** %2 è stato rimosso dalla tua lista amici</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 è stato aggiunto alla tua lista amici</translation>
+ <translation type="obsolete">%1 *** %2 è stato aggiunto alla tua lista amici</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -131,6 +183,46 @@
<source>Demo name:</source>
<translation>Nome della demo:</translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Password</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Il nickname %1 è
+registrato su Hedgewars.org
+Per favore inserisci la tua password
+o scegli un altro nickname:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Nickname</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished">Qualcun altro sta usando
+ il tuo nickname %1
+sul server.
+Per favore scelto un altro nickname:</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -261,7 +353,7 @@
</message>
<message>
<source>Password</source>
- <translation>Password</translation>
+ <translation type="obsolete">Password</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -294,25 +386,29 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Il nickname %1 è
+ <translation type="obsolete">Il nickname %1 è
registrato su Hedgewars.org
Per favore inserisci la tua password
o scegli un altro nickname:</translation>
</message>
<message>
<source>Nickname</source>
- <translation>Nickname</translation>
+ <translation type="obsolete">Nickname</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>Qualcun altro sta usando
+ <translation type="obsolete">Qualcun altro sta usando
il tuo nickname %1
sul server.
Per favore scelto un altro nickname:</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -368,7 +464,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>Annulla</translation>
+ <translation type="obsolete">Annulla</translation>
</message>
</context>
<context>
@@ -501,6 +597,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -989,7 +1092,7 @@
</message>
<message>
<source>State:</source>
- <translation>Stato:</translation>
+ <translation type="obsolete">Stato:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1187,7 +1290,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Modalità Allenamento (Allena le tue abilità in una gamma di missioni). IN SVILUPPO</translation>
+ <translation type="obsolete">Modalità Allenamento (Allena le tue abilità in una gamma di missioni). IN SVILUPPO</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1199,7 +1302,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Modalità Campagna. IN SVILUPPO</translation>
+ <translation type="obsolete">Modalità Campagna. IN SVILUPPO</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1392,7 +1514,7 @@
</message>
<message>
<source>Top-Bottom</source>
- <translation>Dall'alto in basso</translation>
+ <translation>Dall'alto in basso</translation>
</message>
<message>
<source>Wiggle</source>
@@ -1490,7 +1612,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Questo programma è distribuito sotto licenza GNU General Public License</translation>
+ <translation type="obsolete">Questo programma è distribuito sotto licenza GNU General Public License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1664,7 +1786,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>Opzioni di gioco</translation>
+ <translation type="obsolete">Opzioni di gioco</translation>
</message>
<message>
<source>Style</source>
@@ -1682,6 +1804,10 @@
<source>% Get Away Time</source>
<translation>% tempo regalo</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_ja.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts Sat Nov 12 17:06:49 2011 +0100
@@ -62,24 +62,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>ã“ã®ã‚ªãƒ—ションを有効ã«ã—ã¦ã€ã—ãã¿ã‚’é¸ã¶ã¨æ¦å™¨ã‚’自動é¸æŠž</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 ã•ã‚“ã¯ç„¡è¦–リストã‹ã‚‰å‰Šé™¤ã•ã‚Œã¦ã„ã¾ã™</translation>
+ <translation type="obsolete">%1 *** %2 ã•ã‚“ã¯ç„¡è¦–リストã‹ã‚‰å‰Šé™¤ã•ã‚Œã¦ã„ã¾ã™</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 ã•ã‚“ã¯ç„¡è¦–リストã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™</translation>
+ <translation type="obsolete">%1 *** %2 ã•ã‚“ã¯ç„¡è¦–リストã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 ã•ã‚“ã¯å‹é”リストã‹ã‚‰å‰Šé™¤ã•ã‚Œã¦ã„ã¾ã™</translation>
+ <translation type="obsolete">%1 *** %2 ã•ã‚“ã¯å‹é”リストã‹ã‚‰å‰Šé™¤ã•ã‚Œã¦ã„ã¾ã™</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 ã•ã‚“ã¯å‹é”リストã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™</translation>
+ <translation type="obsolete">%1 *** %2 ã•ã‚“ã¯å‹é”リストã«è¿½åŠ ã•ã‚Œã¦ã„ã¾ã™</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -130,6 +182,44 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">パスワード</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">ã‚ãªãŸã®ã€Œ%1ã€ã¨ã„ã†ãƒ‹ãƒƒã‚¯åã¯
+Hedgewars.orgã«ç™»éŒ²ã•ã‚Œã¾ã—ãŸã€‚
+下ã«ãƒ‘スワードを入力ã—ã¦ã€ã¾ãŸã¯
+ゲーム構æˆã«åˆ¥ã®åã‚’é¸æŠžã—ã¦ãã ã•ã„:
+</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -256,7 +346,7 @@
</message>
<message>
<source>Password</source>
- <translation>パスワード</translation>
+ <translation type="obsolete">パスワード</translation>
</message>
<message>
<source>%1 *** %2 has joined the room</source>
@@ -279,21 +369,14 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>ã‚ãªãŸã®ã€Œ%1ã€ã¨ã„ã†ãƒ‹ãƒƒã‚¯åã¯
+ <translation type="obsolete">ã‚ãªãŸã®ã€Œ%1ã€ã¨ã„ã†ãƒ‹ãƒƒã‚¯åã¯
Hedgewars.orgã«ç™»éŒ²ã•ã‚Œã¾ã—ãŸã€‚
下ã«ãƒ‘スワードを入力ã—ã¦ã€ã¾ãŸã¯
ゲーム構æˆã«åˆ¥ã®åã‚’é¸æŠžã—ã¦ãã ã•ã„:
</translation>
</message>
<message>
- <source>Nickname</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -343,7 +426,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">ã‚ャンセル</translation>
+ <translation type="obsolete">ã‚ャンセル</translation>
</message>
</context>
<context>
@@ -452,6 +535,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -918,10 +1008,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
@@ -1107,7 +1193,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>訓練モード (訓練任務ã§ä¸Šé”) 開発ä¸</translation>
+ <translation type="obsolete">訓練モード (訓練任務ã§ä¸Šé”) 開発ä¸</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1118,7 +1204,22 @@
<translation>ãƒãƒ¼ãƒ‰ (ãã®å‰ä¿å˜ã—ãŸã‚²ãƒ¼ãƒ ã‚’ã‚„ã‚‹)</translation>
</message>
<message>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1410,7 +1511,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>This program is distributed under the GNU General Public License</translation>
+ <translation type="obsolete">This program is distributed under the GNU General Public License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1569,10 +1670,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1588,6 +1685,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_ko.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ko.ts Sat Nov 12 17:06:49 2011 +0100
@@ -62,23 +62,59 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
- <source>%1 *** %2 has been removed from your ignore list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 *** %2 has been added to your ignore list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 *** %2 has been removed from your friends list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 *** %2 has been added to your friends list</source>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -126,6 +162,40 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -251,10 +321,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Password</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>%1 *** %2 has joined the room</source>
<translation type="unfinished"></translation>
</message>
@@ -271,21 +337,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Your nickname %1 is
-registered on Hedgewars.org
-Please provide your password below
-or pick another nickname in game config:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Nickname</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -333,10 +385,6 @@
<source>Connecting...</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>PageDrawMap</name>
@@ -440,6 +488,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -906,10 +961,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
@@ -1094,10 +1145,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Demos (Watch recorded demos)</source>
<translation type="unfinished"></translation>
</message>
@@ -1106,7 +1153,22 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1389,10 +1451,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>This program is distributed under the GNU General Public License</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Developers:</source>
<translation type="unfinished"></translation>
</message>
@@ -1549,10 +1607,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1568,6 +1622,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_lt.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_lt.ts Sat Nov 12 17:06:49 2011 +0100
@@ -4,12 +4,12 @@
<context>
<name>AmmoSchemeModel</name>
<message>
- <location filename="../../../../QTfrontend/ammoSchemeModel.cpp" line="672"/>
+ <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="672"/>
<source>new</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/ammoSchemeModel.cpp" line="678"/>
+ <location filename="../../../../QTfrontend/model/ammoSchemeModel.cpp" line="678"/>
<source>copy of</source>
<translation type="unfinished"></translation>
</message>
@@ -17,18 +17,18 @@
<context>
<name>DrawMapWidget</name>
<message>
- <location filename="../../../../QTfrontend/drawmapwidget.cpp" line="89"/>
- <location filename="../../../../QTfrontend/drawmapwidget.cpp" line="102"/>
+ <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="89"/>
+ <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="102"/>
<source>File error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/drawmapwidget.cpp" line="89"/>
+ <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="89"/>
<source>Cannot open file '%1' for writing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/drawmapwidget.cpp" line="102"/>
+ <location filename="../../../../QTfrontend/ui/widget/drawmapwidget.cpp" line="102"/>
<source>Cannot read file '%1'</source>
<translation type="unfinished"></translation>
</message>
@@ -36,12 +36,12 @@
<context>
<name>FreqSpinBox</name>
<message>
- <location filename="../../../../QTfrontend/misc.h" line="39"/>
+ <location filename="../../../../QTfrontend/ui/widget/FreqSpinBox.cpp" line="36"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/misc.h" line="41"/>
+ <location filename="../../../../QTfrontend/ui/widget/FreqSpinBox.cpp" line="38"/>
<source>Every %1 turn</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -53,27 +53,32 @@
<context>
<name>GameCFGWidget</name>
<message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="111"/>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="53"/>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="109"/>
<source>Edit schemes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="126"/>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="124"/>
<source>Edit weapons</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="134"/>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="132"/>
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="301"/>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="301"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="301"/>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="301"/>
<source>Illegal ammo scheme</source>
<translation type="unfinished"></translation>
</message>
@@ -81,80 +86,161 @@
<context>
<name>HWChatWidget</name>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="453"/>
- <source>%1 *** %2 has been removed from your ignore list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="466"/>
- <source>%1 *** %2 has been added to your ignore list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="482"/>
- <source>%1 *** %2 has been removed from your friends list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="495"/>
- <source>%1 *** %2 has been added to your friends list</source>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="714"/>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="753"/>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="767"/>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="790"/>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="803"/>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="928"/>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="929"/>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="937"/>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="945"/>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="970"/>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="973"/>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="993"/>
+ <source>%1 is not a valid command!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HWForm</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="401"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="403"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="392"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="394"/>
<source>DefaultTeam</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="728"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="910"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="489"/>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="692"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="973"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="693"/>
+ <source>Please select record from the list above</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="694"/>
+ <source>OK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="729"/>
+ <source>Password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../../QTfrontend/hwform.cpp" line="729"/>
- <source>Please select record from the list above</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="730"/>
- <source>OK</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="911"/>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="732"/>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="748"/>
+ <source>Nickname</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="748"/>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="751"/>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="974"/>
<source>Unable to start the server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1086"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1323"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1149"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1385"/>
<source>Cannot save record to file %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1275"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1337"/>
<source>Hedgewars Demo File</source>
<comment>File Types</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1276"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1338"/>
<source>Hedgewars Save File</source>
<comment>File Types</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1315"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1377"/>
<source>Demo name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1315"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1377"/>
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
@@ -162,12 +248,12 @@
<context>
<name>HWGame</name>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="318"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="313"/>
<source>en.txt</source>
<translation>lt.txt</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/game.cpp" line="336"/>
+ <location filename="../../../../QTfrontend/game.cpp" line="324"/>
<source>Cannot open demofile %1</source>
<translation type="unfinished"></translation>
</message>
@@ -175,92 +261,92 @@
<context>
<name>HWMapContainer</name>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="158"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="166"/>
<source>Map</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="161"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="169"/>
<source>Filter</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="165"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="173"/>
<source>All</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="166"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="174"/>
<source>Small</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="167"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="175"/>
<source>Medium</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="168"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="176"/>
<source>Large</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="169"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="177"/>
<source>Cavern</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="170"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="178"/>
<source>Wacky</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="175"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="183"/>
<source>Type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="179"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="187"/>
<source>Small tunnels</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="180"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="188"/>
<source>Medium tunnels</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="181"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="189"/>
<source>Large tunnels</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="182"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="190"/>
<source>Small floating islands</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="183"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="191"/>
<source>Medium floating islands</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="184"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="192"/>
<source>Large floating islands</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="194"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="202"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="236"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="244"/>
<source>Seed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="605"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="613"/>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
@@ -268,17 +354,17 @@
<context>
<name>HWNetServersModel</name>
<message>
- <location filename="../../../../QTfrontend/netserverslist.cpp" line="45"/>
+ <location filename="../../../../QTfrontend/model/netserverslist.cpp" line="45"/>
<source>Title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/netserverslist.cpp" line="46"/>
+ <location filename="../../../../QTfrontend/model/netserverslist.cpp" line="46"/>
<source>IP</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/netserverslist.cpp" line="47"/>
+ <location filename="../../../../QTfrontend/model/netserverslist.cpp" line="47"/>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
@@ -286,78 +372,57 @@
<context>
<name>HWNewNet</name>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="207"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="50"/>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="189"/>
<source>The host was not found. Please check the host name and port settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="210"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="192"/>
<source>Connection refused</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="392"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="379"/>
<source>Room destroyed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="399"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="385"/>
<source>You got kicked</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="428"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="408"/>
<source>%1 *** %2 has joined the room</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="451"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="430"/>
<source>%1 *** %2 has joined</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="464"/>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="488"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="443"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="467"/>
<source>%1 *** %2 has left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="466"/>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="490"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="445"/>
+ <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="469"/>
<source>%1 *** %2 has left (%3)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="508"/>
- <source>Password</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="508"/>
- <source>Your nickname %1 is
-registered on Hedgewars.org
-Please provide your password below
-or pick another nickname in game config:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="623"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1015"/>
<source>Quit reason: </source>
<translation type="unfinished"></translation>
</message>
- <message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="829"/>
- <source>Nickname</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="829"/>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>KB</name>
@@ -370,37 +435,37 @@
<context>
<name>PageAdmin</name>
<message>
- <location filename="../../../../QTfrontend/pageadmin.cpp" line="35"/>
+ <location filename="../../../../QTfrontend/ui/page/pageadmin.cpp" line="34"/>
<source>Fetch data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageadmin.cpp" line="40"/>
+ <location filename="../../../../QTfrontend/ui/page/pageadmin.cpp" line="38"/>
<source>Server message for latest version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageadmin.cpp" line="48"/>
+ <location filename="../../../../QTfrontend/ui/page/pageadmin.cpp" line="46"/>
<source>Server message for previous versions:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageadmin.cpp" line="56"/>
+ <location filename="../../../../QTfrontend/ui/page/pageadmin.cpp" line="54"/>
<source>Latest version protocol number:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageadmin.cpp" line="64"/>
+ <location filename="../../../../QTfrontend/ui/page/pageadmin.cpp" line="62"/>
<source>MOTD preview:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageadmin.cpp" line="75"/>
+ <location filename="../../../../QTfrontend/ui/page/pageadmin.cpp" line="71"/>
<source>Clear Accounts Cache</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageadmin.cpp" line="78"/>
+ <location filename="../../../../QTfrontend/ui/page/pageadmin.cpp" line="74"/>
<source>Set data</source>
<translation type="unfinished"></translation>
</message>
@@ -408,57 +473,52 @@
<context>
<name>PageConnecting</name>
<message>
- <location filename="../../../../QTfrontend/pageconnecting.cpp" line="30"/>
+ <location filename="../../../../QTfrontend/ui/page/pageconnecting.cpp" line="29"/>
<source>Connecting...</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <location filename="../../../../QTfrontend/pageconnecting.cpp" line="34"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>PageDrawMap</name>
<message>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="30"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="31"/>
<source>Undo</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="31"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="32"/>
<source>Clear</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="32"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="33"/>
<source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="33"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="34"/>
<source>Save</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="48"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="57"/>
<source>Load drawn map</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="48"/>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="56"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="57"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="65"/>
<source>Drawn Maps</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="48"/>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="56"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="57"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="65"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagedrawmap.cpp" line="56"/>
+ <location filename="../../../../QTfrontend/ui/page/pagedrawmap.cpp" line="65"/>
<source>Save drawn map</source>
<translation type="unfinished"></translation>
</message>
@@ -466,12 +526,12 @@
<context>
<name>PageEditTeam</name>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="43"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="45"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="44"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="46"/>
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
@@ -479,27 +539,27 @@
<context>
<name>PageGameStats</name>
<message>
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="62"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="56"/>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="76"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="70"/>
<source>Health graph</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="93"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="87"/>
<source>Ranking</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="153"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="170"/>
<source>The best shot award was won by <b>%1</b> with <b>%2</b> pts.</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="160"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="177"/>
<source>The best killer is <b>%1</b> with <b>%2</b> kills in a turn.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -508,7 +568,7 @@
</translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="166"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="183"/>
<source>A total of <b>%1</b> hedgehog(s) were killed during this round.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -517,7 +577,7 @@
</translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="227"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="244"/>
<source>(%1 kill)</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -526,7 +586,7 @@
</translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="237"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="254"/>
<source><b>%1</b> thought it's good to shoot his own hedgehogs with <b>%2</b> pts.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -535,7 +595,7 @@
</translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="244"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="261"/>
<source><b>%1</b> killed <b>%2</b> of his own hedgehogs.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -544,7 +604,7 @@
</translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pagegamestats.cpp" line="251"/>
+ <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="268"/>
<source><b>%1</b> was scared and skipped turn <b>%2</b> times.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -554,312 +614,320 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pageingame.cpp" line="29"/>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="47"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="45"/>
<source>Local Game (Play a game on a single computer)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="51"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="49"/>
<source>Network Game (Play a game across a network)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="54"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="57"/>
<source>Downloadable Content</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="65"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="104"/>
<source>Simply pick the same color as a friend to play together as a team. Each of you will still control his or her own hedgehogs but they'll win or lose together.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="66"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="105"/>
<source>Some weapons might do only low damage but they can be a lot more devastating in the right situation. Try to use the Desert Eagle to knock multiple hedgehogs into the water.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="67"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="106"/>
<source>If you're unsure what to do and don't want to waste ammo, skip one round. But don't let too much time pass as there will be Sudden Death!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="68"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="107"/>
<source>Want to save ropes? Release the rope in mid air and then shoot again. As long as you don't touch the ground you'll reuse your rope without wasting ammo!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="69"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="108"/>
<source>If you'd like to keep others from using your preferred nickname on the official server, register an account at http://www.hedgewars.org/.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="70"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="109"/>
<source>You're bored of default gameplay? Try one of the missions - they'll offer different gameplay depending on the one you picked.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="71"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="110"/>
<source>By default the game will always record the last game played as a demo. Select 'Local Game' and pick the 'Demos' button on the lower right corner to play or manage them.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="72"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="111"/>
<source>Hedgewars is Open Source and Freeware we create in our spare time. If you've got problems, ask on our forums but please don't expect 24/7 support!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="73"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="112"/>
<source>Hedgewars is Open Source and Freeware we create in our spare time. If you like it, help us with a small donation or contribute your own work!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="74"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="113"/>
<source>Hedgewars is Open Source and Freeware we create in our spare time. Share it with your family and friends as you like!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="75"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="114"/>
<source>Hedgewars is Open Source and Freeware we create in our spare time. If someone sold you the game, you should try get a refund!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="76"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="115"/>
<source>From time to time there will be official tournaments. Upcoming events will be announced at http://www.hedgewars.org/ some days in advance.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="77"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="116"/>
<source>Hedgewars is available in many languages. If the translation in your language seems to be missing or outdated, feel free to contact us!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="78"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="117"/>
<source>Hedgewars can be run on lots of different operating systems including Microsoft Windows, Mac OS X and Linux.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="79"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="118"/>
<source>Always remember you're able to set up your own games in local and network/online play. You're not restricted to the 'Simple Game' option.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="80"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="119"/>
<source>Connect one or more gamepads before starting the game to be able to assign their controls to your teams.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="81"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="120"/>
<source>Create an account on %1 to keep others from using your most favourite nickname while playing on the official server.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="82"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="121"/>
<source>While playing you should give yourself a short break at least once an hour.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="83"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="122"/>
<source>If your graphics card isn't able to provide hardware accelerated OpenGL, try to enable the low quality mode to improve performance.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="84"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="123"/>
<source>If your graphics card isn't able to provide hardware accelerated OpenGL, try to update the associated drivers.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="85"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="124"/>
<source>We're open to suggestions and constructive feedback. If you don't like something or got a great idea, let us know!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="86"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="125"/>
<source>Especially while playing online be polite and always remember there might be some minors playing with or against you as well!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="87"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="126"/>
<source>Special game modes such as 'Vampirism' or 'Karma' allow you to develop completely new tactics. Try them in a custom game!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="88"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="127"/>
<source>The Windows version of Hedgewars supports Xfire. Make sure to add Hedgewars to its game list so your friends can see you playing.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="89"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="128"/>
<source>You should never install Hedgewars on computers you don't own (school, university, work, etc.). Please ask the responsible person instead!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="90"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="129"/>
<source>Hedgewars can be perfect for short games during breaks. Just ensure you don't add too many hedgehogs or use an huge map. Reducing time and health might help as well.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="91"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="130"/>
<source>No hedgehogs were harmed in making this game.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="92"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="131"/>
<source>There are three different jumps available. Tap [high jump] twice to do a very high/backwards jump.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="93"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="132"/>
<source>Afraid of falling off a cliff? Hold down [precise] to turn [left] or [right] without actually moving.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="94"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="133"/>
<source>Some weapons require special strategies or just lots of training, so don't give up on a particular tool if you miss an enemy once.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="95"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="134"/>
<source>Most weapons won't work once they touch the water. The Homing Bee as well as the Cake are exceptions to this.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="96"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="135"/>
<source>The Old Limbuger only causes a small explosion. However the wind affected smelly cloud can poison lots of hogs at once.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="97"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="136"/>
<source>The Piano Strike is the most damaging air strike. You'll lose the hedgehog performing it, so there's a huge downside as well.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="98"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="137"/>
<source>The Homing Bee can be tricky to use. Its turn radius depends on its velocity, so try to not use full power.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="99"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="138"/>
<source>Sticky Mines are a perfect tool to create small chain reactions knocking enemy hedgehogs into dire situations ... or water.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="100"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="139"/>
<source>The Hammer is most effective when used on bridges or girders. Hit hogs will just break through the ground.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="140"/>
<source>If you're stuck behind an enemy hedgehog, use the Hammer to free yourself without getting damaged by an explosion.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="102"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="141"/>
<source>The Cake's maximum walking distance depends on the ground it has to pass. Use [attack] to detonate it early.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="103"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="142"/>
<source>The Flame Thrower is a weapon but it can be used for tunnel digging as well.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="104"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="143"/>
<source>Use the Molotov or Flame Thrower to temporary keep hedgehogs from passing terrain such as tunnels or platforms.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="105"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="144"/>
<source>Want to know who's behind the game? Click on the Hedgewars logo in the main menu to see the credits.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="106"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="145"/>
<source>Like Hedgewars? Become a fan on %1 or follow us on %2!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="107"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="146"/>
<source>Feel free to draw your own graves, hats, flags or even maps and themes! But note that you'll have to share them somewhere to use them online.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="108"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="147"/>
<source>Really want to wear a specific hat? Donate to us and receive an exclusive hat of your choice!</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="112"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="151"/>
<source>Keep your video card drivers up to date to avoid issues playing the game.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="113"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="152"/>
<source>You're able to associate Hedgewars related files (savegames and demo recordings) with the game to launch them right from your favorite file or internet browser.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="115"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="154"/>
<source>You can find your Hedgewars configuration files under "My Documents\Hedgewars". Create backups or take the files with you, but don't edit them by hand.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="117"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="156"/>
<source>You can find your Hedgewars configuration files under "Library/Application Support/Hedgewars" in your home directory. Create backups or take the files with you, but don't edit them by hand.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="119"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="158"/>
<source>You can find your Hedgewars configuration files under ".hedgewars" in your home directory. Create backups or take the files with you, but don't edit them by hand.</source>
<comment>Tips</comment>
<translation type="unfinished"></translation>
@@ -868,7 +936,7 @@
<context>
<name>PageMultiplayer</name>
<message>
- <location filename="../../../../QTfrontend/pagemultiplayer.cpp" line="46"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="55"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -876,12 +944,12 @@
<context>
<name>PageNet</name>
<message>
- <location filename="../../../../QTfrontend/pagenet.cpp" line="94"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="111"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenet.cpp" line="94"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="111"/>
<source>Please select server from the list above</source>
<translation type="unfinished"></translation>
</message>
@@ -889,22 +957,22 @@
<context>
<name>PageNetGame</name>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="79"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="84"/>
<source>Control</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="112"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="156"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="113"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="157"/>
<source>Please enter room name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="114"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="158"/>
<source>OK</source>
<translation type="unfinished"></translation>
</message>
@@ -912,12 +980,12 @@
<context>
<name>PageNetType</name>
<message>
- <location filename="../../../../QTfrontend/pagenettype.cpp" line="34"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenettype.cpp" line="35"/>
<source>LAN game</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenettype.cpp" line="35"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenettype.cpp" line="36"/>
<source>Official server</source>
<translation type="unfinished"></translation>
</message>
@@ -925,52 +993,52 @@
<context>
<name>PageOptions</name>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="75"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="76"/>
<source>New team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="82"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="84"/>
<source>Edit team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="89"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="92"/>
<source>Delete team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="96"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="100"/>
<source>You can't edit teams from team selection. Go back to main menu to add, edit or delete teams.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="122"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="126"/>
<source>New scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="129"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="133"/>
<source>Edit scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="136"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="140"/>
<source>Delete scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="150"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="154"/>
<source>New weapon set</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="157"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="161"/>
<source>Edit weapon set</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="164"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="168"/>
<source>Delete weapon set</source>
<translation type="unfinished"></translation>
</message>
@@ -978,42 +1046,42 @@
<context>
<name>PagePlayDemo</name>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="103"/>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="126"/>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="138"/>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="149"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="111"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="134"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="146"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="157"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="104"/>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="139"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="112"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="147"/>
<source>Please select record from the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="105"/>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="140"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="113"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="148"/>
<source>OK</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="114"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="122"/>
<source>Rename dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="114"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="122"/>
<source>Enter new file name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="126"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="134"/>
<source>Cannot rename to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="149"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="157"/>
<source>Cannot delete file</source>
<translation type="unfinished"></translation>
</message>
@@ -1021,69 +1089,64 @@
<context>
<name>PageRoomsList</name>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="40"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="40"/>
<source>Room Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="60"/>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="70"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="67"/>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="82"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="75"/>
<source>Weapons:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="94"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="83"/>
<source>Search:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="106"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="95"/>
<source>Create</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="107"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="96"/>
<source>Join</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="108"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="97"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="109"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="98"/>
<source>Clear</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="120"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="123"/>
<source>Admin features</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="230"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="283"/>
<source>This game is in lobby.
You may join and start playing once the game starts.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="235"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="288"/>
<source>This game is in progress.
You may join and spectate now but you'll have to wait for the game to end to start playing.</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="243"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="296"/>
<source>There are %1 clients connected to this room.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -1092,7 +1155,7 @@
</translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="249"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="302"/>
<source>There are %1 teams participating in this room.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -1101,70 +1164,70 @@
</translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="257"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="310"/>
<source>%1 is the host. He may adjust settings and start the game.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="262"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="315"/>
<source>Random Map</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="268"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="321"/>
<source>Random Maze</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="292"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="345"/>
<source>Games may be played on precreated or randomized maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="297"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="350"/>
<source>The Game Scheme defines general options and preferences like Round Time, Sudden Death or Vampirism.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="302"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="355"/>
<source>The Weapon Scheme defines available weapons and their ammunition count.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="336"/>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="347"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="389"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="400"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="337"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="390"/>
<source>Please enter room name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="338"/>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="349"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="391"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="402"/>
<source>OK</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="348"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="401"/>
<source>Please select room from the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="384"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="437"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="385"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="438"/>
<source>The game you are trying to join has started.
Do you still want to join the room?</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="394"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="447"/>
<source>%1 players online</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -1176,152 +1239,152 @@
<context>
<name>PageScheme</name>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="69"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="71"/>
<source>Defend your fort and destroy the opponents, two team colours max!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="73"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="75"/>
<source>Teams will start on opposite sides of the terrain, two team colours max!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="77"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="79"/>
<source>Land can not be destroyed!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="81"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="83"/>
<source>Add an indestructible border around the terrain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="85"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="87"/>
<source>Lower gravity</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="89"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="91"/>
<source>Assisted aiming with laser sight</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="93"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="95"/>
<source>All hogs have a personal forcefield</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="97"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="99"/>
<source>All (living) hedgehogs are fully restored at the end of turn</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="103"/>
<source>Gain 80% of the damage you do back in health</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="105"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="107"/>
<source>Share your opponents pain, share their damage</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="109"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="111"/>
<source>Your hogs are unable to move, put your artillery skills to the test</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="113"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="115"/>
<source>Order of play is random instead of in room order.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="117"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="119"/>
<source>Play with a King. If he dies, your side dies.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="121"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="123"/>
<source>Take turns placing your hedgehogs before the start of play.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="125"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="127"/>
<source>Ammo is shared between all teams that share a colour.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="129"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="131"/>
<source>Disable girders when generating random maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="133"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="135"/>
<source>Disable land objects when generating random maps.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="137"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="139"/>
<source>AI respawns on death.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="141"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="143"/>
<source>Attacking does not end your turn.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="145"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="147"/>
<source>Weapons are reset to starting values each turn.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="149"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="151"/>
<source>Each hedgehog has its own ammo. It does not share with the team.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="153"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="155"/>
<source>You will not have to worry about wind anymore.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="157"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="159"/>
<source>Wind will affect almost everything.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="161"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="163"/>
<source>Teams in each clan take successive turns sharing their turn time.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="165"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="167"/>
<source>Add an indestructible border along the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="323"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="325"/>
<source>Random</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="324"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="326"/>
<source>Seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="394"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="402"/>
<source>Copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="395"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="403"/>
<source>New</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="396"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="404"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
@@ -1329,22 +1392,22 @@
<context>
<name>PageSelectWeapon</name>
<message>
- <location filename="../../../../QTfrontend/pageselectweapon.cpp" line="36"/>
+ <location filename="../../../../QTfrontend/ui/page/pageselectweapon.cpp" line="47"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageselectweapon.cpp" line="37"/>
+ <location filename="../../../../QTfrontend/ui/page/pageselectweapon.cpp" line="46"/>
<source>New</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageselectweapon.cpp" line="38"/>
+ <location filename="../../../../QTfrontend/ui/page/pageselectweapon.cpp" line="50"/>
<source>Copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageselectweapon.cpp" line="39"/>
+ <location filename="../../../../QTfrontend/ui/page/pageselectweapon.cpp" line="51"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
@@ -1352,97 +1415,110 @@
<context>
<name>PageSinglePlayer</name>
<message>
- <location filename="../../../../QTfrontend/pagesingleplayer.cpp" line="40"/>
+ <location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="39"/>
<source>Simple Game (a quick game against the computer, settings are chosen for you)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagesingleplayer.cpp" line="43"/>
+ <location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="42"/>
<source>Multiplayer (play a hotseat game against your friends, or AI teams)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagesingleplayer.cpp" line="48"/>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/pagesingleplayer.cpp" line="52"/>
- <source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/pagesingleplayer.cpp" line="58"/>
+ <location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="47"/>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="51"/>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="62"/>
<source>Demos (Watch recorded demos)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagesingleplayer.cpp" line="61"/>
+ <location filename="../../../../QTfrontend/ui/page/pagesingleplayer.cpp" line="65"/>
<source>Load (Load a previously saved game)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>PageTraining</name>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="209"/>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="217"/>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QAction</name>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="168"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="299"/>
<source>Info</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="171"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="303"/>
<source>Kick</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="174"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="307"/>
<source>Ban</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="177"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="311"/>
<source>Follow</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="180"/>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="526"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="315"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="843"/>
<source>Ignore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="183"/>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="537"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="319"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="854"/>
<source>Add friend</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="521"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="838"/>
<source>Unignore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/chatwidget.cpp" line="532"/>
+ <location filename="../../../../QTfrontend/ui/widget/chatwidget.cpp" line="849"/>
<source>Remove friend</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="68"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="79"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="81"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="107"/>
<source>Restrict Joins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="83"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="109"/>
<source>Restrict Team Additions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="91"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="87"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -1450,62 +1526,62 @@
<context>
<name>QCheckBox</name>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="171"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="175"/>
<source>Show ammo menu tooltips</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="235"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="239"/>
<source>Alternative damage show</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="239"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="243"/>
<source>Append date and time to record file name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="250"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="254"/>
<source>Check for updates at startup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="270"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="274"/>
<source>Frontend fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="274"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="278"/>
<source>Frontend effects</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="278"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="282"/>
<source>Enable frontend sounds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="282"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="286"/>
<source>Enable frontend music</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="301"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="304"/>
<source>Fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="362"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="363"/>
<source>Enable sound</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="366"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="367"/>
<source>Enable music</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="384"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="385"/>
<source>Show FPS</source>
<translation type="unfinished"></translation>
</message>
@@ -1513,142 +1589,140 @@
<context>
<name>QComboBox</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1236"/>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1245"/>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="142"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1307"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="150"/>
<source>Mission</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="74"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="74"/>
<source>generated map...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="78"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="78"/>
<source>generated maze...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="80"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="80"/>
<source>hand drawn map...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="130"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="114"/>
<source>Human</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="134"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="118"/>
<source>Level</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="263"/>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="297"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="324"/>
<source>Community</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="214"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="218"/>
<source>(System default)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="324"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="325"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="325"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="326"/>
<source>Red/Cyan</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="326"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="327"/>
<source>Cyan/Red</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="327"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="328"/>
<source>Red/Blue</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="328"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="329"/>
<source>Blue/Red</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="329"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="330"/>
<source>Red/Green</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="330"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="331"/>
<source>Green/Red</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="331"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="332"/>
<source>Side-by-side</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="332"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="333"/>
<source>Top-Bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="333"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="334"/>
<source>Wiggle</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="334"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="335"/>
<source>Red/Cyan grayscale</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="335"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="336"/>
<source>Cyan/Red grayscale</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="336"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="337"/>
<source>Red/Blue grayscale</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="337"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="338"/>
<source>Blue/Red grayscale</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="338"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="339"/>
<source>Red/Green grayscale</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="339"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="340"/>
<source>Green/Red grayscale</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="62"/>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="72"/>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="84"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="105"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="106"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="162"/>
<source>Any</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="63"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="107"/>
<source>In lobby</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="64"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="108"/>
<source>In progress</source>
<translation type="unfinished"></translation>
</message>
@@ -1656,62 +1730,62 @@
<context>
<name>QGroupBox</name>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="63"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="60"/>
<source>Team Members</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="103"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="88"/>
<source>Team Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="178"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="142"/>
<source>Fort</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="306"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="161"/>
<source>Key binds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenet.cpp" line="47"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="40"/>
<source>Net game</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="67"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="68"/>
<source>Teams</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="111"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="115"/>
<source>Schemes and Weapons</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="183"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="187"/>
<source>Misc</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="262"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="266"/>
<source>Audio/Graphic options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="47"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="48"/>
<source>Game Modifiers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="48"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="49"/>
<source>Basic Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/teamselect.cpp" line="229"/>
+ <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="229"/>
<source>Playing teams</source>
<translation type="unfinished"></translation>
</message>
@@ -1719,243 +1793,238 @@
<context>
<name>QLabel</name>
<message>
- <location filename="../../../../QTfrontend/about.cpp" line="49"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="53"/>
<source>Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/about.cpp" line="51"/>
- <source>This program is distributed under the GNU General Public License</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/about.cpp" line="66"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="55"/>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="70"/>
<source>Developers:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/about.cpp" line="86"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="90"/>
<source>Art:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/about.cpp" line="104"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="108"/>
<source>Sounds:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/about.cpp" line="114"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="118"/>
<source>Translations:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/about.cpp" line="138"/>
+ <location filename="../../../../QTfrontend/ui/widget/about.cpp" line="142"/>
<source>Special thanks:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="52"/>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="55"/>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="54"/>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="106"/>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="104"/>
<source>Scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/gamecfgwidget.cpp" line="118"/>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="143"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="147"/>
+ <location filename="../../../../QTfrontend/ui/widget/gamecfgwidget.cpp" line="116"/>
<source>Weapons</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/input_ip.cpp" line="32"/>
+ <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="32"/>
<source>Host:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/input_ip.cpp" line="36"/>
+ <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="36"/>
<source>Port:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="107"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="92"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="110"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="95"/>
<source>Type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="113"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="98"/>
<source>Grave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="116"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="101"/>
<source>Flag</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="119"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="104"/>
<source>Voice</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="121"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="94"/>
<source>Tip: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemain.cpp" line="124"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemain.cpp" line="97"/>
<source>This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetserver.cpp" line="63"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="51"/>
<source>Server name:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetserver.cpp" line="70"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="58"/>
<source>Server port:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="115"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="119"/>
<source>Game scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="187"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="191"/>
<source>Net nick</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="197"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="201"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="205"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="209"/>
<source>Locale</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="292"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="296"/>
<source>Resolution</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="306"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="308"/>
<source>Quality</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="320"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="321"/>
<source>Stereo rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="353"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="354"/>
<source>Initial sound volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="377"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="378"/>
<source>FPS limit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="394"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="395"/>
<source>Restart game to apply</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="173"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="175"/>
<source>Damage Modifier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="187"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="189"/>
<source>Turn Time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="201"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="203"/>
<source>Initial Health</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="215"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="217"/>
<source>Sudden Death Timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="229"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="231"/>
<source>Sudden Death Water Rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="243"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="245"/>
<source>Sudden Death Health Decrease</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="257"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="259"/>
<source>% Rope Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="271"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="273"/>
<source>Crate Drops</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="284"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="286"/>
<source>% Health Crates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="298"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="300"/>
<source>Health in Crates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="312"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="314"/>
<source>Mines Time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="328"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="330"/>
<source>Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="342"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="344"/>
<source>% Dud Mines</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="356"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="358"/>
<source>Explosives</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="370"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="372"/>
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="384"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="386"/>
<source>Scheme Name:</source>
<translation type="unfinished"></translation>
</message>
@@ -1963,14 +2032,14 @@
<context>
<name>QLineEdit</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="642"/>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="192"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="637"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="196"/>
<source>unnamed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="355"/>
- <location filename="../../../../QTfrontend/team.cpp" line="41"/>
+ <location filename="../../../../QTfrontend/team.cpp" line="40"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="336"/>
<source>hedgehog %1</source>
<translation type="unfinished"></translation>
</message>
@@ -1986,82 +2055,84 @@
<context>
<name>QMessageBox</name>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="657"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="658"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="387"/>
<source>Teams</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="657"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="658"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="387"/>
<source>Really delete this team?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="703"/>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="474"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="667"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="494"/>
<source>Schemes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="703"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="667"/>
<source>Can not delete default scheme '%1'!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="956"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1014"/>
<source>Network</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="957"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1015"/>
<source>Connection to server is lost</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1303"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1365"/>
<source>All file associations have been set.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/hwform.cpp" line="1304"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="1366"/>
<source>File association failed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="380"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="161"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="381"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="162"/>
<source>Failed to open data directory:
%1
Please check your installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="474"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="494"/>
<source>Really delete this game scheme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="193"/>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="240"/>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="244"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="193"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="240"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="244"/>
<source>Weapons</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="193"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="193"/>
<source>Can not overwrite default weapon set '%1'!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="240"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="240"/>
<source>Can not delete default weapon set '%1'!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="244"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="244"/>
<source>Really delete this weapon set?</source>
<translation type="unfinished"></translation>
</message>
@@ -2069,27 +2140,27 @@
<context>
<name>QObject</name>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="47"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="49"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="48"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="50"/>
<source>Cannot create directory %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/main.cpp" line="49"/>
+ <location filename="../../../../QTfrontend/main.cpp" line="51"/>
<source>OK</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="76"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="936"/>
<source>Nickname</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/newnetclient.cpp" line="77"/>
+ <location filename="../../../../QTfrontend/hwform.cpp" line="937"/>
<source>Please enter your nickname</source>
<translation type="unfinished"></translation>
</message>
@@ -2097,96 +2168,97 @@
<context>
<name>QPushButton</name>
<message>
- <location filename="../../../../QTfrontend/input_ip.cpp" line="48"/>
- <location filename="../../../../QTfrontend/pagenetserver.cpp" line="79"/>
+ <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="48"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="67"/>
<source>default</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/input_ip.cpp" line="52"/>
+ <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="52"/>
<source>OK</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/input_ip.cpp" line="57"/>
+ <location filename="../../../../QTfrontend/ui/dialog/input_ip.cpp" line="57"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/mapContainer.cpp" line="244"/>
+ <location filename="../../../../QTfrontend/ui/widget/mapContainer.cpp" line="252"/>
<source>more</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagecampaign.cpp" line="42"/>
- <location filename="../../../../QTfrontend/pagetraining.cpp" line="63"/>
+ <location filename="../../../../QTfrontend/ui/page/pagecampaign.cpp" line="42"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="43"/>
+ <location filename="../../../../QTfrontend/ui/page/pagetraining.cpp" line="92"/>
<source>Go!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="97"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="83"/>
<source>Random Team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagemultiplayer.cpp" line="37"/>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="49"/>
+ <location filename="../../../../QTfrontend/ui/page/pagemultiplayer.cpp" line="40"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="51"/>
<source>Setup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenet.cpp" line="40"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="73"/>
<source>Start server</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenet.cpp" line="56"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="49"/>
<source>Connect</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenet.cpp" line="65"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="58"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenet.cpp" line="70"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="63"/>
<source>Specify</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetgame.cpp" line="71"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="71"/>
<source>Ready</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagenetserver.cpp" line="43"/>
+ <location filename="../../../../QTfrontend/ui/page/pagenetserver.cpp" line="77"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageoptions.cpp" line="243"/>
+ <location filename="../../../../QTfrontend/ui/page/pageoptions.cpp" line="247"/>
<source>Associate file extensions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="44"/>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="75"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="42"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="83"/>
<source>Play demo</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="48"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="46"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="52"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="50"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageplayrecord.cpp" line="80"/>
+ <location filename="../../../../QTfrontend/ui/page/pageplayrecord.cpp" line="88"/>
<source>Load</source>
<translation type="unfinished"></translation>
</message>
@@ -2194,37 +2266,37 @@
<context>
<name>QTableWidget</name>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="159"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="212"/>
<source>Room Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="160"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="213"/>
<source>C</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="161"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="214"/>
<source>T</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="162"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="215"/>
<source>Owner</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="163"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="216"/>
<source>Map</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="164"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="217"/>
<source>Rules</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageroomslist.cpp" line="165"/>
+ <location filename="../../../../QTfrontend/ui/page/pageroomslist.cpp" line="218"/>
<source>Weapons</source>
<translation type="unfinished"></translation>
</message>
@@ -2232,34 +2304,34 @@
<context>
<name>SelWeaponWidget</name>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="119"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="119"/>
<source>Weapon set</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="120"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="120"/>
<source>Probabilities</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="121"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="121"/>
<source>Ammo in boxes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="122"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="122"/>
<source>Delays</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="254"/>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="258"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="254"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="258"/>
<source>new</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="285"/>
- <location filename="../../../../QTfrontend/selectWeapon.cpp" line="289"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="285"/>
+ <location filename="../../../../QTfrontend/ui/widget/selectWeapon.cpp" line="289"/>
<source>copy of</source>
<translation type="unfinished"></translation>
</message>
@@ -2267,18 +2339,18 @@
<context>
<name>TCPBase</name>
<message>
- <location filename="../../../../QTfrontend/tcpBase.cpp" line="44"/>
- <location filename="../../../../QTfrontend/tcpBase.cpp" line="104"/>
+ <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="44"/>
+ <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="104"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/tcpBase.cpp" line="45"/>
+ <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="45"/>
<source>Unable to start the server: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/tcpBase.cpp" line="105"/>
+ <location filename="../../../../QTfrontend/net/tcpBase.cpp" line="105"/>
<source>Unable to run engine: %1 (</source>
<translation type="unfinished"></translation>
</message>
@@ -2286,127 +2358,127 @@
<context>
<name>ToggleButtonWidget</name>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="69"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="71"/>
<source>Fort Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="73"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="75"/>
<source>Divide Teams</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="77"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="79"/>
<source>Solid Land</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="81"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="83"/>
<source>Add Border</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="85"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="87"/>
<source>Low Gravity</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="89"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="91"/>
<source>Laser Sight</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="93"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="95"/>
<source>Invulnerable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="97"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="99"/>
<source>Reset Health</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="101"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="103"/>
<source>Vampirism</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="105"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="107"/>
<source>Karma</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="109"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="111"/>
<source>Artillery</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="113"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="115"/>
<source>Random Order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="117"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="119"/>
<source>King</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="121"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="123"/>
<source>Place Hedgehogs</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="125"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="127"/>
<source>Clan Shares Ammo</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="129"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="131"/>
<source>Disable Girders</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="133"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="135"/>
<source>Disable Land Objects</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="137"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="139"/>
<source>AI Survival Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="141"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="143"/>
<source>Unlimited Attacks</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="145"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="147"/>
<source>Reset Weapons</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="149"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="151"/>
<source>Per Hedgehog Ammo</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="153"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="155"/>
<source>Disable Wind</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="157"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="159"/>
<source>More Wind</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="161"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="163"/>
<source>Tag Team</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pagescheme.cpp" line="165"/>
+ <location filename="../../../../QTfrontend/ui/page/pagescheme.cpp" line="167"/>
<source>Add Bottom Border</source>
<translation type="unfinished"></translation>
</message>
@@ -2728,44 +2800,44 @@
<context>
<name>binds (keys)</name>
<message>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="103"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="125"/>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="107"/>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="122"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="129"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="144"/>
<source>(Up)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="111"/>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="126"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="133"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="148"/>
<source>(Down)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="118"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="140"/>
<source>Hat</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="130"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="152"/>
<source>(Left)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="134"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="156"/>
<source>(Right)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/SDLs.cpp" line="142"/>
+ <location filename="../../../../QTfrontend/util/SDLInteraction.cpp" line="164"/>
<source>Button</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../../QTfrontend/pageeditteam.cpp" line="345"/>
+ <location filename="../../../../QTfrontend/ui/page/pageeditteam.cpp" line="200"/>
<source>Keyboard</source>
<translation type="unfinished"></translation>
</message>
--- a/share/hedgewars/Data/Locale/hedgewars_nl.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_nl.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,23 +63,59 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
- <source>%1 *** %2 has been removed from your ignore list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 *** %2 has been added to your ignore list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 *** %2 has been removed from your friends list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>%1 *** %2 has been added to your friends list</source>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -127,6 +163,40 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -252,10 +322,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Password</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Your nickname %1 is
registered on Hedgewars.org
Please provide your password
@@ -282,21 +348,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Your nickname %1 is
-registered on Hedgewars.org
-Please provide your password below
-or pick another nickname in game config:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Nickname</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -344,10 +396,6 @@
<source>Connecting...</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>PageDrawMap</name>
@@ -457,6 +505,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -925,10 +980,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
@@ -1114,10 +1165,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Demos (Watch recorded demos)</source>
<translation type="unfinished"></translation>
</message>
@@ -1126,7 +1173,22 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1409,10 +1471,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>This program is distributed under the GNU General Public License</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Developers:</source>
<translation type="unfinished"></translation>
</message>
@@ -1569,10 +1627,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1588,6 +1642,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_pl.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts Sat Nov 12 17:06:49 2011 +0100
@@ -68,24 +68,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Kiedy ta opcja jest włączona, wybór ustawień gry zmienia uzbrojenie na odpowiednie</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished">Opcje</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 został usunięty z listy ignorowanych</translation>
+ <translation type="obsolete">%1 *** %2 został usunięty z listy ignorowanych</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 został dodany do listy ignorowanych</translation>
+ <translation type="obsolete">%1 *** %2 został dodany do listy ignorowanych</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 został usunięty z listy przyjaciół</translation>
+ <translation type="obsolete">%1 *** %2 został usunięty z listy przyjaciół</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 został dodany do listy przyjaciół</translation>
+ <translation type="obsolete">%1 *** %2 został dodany do listy przyjaciół</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -136,6 +188,46 @@
<source>Demo name:</source>
<translation>Nazwa demo:</translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Hasło</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Twój nick %1 jest zarejestrowany
+na Hedgewars.org
+Proszę podać hasło bądź zmienić nick
+w ustawieniach gry:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Nick</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished">Ktoś właśnie używa
+tego nicku %1
+na serwerze.
+Przoszę wybrać nowy nick:</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -266,7 +358,7 @@
</message>
<message>
<source>Password</source>
- <translation>Hasło</translation>
+ <translation type="obsolete">Hasło</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -299,25 +391,29 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Twój nick %1 jest zarejestrowany
+ <translation type="obsolete">Twój nick %1 jest zarejestrowany
na Hedgewars.org
Proszę podać hasło bądź zmienić nick
w ustawieniach gry:</translation>
</message>
<message>
<source>Nickname</source>
- <translation>Nick</translation>
+ <translation type="obsolete">Nick</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>Ktoś właśnie używa
+ <translation type="obsolete">Ktoś właśnie używa
tego nicku %1
na serwerze.
Przoszę wybrać nowy nick:</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -373,7 +469,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>Anuluj</translation>
+ <translation type="obsolete">Anuluj</translation>
</message>
</context>
<context>
@@ -518,6 +614,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -1043,7 +1146,7 @@
</message>
<message>
<source>State:</source>
- <translation>Stan:</translation>
+ <translation type="obsolete">Stan:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1208,7 +1311,7 @@
</message>
<message>
<source>Add an indestructible border along the bottom</source>
- <translation>>Dodaje niezniszczalną ramkę u dołu mapy</translation>
+ <translation>>Dodaje niezniszczalną ramkę u dołu mapy</translation>
</message>
</context>
<context>
@@ -1242,7 +1345,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Trening (sprawdź swoje umiejętności podczas misji treningowych). W PRODUKCJI</translation>
+ <translation type="obsolete">Trening (sprawdź swoje umiejętności podczas misji treningowych). W PRODUKCJI</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1254,7 +1357,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Kampania (...). W PRODUKCJI</translation>
+ <translation type="obsolete">Kampania (...). W PRODUKCJI</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1569,7 +1691,7 @@
<name>QLabel</name>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Ten program jest rozprowadzany na zasadach powszechnej licencji publicznej GNU</translation>
+ <translation type="obsolete">Ten program jest rozprowadzany na zasadach powszechnej licencji publicznej GNU</translation>
</message>
<message>
<source>Developers:</source>
@@ -1761,7 +1883,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>Opcje</translation>
+ <translation type="obsolete">Opcje</translation>
</message>
<message>
<source>Style</source>
@@ -1779,6 +1901,10 @@
<source>% Get Away Time</source>
<translation>Czas na ucieczkÄ™ w %</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Quando esta opção está habilitada a seleção de um esquema de jogo implicará em auto seleção do esquema de armas</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 foi removido da sua lista de ignorados</translation>
+ <translation type="obsolete">%1 *** %2 foi removido da sua lista de ignorados</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 foi adicionado a sua lista de ignorados</translation>
+ <translation type="obsolete">%1 *** %2 foi adicionado a sua lista de ignorados</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 foi removido da sua lista de amigos</translation>
+ <translation type="obsolete">%1 *** %2 foi removido da sua lista de amigos</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 foi adicionado a sua lista de amigos</translation>
+ <translation type="obsolete">%1 *** %2 foi adicionado a sua lista de amigos</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -131,6 +183,43 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Senha</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Seu apelido %1 é
+registrado no Hedgewars.org
+Por favor, forneça sua senha
+ou escolha outro apelido:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Apelido</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -258,7 +347,7 @@
</message>
<message>
<source>Password</source>
- <translation>Senha</translation>
+ <translation type="obsolete">Senha</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -291,20 +380,17 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Seu apelido %1 é
+ <translation type="obsolete">Seu apelido %1 é
registrado no Hedgewars.org
Por favor, forneça sua senha
ou escolha outro apelido:</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">Apelido</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">Apelido</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -354,7 +440,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Cancelar</translation>
+ <translation type="obsolete">Cancelar</translation>
</message>
</context>
<context>
@@ -541,6 +627,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -1065,7 +1158,7 @@
</message>
<message>
<source>State:</source>
- <translation>Estado:</translation>
+ <translation type="obsolete">Estado:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1263,7 +1356,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Modo de Treino (Pratique suas habilidades nas missões de treino). EM DESENVOLVIMENTO</translation>
+ <translation type="obsolete">Modo de Treino (Pratique suas habilidades nas missões de treino). EM DESENVOLVIMENTO</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1275,7 +1368,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Modo Campanha (...) EM DESENVOLVIMENTO</translation>
+ <translation type="obsolete">Modo Campanha (...) EM DESENVOLVIMENTO</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1590,7 +1702,7 @@
<name>QLabel</name>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Este programa é distribuido sob a Licensa Pública GNU</translation>
+ <translation type="obsolete">Este programa é distribuido sob a Licensa Pública GNU</translation>
</message>
<message>
<source>Developers:</source>
@@ -1775,10 +1887,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1794,6 +1902,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Com esta opção activada o esquema de jogo irá automaticamente seleccionar uma arma</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished">Opções de Jogo</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 foi removido da tua Ignore List</translation>
+ <translation type="obsolete">%1 *** %2 foi removido da tua Ignore List</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 foi adicionado à tua Ignore List</translation>
+ <translation type="obsolete">%1 *** %2 foi adicionado à tua Ignore List</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 foi removido da tua lista de amigos</translation>
+ <translation type="obsolete">%1 *** %2 foi removido da tua lista de amigos</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 foi adicionado à tua lista de amigos</translation>
+ <translation type="obsolete">%1 *** %2 foi adicionado à tua lista de amigos</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -131,6 +183,45 @@
<source>Demo name:</source>
<translation>Nome do demo:</translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Password</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">O nome de utilizador %1 está
+registado em Hedgewars.org
+Por favor digite a sua palavra passe ou escolha
+outro nome de utilizador no menu de configuração:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Nome de utilizador</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished">O nome de utilizador %1
+já está a ser utilizado no servidor.
+Por favor escolha outro nome de utilizador.</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -257,7 +348,7 @@
</message>
<message>
<source>Password</source>
- <translation>Password</translation>
+ <translation type="obsolete">Password</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -290,24 +381,28 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>O nome de utilizador %1 está
+ <translation type="obsolete">O nome de utilizador %1 está
registado em Hedgewars.org
Por favor digite a sua palavra passe ou escolha
outro nome de utilizador no menu de configuração:</translation>
</message>
<message>
<source>Nickname</source>
- <translation>Nome de utilizador</translation>
+ <translation type="obsolete">Nome de utilizador</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>O nome de utilizador %1
+ <translation type="obsolete">O nome de utilizador %1
já está a ser utilizado no servidor.
Por favor escolha outro nome de utilizador.</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -363,7 +458,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>Cancelar</translation>
+ <translation type="obsolete">Cancelar</translation>
</message>
</context>
<context>
@@ -496,6 +591,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -980,7 +1082,7 @@
</message>
<message>
<source>State:</source>
- <translation>Estado:</translation>
+ <translation type="obsolete">Estado:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1174,7 +1276,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Modo de Treino (pratica as tuas capacidades numa variedade de missões de treino). EM DESENVOLVIMENTO</translation>
+ <translation type="obsolete">Modo de Treino (pratica as tuas capacidades numa variedade de missões de treino). EM DESENVOLVIMENTO</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1186,7 +1288,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Modo Campanha (...) EM DESENVOLVIMENTO</translation>
+ <translation type="obsolete">Modo Campanha (...) EM DESENVOLVIMENTO</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1481,7 +1602,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Este programa é distribuÃdo sob a GNU General Public License</translation>
+ <translation type="obsolete">Este programa é distribuÃdo sob a GNU General Public License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1641,7 +1762,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>Opções de Jogo</translation>
+ <translation type="obsolete">Opções de Jogo</translation>
</message>
<message>
<source>Style</source>
@@ -1659,6 +1780,10 @@
<source>% Get Away Time</source>
<translation>% Tempo Para Retirar</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_ru.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts Sat Nov 12 17:06:49 2011 +0100
@@ -68,24 +68,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>При включении Ñтой опции выбор наÑтроек игры автоматичеÑки выберет Ñхему оружиÑ</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished">ÐаÑтройки игры</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 был удалён из вашего ÑпиÑка игнорированиÑ</translation>
+ <translation type="obsolete">%1 *** %2 был удалён из вашего ÑпиÑка игнорированиÑ</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 был добавлен в ваш ÑпиÑок игнорированиÑ</translation>
+ <translation type="obsolete">%1 *** %2 был добавлен в ваш ÑпиÑок игнорированиÑ</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 был удалён из вашего ÑпиÑка друзей</translation>
+ <translation type="obsolete">%1 *** %2 был удалён из вашего ÑпиÑка друзей</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 был добавлен в ваш ÑпиÑок друзей</translation>
+ <translation type="obsolete">%1 *** %2 был добавлен в ваш ÑпиÑок друзей</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -136,6 +188,46 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Пароль</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1
+зарегиÑтрировано на Ñайте hedgewars.org
+ПожалуйÑта, укажите ваш пароль в поле ввода внизу
+или выберите иное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² наÑтройках игры:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">ПÑевдоним</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished">Кто-то на Ñтом Ñервере
+уже иÑпользует
+ваш пÑевдоним %1.
+Выберите другой пÑевдоним:</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -262,7 +354,7 @@
</message>
<message>
<source>Password</source>
- <translation>Пароль</translation>
+ <translation type="obsolete">Пароль</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -295,25 +387,29 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1
+ <translation type="obsolete">Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1
зарегиÑтрировано на Ñайте hedgewars.org
ПожалуйÑта, укажите ваш пароль в поле ввода внизу
или выберите иное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² наÑтройках игры:</translation>
</message>
<message>
<source>Nickname</source>
- <translation>ПÑевдоним</translation>
+ <translation type="obsolete">ПÑевдоним</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>Кто-то на Ñтом Ñервере
+ <translation type="obsolete">Кто-то на Ñтом Ñервере
уже иÑпользует
ваш пÑевдоним %1.
Выберите другой пÑевдоним:</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -369,7 +465,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>Отмена</translation>
+ <translation type="obsolete">Отмена</translation>
</message>
</context>
<context>
@@ -510,6 +606,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -995,7 +1098,7 @@
</message>
<message>
<source>State:</source>
- <translation>СоÑтоÑние:</translation>
+ <translation type="obsolete">СоÑтоÑние:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1194,7 +1297,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Тренировка (тренируйте Ñвоё маÑтерÑтво в тренировочных миÑÑиÑÑ…) Ð’ Ð ÐЗРÐБОТКЕ</translation>
+ <translation type="obsolete">Тренировка (тренируйте Ñвоё маÑтерÑтво в тренировочных миÑÑиÑÑ…) Ð’ Ð ÐЗРÐБОТКЕ</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1206,7 +1309,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Режим Ð¿Ñ€Ð¾Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ð¸. Ð’ Ð ÐЗРÐБОТКЕ</translation>
+ <translation type="obsolete">Режим Ð¿Ñ€Ð¾Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ð¸. Ð’ Ð ÐЗРÐБОТКЕ</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1501,7 +1623,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Ðта программа раÑпроÑтранÑетÑÑ Ð½Ð° уÑловиÑÑ… лицензии GNU (the GNU General Public License)</translation>
+ <translation type="obsolete">Ðта программа раÑпроÑтранÑетÑÑ Ð½Ð° уÑловиÑÑ… лицензии GNU (the GNU General Public License)</translation>
</message>
<message>
<source>Resolution</source>
@@ -1671,7 +1793,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>ÐаÑтройки игры</translation>
+ <translation type="obsolete">ÐаÑтройки игры</translation>
</message>
<message>
<source>Style</source>
@@ -1689,6 +1811,10 @@
<source>% Get Away Time</source>
<translation>% времени ухода</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_sk.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_sk.ts Sat Nov 12 17:06:49 2011 +0100
@@ -68,24 +68,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>KeÄ je vybraná táto voľba výberom hernej schémy vyberiete automaticky aj zbraň</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished">Voľby hry</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 bol(a) odstránený(á) zo zoznamu ignorovaných</translation>
+ <translation type="obsolete">%1 *** %2 bol(a) odstránený(á) zo zoznamu ignorovaných</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 bol(a) pridaný(á) do zoznamu ignorovaných</translation>
+ <translation type="obsolete">%1 *** %2 bol(a) pridaný(á) do zoznamu ignorovaných</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 bol(a) odstránený(á) zo zoznamu priateľov</translation>
+ <translation type="obsolete">%1 *** %2 bol(a) odstránený(á) zo zoznamu priateľov</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 bol(a) pridaný(á) do zoznamu priateľov</translation>
+ <translation type="obsolete">%1 *** %2 bol(a) pridaný(á) do zoznamu priateľov</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -136,6 +188,48 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Heslo</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Prezývka %1, ktorú ste
+si vybrali je registrovaná na
+Hedgewars.org.
+ProsÃm, napÃÅ¡te heslo do poľa
+nižšie alebo si zvoľte inú prezývku
+v nastaveniach hry:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Prezývka</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished">Niekto už použÃva
+vašu prezývku %1
+na serveri.
+ProsÃm vyberte si inú prezývku:</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -262,7 +356,7 @@
</message>
<message>
<source>Password</source>
- <translation>Heslo</translation>
+ <translation type="obsolete">Heslo</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -295,7 +389,7 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Prezývka %1, ktorú ste
+ <translation type="obsolete">Prezývka %1, ktorú ste
si vybrali je registrovaná na
Hedgewars.org.
ProsÃm, napÃÅ¡te heslo do poľa
@@ -304,18 +398,22 @@
</message>
<message>
<source>Nickname</source>
- <translation>Prezývka</translation>
+ <translation type="obsolete">Prezývka</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>Niekto už použÃva
+ <translation type="obsolete">Niekto už použÃva
vašu prezývku %1
na serveri.
ProsÃm vyberte si inú prezývku:</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -371,7 +469,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>Zrušiť</translation>
+ <translation type="obsolete">Zrušiť</translation>
</message>
</context>
<context>
@@ -516,6 +614,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -1036,7 +1141,7 @@
</message>
<message>
<source>State:</source>
- <translation>Stav:</translation>
+ <translation type="obsolete">Stav:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1235,7 +1340,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Tréningový režim (vylepÅ¡ujte si svoje zruÄnosti v rade tréningových misiÃ). VO VÃVOJI</translation>
+ <translation type="obsolete">Tréningový režim (vylepÅ¡ujte si svoje zruÄnosti v rade tréningových misiÃ). VO VÃVOJI</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1247,7 +1352,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Režim kampane (...) VO VÃVOJI</translation>
+ <translation type="obsolete">Režim kampane (...) VO VÃVOJI</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1570,7 +1694,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Tento program je distribuovaný podľa podmienok GNU General Publice License</translation>
+ <translation type="obsolete">Tento program je distribuovaný podľa podmienok GNU General Publice License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1749,7 +1873,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>Voľby hry</translation>
+ <translation type="obsolete">Voľby hry</translation>
</message>
<message>
<source>Style</source>
@@ -1767,6 +1891,10 @@
<source>% Get Away Time</source>
<translation>% Äasu na útek</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
@@ -2140,7 +2268,7 @@
</message>
<message>
<source>Add Bottom Border</source>
- <source>Pridať spodný okraj</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
--- a/share/hedgewars/Data/Locale/hedgewars_sv.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_sv.ts Sat Nov 12 17:06:49 2011 +0100
@@ -63,24 +63,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>När det här valet är aktivt kommer vapnen att ändras när du ändrar spelschema</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished">Spelinställningar</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 har tagits bort från din ignoreringslista</translation>
+ <translation type="obsolete">%1 *** %2 har tagits bort från din ignoreringslista</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 har lagts till i din ignoreringslista</translation>
+ <translation type="obsolete">%1 *** %2 har lagts till i din ignoreringslista</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 har tagits bort från din kompislista</translation>
+ <translation type="obsolete">%1 *** %2 har tagits bort från din kompislista</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 har lagts till i din kompislista</translation>
+ <translation type="obsolete">%1 *** %2 har lagts till i din kompislista</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -131,6 +183,46 @@
<source>Demo name:</source>
<translation>Demonamn:</translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Lösenord</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Ditt smeknamn (%1) är
+registrerat på Hedgewars.org
+Var god ange ditt lösenord eller välj
+ett annat smeknamn i spelinställningarna:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">Smeknamn</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished">Någon använder redan
+ditt smeknamn %1
+på servern.
+Välj ett annat smeknamn:</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -257,7 +349,7 @@
</message>
<message>
<source>Password</source>
- <translation>Lösenord</translation>
+ <translation type="obsolete">Lösenord</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -290,25 +382,29 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Ditt smeknamn (%1) är
+ <translation type="obsolete">Ditt smeknamn (%1) är
registrerat på Hedgewars.org
Var god ange ditt lösenord eller välj
ett annat smeknamn i spelinställningarna:</translation>
</message>
<message>
<source>Nickname</source>
- <translation>Smeknamn</translation>
+ <translation type="obsolete">Smeknamn</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>Någon använder redan
+ <translation type="obsolete">Någon använder redan
ditt smeknamn %1
på servern.
Välj ett annat smeknamn:</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -364,7 +460,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>Avbryt</translation>
+ <translation type="obsolete">Avbryt</translation>
</message>
</context>
<context>
@@ -501,6 +597,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -1009,7 +1112,7 @@
</message>
<message>
<source>State:</source>
- <translation>Status:</translation>
+ <translation type="obsolete">Status:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1207,7 +1310,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Träningsläge (öva dina färdigheter i en rad träningsuppdrag). UNDER UTVECKLING</translation>
+ <translation type="obsolete">Träningsläge (öva dina färdigheter i en rad träningsuppdrag). UNDER UTVECKLING</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1219,7 +1322,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Kampanjläge (...). UNDER UTVECKLING</translation>
+ <translation type="obsolete">Kampanjläge (...). UNDER UTVECKLING</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1534,7 +1656,7 @@
<name>QLabel</name>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Detta program distribueras under GNU General Public License</translation>
+ <translation type="obsolete">Detta program distribueras under GNU General Public License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1716,7 +1838,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>Spelinställningar</translation>
+ <translation type="obsolete">Spelinställningar</translation>
</message>
<message>
<source>Style</source>
@@ -1734,6 +1856,10 @@
<source>% Get Away Time</source>
<translation>% flykttid</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Sat Nov 12 17:06:49 2011 +0100
@@ -62,23 +62,59 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
- <source>%1 *** %2 has been removed from your ignore list</source>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>%1 *** %2 has been added to your ignore list</source>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>%1 *** %2 has been removed from your friends list</source>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>%1 *** %2 has been added to your friends list</source>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -130,6 +166,40 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Parola</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -256,7 +326,7 @@
</message>
<message>
<source>Password</source>
- <translation>Parola</translation>
+ <translation type="obsolete">Parola</translation>
</message>
<message>
<source>%1 *** %2 has joined the room</source>
@@ -275,21 +345,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Your nickname %1 is
-registered on Hedgewars.org
-Please provide your password below
-or pick another nickname in game config:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Nickname</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -347,7 +403,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Ä°ptal</translation>
+ <translation type="obsolete">Ä°ptal</translation>
</message>
</context>
<context>
@@ -456,6 +512,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -922,10 +985,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
@@ -1119,7 +1178,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation> Talim Modu (Bir takım talimlere katılarak kirpilerinizi eğitin). YAPIM AŞAMASINDA</translation>
+ <translation type="obsolete"> Talim Modu (Bir takım talimlere katılarak kirpilerinizi eğitin). YAPIM AŞAMASINDA</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1130,7 +1189,22 @@
<translation>Yükle (Kaydedilmiş bir oyunu yükleyin)</translation>
</message>
<message>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1422,7 +1496,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Bu program GNU Genel Kamu Lisansı'yla dağıtılmaktadır</translation>
+ <translation type="obsolete">Bu program GNU Genel Kamu Lisansı'yla dağıtılmaktadır</translation>
</message>
<message>
<source>Developers:</source>
@@ -1581,10 +1655,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1600,6 +1670,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_uk.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts Sat Nov 12 17:06:49 2011 +0100
@@ -64,24 +64,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Коли ввімкнена Ñ†Ñ Ð¾Ð¿Ñ†Ñ–Ñ Ð¿Ñ€Ð¸ виборі Ñхеми гри Ð·Ð±Ñ€Ð¾Ñ Ð±ÑƒÐ´Ðµ вибрана автоматично</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished">Параметри гри</translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 був видалений з вашого ÑпиÑку ігноруваннÑ</translation>
+ <translation type="obsolete">%1 *** %2 був видалений з вашого ÑпиÑку ігноруваннÑ</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 був доданий до вашого ÑпиÑку ігноруваннÑ</translation>
+ <translation type="obsolete">%1 *** %2 був доданий до вашого ÑпиÑку ігноруваннÑ</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 був видалений з вашого ÑпиÑку друзів</translation>
+ <translation type="obsolete">%1 *** %2 був видалений з вашого ÑпиÑку друзів</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 був доданий до вашого ÑпиÑку друзів</translation>
+ <translation type="obsolete">%1 *** %2 був доданий до вашого ÑпиÑку друзів</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -132,6 +184,46 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">Пароль</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">Ваш нік %1 вже
+зареєÑтрований на Hedgewars.org
+Введіть ваш пароль нижче або
+виберіть інший нік в налаштуваннÑÑ… гри:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished">ХтоÑÑŒ вже викориÑтовує
+ нікнейм %1
+на Ñервері.
+Виберіть інший нікнейм:</translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -258,7 +350,7 @@
</message>
<message>
<source>Password</source>
- <translation>Пароль</translation>
+ <translation type="obsolete">Пароль</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -291,25 +383,29 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>Ваш нік %1 вже
+ <translation type="obsolete">Ваш нік %1 вже
зареєÑтрований на Hedgewars.org
Введіть ваш пароль нижче або
виберіть інший нік в налаштуваннÑÑ… гри:</translation>
</message>
<message>
<source>Nickname</source>
- <translation>Ðікнейм</translation>
+ <translation type="obsolete">Ðікнейм</translation>
</message>
<message>
<source>Some one already uses
your nickname %1
on the server.
Please pick another nickname:</source>
- <translation>ХтоÑÑŒ вже викориÑтовує
+ <translation type="obsolete">ХтоÑÑŒ вже викориÑтовує
нікнейм %1
на Ñервері.
Виберіть інший нікнейм:</translation>
</message>
+ <message>
+ <source>User quit</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>KB</name>
@@ -365,7 +461,7 @@
</message>
<message>
<source>Cancel</source>
- <translation>СкаÑувати</translation>
+ <translation type="obsolete">СкаÑувати</translation>
</message>
</context>
<context>
@@ -506,6 +602,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -991,7 +1094,7 @@
</message>
<message>
<source>State:</source>
- <translation>Стан:</translation>
+ <translation type="obsolete">Стан:</translation>
</message>
<message>
<source>Rules:</source>
@@ -1190,7 +1293,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>Режим ÐÐ°Ð²Ñ‡Ð°Ð½Ð½Ñ (практика в цілому Ñ€Ñді навчальних міÑій). Ð’ РОЗРОБЦІ</translation>
+ <translation type="obsolete">Режим ÐÐ°Ð²Ñ‡Ð°Ð½Ð½Ñ (практика в цілому Ñ€Ñді навчальних міÑій). Ð’ РОЗРОБЦІ</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1202,7 +1305,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>Режим Кампанії (...). В РОЗРОБЦІ</translation>
+ <translation type="obsolete">Режим Кампанії (...). В РОЗРОБЦІ</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1497,7 +1619,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° розповÑюджуєтьÑÑ Ð½Ð° умовах ліцензії GNU General Public License</translation>
+ <translation type="obsolete">Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° розповÑюджуєтьÑÑ Ð½Ð° умовах ліцензії GNU General Public License</translation>
</message>
<message>
<source>Developers:</source>
@@ -1657,7 +1779,7 @@
</message>
<message>
<source>Game Options</source>
- <translation>Параметри гри</translation>
+ <translation type="obsolete">Параметри гри</translation>
</message>
<message>
<source>Style</source>
@@ -1675,6 +1797,10 @@
<source>% Get Away Time</source>
<translation>% Ð§Ð°Ñ Ð¢Ñ–ÐºÐ°Ñ‚Ð¸</translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Sat Nov 12 17:06:49 2011 +0100
@@ -62,24 +62,76 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>使用æ¤é¡¹åˆ™æ¸¸æˆæ¡†æž¶è‡ªåŠ¨é€‰æ‹©æ¦å™¨é…备</translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 *** %2 has been removed from your ignore list</source>
- <translation>%1 *** %2 å·²ç»ä»Žæ‚¨çš„忽略列表ä¸ç§»é™¤</translation>
+ <translation type="obsolete">%1 *** %2 å·²ç»ä»Žæ‚¨çš„忽略列表ä¸ç§»é™¤</translation>
</message>
<message>
<source>%1 *** %2 has been added to your ignore list</source>
- <translation>%1 *** %2 å·²ç»æ·»åŠ 到您的忽略列表ä¸</translation>
+ <translation type="obsolete">%1 *** %2 å·²ç»æ·»åŠ 到您的忽略列表ä¸</translation>
</message>
<message>
<source>%1 *** %2 has been removed from your friends list</source>
- <translation>%1 *** %2 å·²ç»ä»Žæ‚¨çš„朋å‹åˆ—表ä¸ç§»é™¤</translation>
+ <translation type="obsolete">%1 *** %2 å·²ç»ä»Žæ‚¨çš„朋å‹åˆ—表ä¸ç§»é™¤</translation>
</message>
<message>
<source>%1 *** %2 has been added to your friends list</source>
- <translation>%1 *** %2 å·²ç»æ·»åŠ 到您的朋å‹åˆ—表ä¸</translation>
+ <translation type="obsolete">%1 *** %2 å·²ç»æ·»åŠ 到您的朋å‹åˆ—表ä¸</translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -130,6 +182,43 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">密ç </translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished">您的昵称%1
+在Hedgewars.org已注册
+请输入您的密ç
+或从游æˆé…ç½®ä¸é€‰æ‹©å¦ä¸€ä¸ªæ˜µç§°:</translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">昵称</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -256,7 +345,7 @@
</message>
<message>
<source>Password</source>
- <translation>密ç </translation>
+ <translation type="obsolete">密ç </translation>
</message>
<message>
<source>Your nickname %1 is
@@ -289,20 +378,17 @@
registered on Hedgewars.org
Please provide your password below
or pick another nickname in game config:</source>
- <translation>您的昵称%1
+ <translation type="obsolete">您的昵称%1
在Hedgewars.org已注册
请输入您的密ç
或从游æˆé…ç½®ä¸é€‰æ‹©å¦ä¸€ä¸ªæ˜µç§°:</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">昵称</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">昵称</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -360,7 +446,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">å–消</translation>
+ <translation type="obsolete">å–消</translation>
</message>
</context>
<context>
@@ -489,6 +575,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -1015,7 +1108,7 @@
</message>
<message>
<source>State:</source>
- <translation>游æˆçŠ¶æ€</translation>
+ <translation type="obsolete">游æˆçŠ¶æ€</translation>
</message>
<message>
<source>Rules:</source>
@@ -1212,7 +1305,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>è®ç»ƒæ¨¡å¼ (一系列è®ç»ƒä»»åŠ¡)。开å‘ä¸</translation>
+ <translation type="obsolete">è®ç»ƒæ¨¡å¼ (一系列è®ç»ƒä»»åŠ¡)。开å‘ä¸</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1224,7 +1317,26 @@
</message>
<message>
<source>Campaign Mode (...). IN DEVELOPMENT</source>
- <translation>æˆ˜å½¹æ¨¡å¼ â€”â€”å¼€å‘ä¸</translation>
+ <translation type="obsolete">æˆ˜å½¹æ¨¡å¼ â€”â€”å¼€å‘ä¸</translation>
+ </message>
+ <message>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1539,7 +1651,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>This program is distributed under the GNU General Public License</translation>
+ <translation type="obsolete">This program is distributed under the GNU General Public License</translation>
</message>
<message>
<source>Resolution</source>
@@ -1710,10 +1822,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1729,6 +1837,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Sat Nov 12 17:06:49 2011 +0100
@@ -62,23 +62,59 @@
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game Options</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWChatWidget</name>
<message>
- <source>%1 *** %2 has been removed from your ignore list</source>
+ <source>%1 has been removed from your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been added to your ignore list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has been removed from your friends list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>%1 *** %2 has been added to your ignore list</source>
+ <source>%1 has been added to your friends list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stylesheet imported from %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>%1 *** %2 has been removed from your friends list</source>
+ <source>Couldn't read %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet discarded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>StyleSheet saved to %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>%1 *** %2 has been added to your friends list</source>
+ <source>Failed to save StyleSheet to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid command!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kicking %1 ...</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -130,6 +166,40 @@
<source>Demo name:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Game aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation type="unfinished">密碼</translation>
+ </message>
+ <message>
+ <source>Your nickname %1 is
+registered on Hedgewars.org
+Please provide your password below
+or pick another nickname in game config:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No password supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation type="unfinished">匿稱</translation>
+ </message>
+ <message>
+ <source>Some one already uses
+ your nickname %1
+on the server.
+Please pick another nickname:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No nickname supplied.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HWGame</name>
@@ -256,7 +326,7 @@
</message>
<message>
<source>Password</source>
- <translation>密碼</translation>
+ <translation type="obsolete">密碼</translation>
</message>
<message>
<source>Your nickname %1 is
@@ -285,21 +355,11 @@
<translation>%1***%2已經離開</translation>
</message>
<message>
- <source>Your nickname %1 is
-registered on Hedgewars.org
-Please provide your password below
-or pick another nickname in game config:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Nickname</source>
- <translation type="unfinished">匿稱</translation>
- </message>
- <message>
- <source>Some one already uses
- your nickname %1
-on the server.
-Please pick another nickname:</source>
+ <translation type="obsolete">匿稱</translation>
+ </message>
+ <message>
+ <source>User quit</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -357,7 +417,7 @@
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">å–消</translation>
+ <translation type="obsolete">å–消</translation>
</message>
</context>
<context>
@@ -478,6 +538,13 @@
</message>
</context>
<context>
+ <name>PageInGame</name>
+ <message>
+ <source>In game...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PageMain</name>
<message>
<source>Local Game (Play a game on a single computer)</source>
@@ -946,10 +1013,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>State:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Rules:</source>
<translation type="unfinished"></translation>
</message>
@@ -1143,7 +1206,7 @@
</message>
<message>
<source>Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT</source>
- <translation>è¨“ç·´æ¨¡å¼ (一系列訓練任務)。開發ä¸</translation>
+ <translation type="obsolete">è¨“ç·´æ¨¡å¼ (一系列訓練任務)。開發ä¸</translation>
</message>
<message>
<source>Demos (Watch recorded demos)</source>
@@ -1154,7 +1217,22 @@
<translation>è®€å– (讀å–之å‰ä¿å˜çš„éŠæˆ²)</translation>
</message>
<message>
- <source>Campaign Mode (...). IN DEVELOPMENT</source>
+ <source>Campaign Mode (...)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Training Mode (Practice your skills in a range of training missions)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PageTraining</name>
+ <message>
+ <source>No description available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a mission!</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1442,7 +1520,7 @@
</message>
<message>
<source>This program is distributed under the GNU General Public License</source>
- <translation>This program is distributed under the GNU General Public License</translation>
+ <translation type="obsolete">This program is distributed under the GNU General Public License</translation>
</message>
<message>
<source>Resolution</source>
@@ -1609,10 +1687,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Game Options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
@@ -1628,6 +1702,10 @@
<source>% Get Away Time</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This program is distributed under the GNU General Public License v2</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QLineEdit</name>
--- a/share/hedgewars/Data/Locale/missions_de.txt Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Locale/missions_de.txt Sat Nov 12 17:06:49 2011 +0100
@@ -5,9 +5,9 @@
Basic_Training_-_Grenade.desc="Vergiss nicht: Stift ziehen UND werfen!"
Basic_Training_-_Shotgun.name=Training: Schrotflinte - Grundlagen
-Basic_Training_-_Shotgun.desc="Zuerst schießen, dann fragen!"
+Basic_Training_-_Shotgun.desc="Zuerst schießen, dann fragen!"
-Basic_Training_-_Sniper_Rifle.name=Training: Scharfschützengewehr - Grundlagen
+Basic_Training_-_Sniper_Rifle.name=Training: Scharfschützengewehr - Grundlagen
Basic_Training_-_Sniper_Rifle.desc="Boom, headshot!"
User_Mission_-_Dangerous_Ducklings.name=Mission: Dangerous Ducklings
@@ -20,13 +20,13 @@
User_Mission_-_Teamwork.desc="Ab und zu... tut Liebe weh."
User_Mission_-_Spooky_Tree.name=Mission: Spukiger Baum
-User_Mission_-_Spooky_Tree.desc="Viele Kisten hier draußen. Ich hoffe jedenfalls, dass dieser Vogel hier nicht hungrig wird."
+User_Mission_-_Spooky_Tree.desc="Viele Kisten hier draußen. Ich hoffe jedenfalls, dass dieser Vogel hier nicht hungrig wird."
User_Mission_-_Bamboo_Thicket.name=Mission: Bambusdickicht
User_Mission_-_Bamboo_Thicket.desc="Tod von oben."
User_Mission_-_That_Sinking_Feeling.name=Mission: That Sinking Feeling
-User_Mission_-_That_Sinking_Feeling.desc="Hier steht einen das Wasser ganz schön schnell bis zu Hals. Viele sind hieran gescheitert. Kannst du alle Igel retten?"
+User_Mission_-_That_Sinking_Feeling.desc="Hier steht einen das Wasser ganz schön schnell bis zu Hals. Viele sind hieran gescheitert. Kannst du alle Igel retten?"
-User_Mission_-_Newton_and_the_Hammock.name=Mission: Newton und die Hängematte
-User_Mission_-_Newton_and_the_Hammock.desc="Nicht vergessen Igelinge: Die Geschwindigkeit eines Körpers bleibt konstant, es sei denn es wirkt eine äußere Kraft wird auf ihn ein!
+User_Mission_-_Newton_and_the_Hammock.name=Mission: Newton und die Hängematte
+User_Mission_-_Newton_and_the_Hammock.desc="Nicht vergessen Igelinge: Die Geschwindigkeit eines Körpers bleibt konstant, es sei denn es wirkt eine äußere Kraft wird auf ihn ein!"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/missions_ru.txt Sat Nov 12 17:06:49 2011 +0100
@@ -0,0 +1,32 @@
+Basic_Training_-_Bazooka.name=Базовое упражнение Ñ Ð±Ð°Ð·ÑƒÐºÐ¾Ð¹
+Basic_Training_-_Bazooka.desc="Ключевой момент - иÑпользование ветра Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð¹ Ð´Ð»Ñ ÑебÑ!"
+
+Basic_Training_-_Grenade.name=Базовое упражнение Ñ Ð³Ñ€Ð°Ð½Ð°Ñ‚Ð¾Ð¹
+Basic_Training_-_Grenade.desc="Запомни: выдерни чеку и броÑай!"
+
+Basic_Training_-_Shotgun.name=Базовое упражнение Ñ Ñ€ÑƒÐ¶ÑŒÑ‘Ð¼
+Basic_Training_-_Shotgun.desc="СтрелÑй, вÑе вопроÑÑ‹ потом!"
+
+Basic_Training_-_Sniper_Rifle.name=Базовое упражнение Ñо ÑнайперÑкой винтовкой
+Basic_Training_-_Sniper_Rifle.desc="БÐÐ¥, в Ñблочко!"
+
+User_Mission_-_Dangerous_Ducklings.name=МиÑÑиÑ: Dangerous Ducklings
+User_Mission_-_Dangerous_Ducklings.desc="Ðу что, новобранцы! Пора на практике проверить, чему вы научилиÑÑŒ на базовых упражнениÑÑ…!"
+
+User_Mission_-_Diver.name=МиÑÑиÑ: ÐÑ‹Ñ€Ñльщик
+User_Mission_-_Diver.desc="This 'amphibious assault' thing is harder than it looks..."
+
+User_Mission_-_Teamwork.name=МиÑÑиÑ: ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°
+User_Mission_-_Teamwork.desc="Иногда любовь ранит."
+
+User_Mission_-_Spooky_Tree.name=МиÑÑиÑ: Зловещее дерево
+User_Mission_-_Spooky_Tree.desc="ЗдеÑÑŒ много Ñщиков. Конечно, Ñ ÑƒÐ²ÐµÑ€ÐµÐ½, что Ñта птица не голодна."
+
+User_Mission_-_Bamboo_Thicket.name=МиÑÑиÑ: Bamboo Thicket
+User_Mission_-_Bamboo_Thicket.desc="Смерть приходит Ñверху."
+
+User_Mission_-_That_Sinking_Feeling.name=МиÑÑиÑ: That Sinking Feeling
+User_Mission_-_That_Sinking_Feeling.desc="Вода быÑтро поднимаетÑÑ, а Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¾. Многие пыталиÑÑŒ без уÑпеха. Сможешь ли Ñ‚Ñ‹ ÑпаÑти вÑех?"
+
+User_Mission_-_Newton_and_the_Hammock.name=МиÑÑиÑ: Ðьютон и гамак
+User_Mission_-_Newton_and_the_Hammock.desc="Ежата, запомните: СкороÑÑ‚ÑŒ тела оÑтаётÑÑ Ð¿Ð¾ÑтоÑнной, пока к нему не применÑетÑÑ Ð²Ð½ÐµÑˆÐ½ÑÑ Ñила!"
--- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Sat Nov 12 17:06:49 2011 +0100
@@ -1,6 +1,6 @@
------------------------------------------
--- RACER 0.4
+-- RACER 0.5
-- map-independant racing script
-- by mikade
-----------------------------------------
@@ -52,6 +52,15 @@
-- update user feedback
-- add more sounds
+-------
+-- 0.5
+-------
+
+-- fix ghost disappearing if hog falls in water or somehow dies
+-- lengthen ghost tracking interval to improve performance on slower machines
+-- increase waypoint limit to 8
+-- allow for persistent showmission information
+
-----------------------------
-- SCRIPT BEGINS
-----------------------------
@@ -116,7 +125,11 @@
local wpActive = {}
local wpRad = 450 --75
local wpCount = 0
-local wpLimit = 5
+local wpLimit = 8
+
+local roundN
+local lastRound
+local RoundHasChanged
-------------------
-- general methods
@@ -317,31 +330,50 @@
end
+function onNewRound()
+
+ roundNumber = roundNumber + 1
+
+ totalComment = ""
+ for i = 0, (TeamsCount-1) do
+ if teamNameArr[i] ~= " " then -- teamScore[teamClan[i]]
+ teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
+ totalComment = totalComment .. teamComment[i]
+ elseif teamNameArr[i] == " " then
+ teamComment[i] = "|"
+ end
+ end
+
+ ShowMission( loc("RACER"),
+ loc("STATUS UPDATE"),
+ loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
+ loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
+
+ -- end game if its at round limit
+ if roundNumber == roundLimit then
+ for i = 0, (numhhs-1) do
+ if GetHogClan(hhs[i]) ~= bestClan then
+ SetEffect(hhs[i], heResurrectable, false)
+ SetHealth(hhs[i],0)
+ end
+ end
+ gameOver = true
+ TurnTimeLeft = 1
+ end
+
+end
+
function CheckForNewRound()
- if GetHogClan(CurrentHedgehog) == firstClan then
-
- roundNumber = roundNumber + 1
+ -------------
+ ------ new
+ -------------
- totalComment = ""
- for i = 0, (TeamsCount-1) do
- if teamNameArr[i] ~= " " then -- teamScore[teamClan[i]]
- teamComment[i] = teamNameArr[i] .. ": " .. (teamScore[i]/1000) .. loc("s|")
- totalComment = totalComment .. teamComment[i]
- elseif teamNameArr[i] == " " then
- teamComment[i] = "|"
- end
- end
-
- ShowMission( loc("RACER"),
- loc("STATUS UPDATE"),
- loc("Rounds Complete: ") .. roundNumber .. "/" .. roundLimit .. "|" .. " " .. "|" ..
- loc("Best Team Times: ") .. "|" .. totalComment, 0, 4000)
-
- -- end game if its at round limit
- if roundNumber == roundLimit then
+ --[[turnN = turnN + 1
+ if gameBegun == false then
+ if turnN == 2 then
for i = 0, (numhhs-1) do
- if GetHogClan(hhs[i]) ~= bestClan then
+ if hhs[i] ~= nil then
SetEffect(hhs[i], heResurrectable, false)
SetHealth(hhs[i],0)
end
@@ -349,7 +381,39 @@
gameOver = true
TurnTimeLeft = 1
end
+ else
+
+ end]]
+
+ --[[if roundBegun == true then
+
+ if RoundHasChanged == true then
+ roundN = roundN + 1
+ RoundHasChanged = false
+ onNewRound()
+ end
+
+ if lastRound ~= TotalRounds then -- new round, but not really
+
+ if RoundHasChanged == false then
+ RoundHasChanged = true
+ end
+
+ end
+
+ AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
+
+ lastRound = TotalRounds
+
+ end]]
+
+ ------------
+ ----- old
+ ------------
+
+ if GetHogClan(CurrentHedgehog) == firstClan then
+ onNewRound()
end
end
@@ -402,6 +466,11 @@
function onGameStart()
+
+ roundN = 0
+ lastRound = TotalRounds
+ RoundHasChanged = false -- true
+
RebuildTeamInfo()
ShowMission (
@@ -413,8 +482,6 @@
"", 4, 4000
)
-
-
end
function PlaceWayPoint(x,y)
@@ -490,7 +557,7 @@
-- airstrike detected, convert this into a potential waypoint spot
if cGear ~= nil then
x,y = GetGearTarget(cGear)
-
+
DeleteGear(cGear)
if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
@@ -525,7 +592,8 @@
SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1)
FollowGear(CurrentHedgehog)
- ShowMission("...", "...", "...", 2, 1)
+
+ HideMission()
else
-- still in placement mode
@@ -546,7 +614,7 @@
--ghost
gTimer = gTimer + 1
- if gTimer == 15 then
+ if gTimer == 40 then
gTimer = 0
HandleGhost()
end
@@ -584,6 +652,10 @@
AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false)
+ if gear == CurrentHedgehog then
+ DisableTumbler()
+ end
+
-- if the player stops and "dies" or flies into water, stop him racing
--[[if gear == CurrentHedgehog then
DisableTumbler()
--- a/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Sat Nov 12 17:06:49 2011 +0100
@@ -5,7 +5,7 @@
---------------------------------------------------
---------------------------------------------------
---------------------------------------------------
---- Space Invasion Code Follows (0.9)
+--- Space Invasion Code Follows (1.0)
---------------------------------------------------
---------------------------------------------------
-- VERSION HISTORY
@@ -86,7 +86,7 @@
-- Boss Slayer (Destroy 2 blue circles for +25 points)
-- Shield Master (disolve 5 shells for +10 points)
--- Shield Miser (don't use your shield at all (2.5*roundkills)+2 points)
+-- Shield Miser (don't use your shield at all (3.5*roundkills)+2 points)
-- Depleted Kamikaze! (kamikaze into a blue/red circ when you are out of ammo) 5pts
-- Timed Kamikaze! (kamikaze into a blue/red circ when you only have 5s left) 10pts
@@ -122,6 +122,16 @@
-- experimental radar (it's INTERACTIVE and math-heavy :D) (visual gears are safe... right? D:)
-- bugfix and balance for multishot
+------------------------
+-- version 1.0
+------------------------
+
+-- if only version numbers actually worked like this, wouldn't that be awful :D
+
+-- added surfer achievement
+-- increased value of shield miser by 1 point per kill (OP?)
+
+
--------------------------
--notes for later
--------------------------
@@ -152,6 +162,7 @@
AddCaption(LOC_NOT("BOOM! +50 points!"),0xffba00ff,capgrpVolume)
AddCaption(LOC_NOT("BOOM! BOOM! BOOM! +100 points!"),0xffba00ff,capgrpVolume)
AddCaption(LOC_NOT("Accuracy Bonus! +15 points!"),0xffba00ff,capgrpVolume)
+AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume)
-----------------
capgrpMessage
@@ -207,6 +218,10 @@
local sdName = {}
local sdKills = {}
+local roundN = 0
+local lastRound
+local RoundHasChanged = true
+
--------------------------
-- hog and team tracking variales
--------------------------
@@ -223,6 +238,7 @@
local teamComment = {}
local teamScore = {}
local teamCircsKilled = {}
+local teamSurfer = {}
-- stats variables
--local teamRed = {}
@@ -240,6 +256,7 @@
local chainLength = 0
local shotsFired = 0
local shotsHit = 0
+local SurfTime = 0
---------------------
-- tumbler goods
@@ -382,6 +399,7 @@
teamIndex[i] = 0
teamScore[i] = 0
teamCircsKilled[i] = 0
+ teamSurfer[i] = false
end
numTeams = 0
@@ -445,7 +463,7 @@
function AwardKills(t)
roundKills = roundKills + 1
-
+
for i = 0,(TeamsCount-1) do
if teamClan[i] == GetHogClan(CurrentHedgehog) then
teamCircsKilled[i] = teamCircsKilled[i] + 1
@@ -533,36 +551,66 @@
end
+function onNewRound()
+ roundNumber = roundNumber + 1
+
+ CommentOnScore()
+
+ -- end game if its at round limit
+ if roundNumber == roundLimit then
+
+ for i = 0, (TeamsCount-1) do
+ if teamScore[i] > bestScore then
+ bestScore = teamScore[i]
+ bestClan = teamClan[i]
+ end
+ end
+
+ for i = 0, (numhhs-1) do
+ if GetHogClan(hhs[i]) ~= bestClan then
+ SetEffect(hhs[i], heResurrectable, false)
+ SetHealth(hhs[i],0)
+ end
+ end
+ gameOver = true
+ TurnTimeLeft = 0 --1
+ TimeLeft = 0
+ end
+end
+
-- gaudy racer
function CheckForNewRound()
+ ----------
+ -- new
+ ----------
+
+ --[[if gameBegun == true then
+
+ if RoundHasChanged == true then
+ roundN = roundN + 1
+ RoundHasChanged = false
+ onNewRound()
+ end
+
+ if lastRound ~= TotalRounds then -- new round, but not really
+
+ if RoundHasChanged == false then
+ RoundHasChanged = true
+ end
+
+ end
+
+ --AddCaption("RoundN:" .. roundN .. "; " .. "TR: " .. TotalRounds)
+ lastRound = TotalRounds
+
+ end]]
+
+ ----------
+ -- old
+ ----------
if GetHogClan(CurrentHedgehog) == firstClan then
-
- roundNumber = roundNumber + 1
-
- CommentOnScore()
-
- -- end game if its at round limit
- if roundNumber == roundLimit then
-
- for i = 0, (TeamsCount-1) do
- if teamScore[i] > bestScore then
- bestScore = teamScore[i]
- bestClan = teamClan[i]
- end
- end
-
- for i = 0, (numhhs-1) do
- if GetHogClan(hhs[i]) ~= bestClan then
- SetEffect(hhs[i], heResurrectable, false)
- SetHealth(hhs[i],0)
- end
- end
- gameOver = true
- TurnTimeLeft = 0 --1
- TimeLeft = 0
- end
-
+ onNewRound()
end
end
@@ -730,7 +778,7 @@
function onHJump()
- if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and
+ if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and
(rAlpha == 255) and (radShotsLeft > 0) then
rPingTimer = 0
rAlpha = 0
@@ -833,6 +881,7 @@
CreateMeSomeCircles()
RebuildTeamInfo() -- control
+ lastRound = TotalRounds
end
@@ -867,6 +916,7 @@
shotsHit = 0
chainLength = 0
chainCounter = 0
+ SurfTime = 12
-------------------------
-- gaudy racer
@@ -1024,12 +1074,8 @@
--nw WriteLnToConsole("Player is out of luck")
if shieldMiser == true then
-
- p = (roundKills*2.5) - ((roundKills*2.5)%1) + 2
- --p = (roundKills*2.5) + 2
- --if (p%2 ~= 0) then
- -- p = p -0.5
- --end
+
+ p = (roundKills*3.5) - ((roundKills*3.5)%1) + 2
AddCaption(loc("Shield Miser!") .." +" .. p .." ".. loc("points") .. "!",0xffba00ff,capgrpAmmoinfo)
AwardPoints(p)
@@ -1073,6 +1119,30 @@
--------------
--------------
+ ------------------------
+ -- surfer achievement
+ ------------------------
+
+ if (WaterLine - GetY(CurrentHedgehog)) < 15 then
+ SurfTime = SurfTime -1
+ end
+
+ if SurfTime ~= 12 then
+
+ SurfTime = SurfTime - 1
+ if SurfTime <= 0 then
+ for i = 0,(TeamsCount-1) do
+ if teamClan[i] == GetHogClan(CurrentHedgehog) and (teamSurfer[i] == false) then
+ teamSurfer[i] = true
+ SurfTime = 12
+ AddCaption(loc("Surfer! +15 points!"),0xffba00ff,capgrpVolume)
+ AwardPoints(15)
+ end
+ end
+ end
+ end
+
+
dx, dy = GetGearVelocity(CurrentHedgehog)
--WriteLnToConsole("I just got the velocity of currenthedgehog. It is dx: " .. dx .. "; dy: " .. dy)
@@ -1123,7 +1193,7 @@
end
--WriteLnToConsole("End of GameTick")
-
+
end
function onGearResurrect(gear)
@@ -1211,31 +1281,31 @@
function DoHorribleThings(cUID)
- -- maybe
+ -- maybe
-- add a check to draw it inside the circ and not past it if
-- it is closer than 150 or w/e
- -- work out the distance to the target
+ -- work out the distance to the target
g1X, g1Y = GetGearPosition(CurrentHedgehog)
g2X, g2Y = vCircX[cUID], vCircY[cUID]
- q = g1X - g2X
- w = g1Y - g2Y
+ q = g1X - g2X
+ w = g1Y - g2Y
r = math.sqrt( (q*q) + (w*w) ) --alternate
-
-
- opp = w
+
+
+ opp = w
if opp < 0 then
opp = opp*-1
end
-- work out the angle (theta) to the target
t = math.deg ( math.asin(opp / r) )
-
- -- based on the radius of the radar, calculate what x/y displacement should be
+
+ -- based on the radius of the radar, calculate what x/y displacement should be
NR = 150 -- radius at which to draw circs
NX = math.cos( math.rad(t) ) * NR
- NY = math.sin( math.rad(t) ) * NR
-
+ NY = math.sin( math.rad(t) ) * NR
+
-- displace xy based on where this thing actually is
if q > 0 then
rCircX[cUID] = g1X - NX
@@ -1248,7 +1318,7 @@
else
rCircY[cUID] = g1Y + NY
end
-
+
end
function PlayerIsFine()
@@ -1573,7 +1643,7 @@
g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(rCirc[i])
SetVisualGearValues(rCirc[i], 0, 0, g3, g4, g5, g6, g7, g8, g9, vCircCol[i]-0x000000ff)
-
+
vCircActive[i] = true -- new
@@ -1816,25 +1886,25 @@
end]]
-
+
if rAlpha ~= 255 then
-
+
rPingTimer = rPingTimer + 1
if rPingTimer == 100 then
- rPingTimer = 0
-
+ rPingTimer = 0
+
rAlpha = rAlpha + 5
if rAlpha >= 255 then
rAlpha = 255
- end
+ end
end
-
+
end
for i = 0,(vCCount-1) do
--if (vCircActive[i] == true) then
- SetVisualGearValues(rCirc[i], rCircX[i], rCircY[i], 100, 255, 1, 10, 0, 40, 3, vCircCol[i]-rAlpha)
+ SetVisualGearValues(rCirc[i], rCircX[i], rCircY[i], 100, 255, 1, 10, 0, 40, 3, vCircCol[i]-rAlpha)
--end
vCounter[i] = vCounter[i] + 1
@@ -1987,8 +2057,8 @@
vCircX[i] = vCircX[i] + vCircDX[i]
vCircY[i] = vCircY[i] + vCircDY[i]
- if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then
- DoHorribleThings(i)--(i, g1X, g1Y, g2X, g2Y, dist)
+ if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then
+ DoHorribleThings(i)--(i, g1X, g1Y, g2X, g2Y, dist)
end
end
Binary file share/hedgewars/Data/Sounds/beep.ogg has changed
--- a/share/hedgewars/Data/Sounds/voices/CMakeLists.txt Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Sounds/voices/CMakeLists.txt Sat Nov 12 17:06:49 2011 +0100
@@ -9,6 +9,7 @@
Singer
Surfer
Default_uk
+ HillBilly
)
add_subdirectory(${dir})
endforeach(dir)
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Byebye.ogg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Sounds/voices/HillBilly/CMakeLists.txt Sat Nov 12 17:06:49 2011 +0100
@@ -0,0 +1,41 @@
+file(GLOB VoiceSounds
+Boring.ogg
+Byebye.ogg
+Comeonthen.ogg
+Coward.ogg
+Enemydown.ogg
+Firstblood.ogg
+Firepunch*.ogg
+Flawless.ogg
+Hello.ogg
+Hurry.ogg
+Illgetyou.ogg
+Incoming.ogg
+Jump*.ogg
+JustYouwait.ogg
+Kamikaze.ogg
+Laugh.ogg
+Melon.ogg
+Missed.ogg
+Nooo.ogg
+Nutter.ogg
+Ooff*.ogg
+Oops.ogg
+Ow*.ogg
+PoisonCough.ogg
+PoisonMoan.ogg
+Reinforcements.ogg
+Sameteam.ogg
+Stupid.ogg
+Takecover.ogg
+Traitor.ogg
+Uh-oh.ogg
+Victory.ogg
+Watchit.ogg
+Yessir.ogg
+Youllregretthat.ogg
+)
+
+install(FILES
+ ${VoiceSounds}
+ DESTINATION ${SHAREPATH}Data/Sounds/voices/HillBilly)
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Comeonthen.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Coward.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Enemydown.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Firepunch1.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Firepunch2.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Firepunch3.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Firepunch4.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Firepunch5.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Firepunch6.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Firstblood.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Flawless.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Hello.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Hurry.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Illgetyou.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Incoming.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Jump1.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Jump2.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Jump3.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Kamikaze.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Laugh.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Melon.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Missed.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Nooo.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Nutter.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Ooff1.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Ooff2.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Ooff3.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Oops.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Ow1.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Ow2.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Ow3.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Ow4.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/PoisonCough.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/PoisonMoan.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Reinforcements.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Sameteam.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Stupid.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Takecover.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Traitor.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Uh-oh.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Victory.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Watchit.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Yessir.ogg has changed
Binary file share/hedgewars/Data/Sounds/voices/HillBilly/Youllregretthat.ogg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Sounds/voices/HillBilly/readme.txt Sat Nov 12 17:06:49 2011 +0100
@@ -0,0 +1,10 @@
+Hedgewars Hillbilly Sound Pack v2
+sloan2189@gmail.com
+
+
+
+What can I say? I got bored and decided to add a little West Virginia to the game.
+
+This version has better quality audio, and the oofs, fireballs, oops, and ows were replaced as well.
+
+Enjoy.
Binary file share/hedgewars/Data/Themes/Castle/Flake.png has changed
Binary file share/hedgewars/Data/Themes/Christmas/Flake.png has changed
Binary file share/hedgewars/Data/Themes/Golf/Flake.png has changed
--- a/share/hedgewars/Data/Themes/Halloween/theme.cfg Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Themes/Halloween/theme.cfg Sat Nov 12 17:06:49 2011 +0100
@@ -8,3 +8,4 @@
object = Rock, 3, 65, 258, 175, 2, 1, 0, 0, 240, 215
object = RockShort, 3, 0, 165, 163, 2, 1, 0, 0, 163, 140
flakes = 20, 7, 130, 0, 5
+flatten-flakes = yes
Binary file share/hedgewars/Data/Themes/Nature/Flake.png has changed
Binary file share/hedgewars/Data/Themes/Snow/Flake.png has changed
--- a/share/hedgewars/Data/Themes/Underwater/theme.cfg Sat Nov 12 15:48:55 2011 +0100
+++ b/share/hedgewars/Data/Themes/Underwater/theme.cfg Sat Nov 12 17:06:49 2011 +0100
@@ -5,6 +5,7 @@
water-opacity = $FF
music = underwater.ogg
clouds = 9
+flatten-clouds = yes
object = anchor, 3, 65, 258, 80, 2, 1, 0, 0, 240, 215
object = clam, 3, 60, 131, 16, 2, 1, 0, 0, 150, 117
object = crab, 3, 78, 256, 96, 2, 1, 3, 60, 237, 155
--- a/tools/PascalParser.hs Sat Nov 12 15:48:55 2011 +0100
+++ b/tools/PascalParser.hs Sat Nov 12 17:06:49 2011 +0100
@@ -1,98 +1,545 @@
module PascalParser where
-import Text.ParserCombinators.Parsec
+import Text.Parsec.Expr
+import Text.Parsec.Char
+import Text.Parsec.Token
+import Text.Parsec.Language
+import Text.Parsec.Prim
+import Text.Parsec.Combinator
+import Text.Parsec.String
import Control.Monad
+import Data.Char
data PascalUnit =
- Program Identificator Implementation FunctionBody
- | Unit Identificator Interface Implementation (Maybe Initialize) (Maybe Finalize)
+ Program Identifier Implementation
+ | Unit Identifier Interface Implementation (Maybe Initialize) (Maybe Finalize)
deriving Show
-
data Interface = Interface Uses TypesAndVars
deriving Show
-data Implementation = Implementation Uses TypesAndVars Functions
+data Implementation = Implementation Uses TypesAndVars
+ deriving Show
+data Identifier = Identifier String
+ deriving Show
+data TypesAndVars = TypesAndVars [TypeVarDeclaration]
+ deriving Show
+data TypeVarDeclaration = TypeDeclaration Identifier TypeDecl
+ | VarDeclaration Bool ([Identifier], TypeDecl) (Maybe Expression)
+ | FunctionDeclaration Identifier TypeDecl (Maybe Phrase)
deriving Show
-data Functions = Functions [Function]
+data TypeDecl = SimpleType Identifier
+ | RangeType Range
+ | Sequence [Identifier]
+ | ArrayDecl Range TypeDecl
+ | RecordType [TypeVarDeclaration]
+ | PointerTo TypeDecl
+ | String
+ | UnknownType
+ deriving Show
+data Range = Range Identifier
+ | RangeFromTo Expression Expression
+ deriving Show
+data Initialize = Initialize String
deriving Show
-data Function = Function String
+data Finalize = Finalize String
+ deriving Show
+data Uses = Uses [Identifier]
deriving Show
-data Identificator = Identificator String
+data Phrase = ProcCall Identifier [Expression]
+ | IfThenElse Expression Phrase (Maybe Phrase)
+ | WhileCycle Expression Phrase
+ | RepeatCycle Expression [Phrase]
+ | ForCycle Identifier Expression Expression Phrase
+ | WithBlock Expression Phrase
+ | Phrases [Phrase]
+ | SwitchCase Expression [(Expression, Phrase)] (Maybe Phrase)
+ | Assignment Reference Expression
+ deriving Show
+data Expression = Expression String
+ | PrefixOp String Expression
+ | PostfixOp String Expression
+ | BinOp String Expression Expression
+ | StringLiteral String
+ | CharCode String
+ | NumberLiteral String
+ | HexNumber String
+ | Reference Reference
+ | Null
deriving Show
-data FunctionBody = FunctionBody String
- deriving Show
-data TypesAndVars = TypesAndVars String
+data Reference = ArrayElement [Expression] Reference
+ | FunCall [Expression] Reference
+ | SimpleReference Identifier
+ | Dereference Reference
+ | RecordField Reference Reference
+ | Address Reference
deriving Show
-data Initialize = Initialize Functions
- deriving Show
-data Finalize = Finalize Functions
- deriving Show
-data Uses = Uses [Identificator]
- deriving Show
+
+pascalLanguageDef
+ = emptyDef
+ { commentStart = "(*"
+ , commentEnd = "*)"
+ , commentLine = "//"
+ , nestedComments = False
+ , identStart = letter <|> oneOf "_"
+ , identLetter = alphaNum <|> oneOf "_."
+ , reservedNames = [
+ "begin", "end", "program", "unit", "interface"
+ , "implementation", "and", "or", "xor", "shl"
+ , "shr", "while", "do", "repeat", "until", "case", "of"
+ , "type", "var", "const", "out", "array", "packed"
+ , "procedure", "function", "with", "for", "to"
+ , "downto", "div", "mod", "record", "set", "nil"
+ , "string", "shortstring"
+ ]
+ , reservedOpNames= []
+ , caseSensitive = False
+ }
+
+pas = patch $ makeTokenParser pascalLanguageDef
+ where
+ patch tp = tp {stringLiteral = sl}
+ sl = do
+ (char '\'')
+ s <- (many $ noneOf "'")
+ (char '\'')
+ ss <- many $ do
+ (char '\'')
+ s' <- (many $ noneOf "'")
+ (char '\'')
+ return $ '\'' : s'
+ comments
+ return $ concat (s:ss)
+
+comments = do
+ spaces
+ skipMany $ do
+ comment
+ spaces
-parsePascalUnit :: String -> Either ParseError PascalUnit
-parsePascalUnit = parse pascalUnit "unit"
- where
- comments = skipMany (comment >> spaces)
- identificator = do
- spaces
- l <- letter <|> oneOf "_"
- ls <- many (alphaNum <|> oneOf "_")
- spaces
- return $ Identificator (l:ls)
+pascalUnit = do
+ comments
+ u <- choice [program, unit]
+ comments
+ return u
+
+comment = choice [
+ char '{' >> manyTill anyChar (try $ char '}')
+ , (try $ string "(*") >> manyTill anyChar (try $ string "*)")
+ , (try $ string "//") >> manyTill anyChar (try newline)
+ ]
+
+iD = do
+ i <- liftM Identifier (identifier pas)
+ comments
+ return i
+
+unit = do
+ string "unit" >> comments
+ name <- iD
+ semi pas
+ comments
+ int <- interface
+ impl <- implementation
+ comments
+ return $ Unit name int impl Nothing Nothing
- pascalUnit = do
- spaces
- comments
- u <- choice [program, unit]
- comments
- spaces
- return u
+
+reference = buildExpressionParser table term <?> "reference"
+ where
+ term = comments >> choice [
+ parens pas reference
+ , char '@' >> reference >>= return . Address
+ , iD >>= return . SimpleReference
+ ] <?> "simple reference"
- comment = choice [
- char '{' >> manyTill anyChar (try $ char '}')
- , string "(*" >> manyTill anyChar (try $ string "*)")
- , string "//" >> manyTill anyChar (try newline)
+ table = [
+ [Postfix $ (parens pas) (option [] parameters) >>= return . FunCall]
+ , [Postfix (char '^' >> return Dereference)]
+ , [Postfix $ (brackets pas) (commaSep1 pas $ expression) >>= return . ArrayElement]
+ , [Infix (try (char '.' >> notFollowedBy (char '.')) >> return RecordField) AssocLeft]
+ ]
+
+
+varsDecl1 = varsParser sepEndBy1
+varsDecl = varsParser sepEndBy
+varsParser m endsWithSemi = do
+ vs <- m (aVarDecl endsWithSemi) (semi pas)
+ return vs
+
+aVarDecl endsWithSemi = do
+ when (not endsWithSemi) $
+ optional $ choice [
+ try $ string "var"
+ , try $ string "const"
+ , try $ string "out"
]
+ comments
+ ids <- do
+ i <- (commaSep1 pas) $ (try iD <?> "variable declaration")
+ char ':'
+ return i
+ comments
+ t <- typeDecl <?> "variable type declaration"
+ comments
+ init <- option Nothing $ do
+ char '='
+ comments
+ e <- expression
+ comments
+ return (Just e)
+ return $ VarDeclaration False (ids, t) init
- unit = do
- name <- unitName
- spaces
+
+constsDecl = do
+ vs <- many1 (try (aConstDecl >>= \i -> semi pas >> return i) >>= \i -> comments >> return i)
+ comments
+ return vs
+ where
+ aConstDecl = do
+ comments
+ i <- iD <?> "const declaration"
+ optional $ do
+ char ':'
+ comments
+ t <- typeDecl
+ return ()
+ char '='
+ comments
+ e <- expression
comments
- int <- string "interface" >> interface
- manyTill anyChar (try $ string "implementation")
- spaces
+ return $ VarDeclaration False ([i], UnknownType) (Just e)
+
+typeDecl = choice [
+ char '^' >> typeDecl >>= return . PointerTo
+ , try (string "shortstring") >> return String
+ , arrayDecl
+ , recordDecl
+ , rangeDecl >>= return . RangeType
+ , sequenceDecl >>= return . Sequence
+ , identifier pas >>= return . SimpleType . Identifier
+ ] <?> "type declaration"
+ where
+ arrayDecl = do
+ try $ string "array"
+ comments
+ char '['
+ r <- rangeDecl
+ char ']'
+ comments
+ string "of"
+ comments
+ t <- typeDecl
+ return $ ArrayDecl r t
+ recordDecl = do
+ optional $ (try $ string "packed") >> comments
+ try $ string "record"
+ comments
+ vs <- varsDecl True
+ string "end"
+ return $ RecordType vs
+ sequenceDecl = (parens pas) $ (commaSep pas) iD
+
+typesDecl = many (aTypeDecl >>= \t -> comments >> return t)
+ where
+ aTypeDecl = do
+ i <- try $ do
+ i <- iD <?> "type declaration"
+ comments
+ char '='
+ return i
+ comments
+ t <- typeDecl
+ comments
+ semi pas
comments
- impl <- implementation
- return $ Unit name int impl Nothing Nothing
- where
- unitName = between (string "unit") (char ';') identificator
+ return $ TypeDeclaration i t
+
+rangeDecl = choice [
+ try $ rangeft
+ , iD >>= return . Range
+ ] <?> "range declaration"
+ where
+ rangeft = do
+ e1 <- expression
+ string ".."
+ e2 <- expression
+ return $ RangeFromTo e1 e2
+
+typeVarDeclaration isImpl = (liftM concat . many . choice) [
+ varSection,
+ constSection,
+ typeSection,
+ funcDecl,
+ procDecl
+ ]
+ where
+ varSection = do
+ try $ string "var"
+ comments
+ v <- varsDecl1 True
+ comments
+ return v
+
+ constSection = do
+ try $ string "const"
+ comments
+ c <- constsDecl
+ comments
+ return c
- interface = do
- spaces
+ typeSection = do
+ try $ string "type"
+ comments
+ t <- typesDecl
+ comments
+ return t
+
+ procDecl = do
+ try $ string "procedure"
+ comments
+ i <- iD
+ optional $ do
+ char '('
+ varsDecl False
+ char ')'
+ comments
+ char ';'
+ b <- if isImpl then
+ do
+ comments
+ optional $ typeVarDeclaration True
+ comments
+ liftM Just functionBody
+ else
+ return Nothing
+ comments
+ return $ [FunctionDeclaration i UnknownType b]
+
+ funcDecl = do
+ try $ string "function"
comments
- u <- uses
- return $ Interface u (TypesAndVars "")
+ i <- iD
+ optional $ do
+ char '('
+ varsDecl False
+ char ')'
+ comments
+ char ':'
+ comments
+ ret <- typeDecl
+ comments
+ char ';'
+ comments
+ b <- if isImpl then
+ do
+ optional $ typeVarDeclaration True
+ comments
+ liftM Just functionBody
+ else
+ return Nothing
+ return $ [FunctionDeclaration i ret Nothing]
+
+program = do
+ string "program"
+ comments
+ name <- iD
+ (char ';')
+ comments
+ impl <- implementation
+ comments
+ return $ Program name impl
+
+interface = do
+ string "interface"
+ comments
+ u <- uses
+ comments
+ tv <- typeVarDeclaration False
+ comments
+ return $ Interface u (TypesAndVars tv)
- program = do
- name <- programName
- spaces
+implementation = do
+ string "implementation"
+ comments
+ u <- uses
+ comments
+ tv <- typeVarDeclaration True
+ string "end."
+ comments
+ return $ Implementation u (TypesAndVars tv)
+
+expression = buildExpressionParser table term <?> "expression"
+ where
+ term = comments >> choice [
+ parens pas $ expression
+ , try $ integer pas >>= return . NumberLiteral . show
+ , stringLiteral pas >>= return . StringLiteral
+ , char '#' >> many digit >>= return . CharCode
+ , char '$' >> many hexDigit >>= return . HexNumber
+ , try $ string "nil" >> return Null
+ , reference >>= return . Reference
+ ] <?> "simple expression"
+
+ table = [
+ [ Infix (char '*' >> return (BinOp "*")) AssocLeft
+ , Infix (char '/' >> return (BinOp "/")) AssocLeft
+ , Infix (try (string "div") >> return (BinOp "div")) AssocLeft
+ , Infix (try (string "mod") >> return (BinOp "mod")) AssocLeft
+ ]
+ , [ Infix (char '+' >> return (BinOp "+")) AssocLeft
+ , Infix (char '-' >> return (BinOp "-")) AssocLeft
+ , Prefix (char '-' >> return (PrefixOp "-"))
+ ]
+ , [ Infix (try (string "<>") >> return (BinOp "<>")) AssocNone
+ , Infix (try (string "<=") >> return (BinOp "<=")) AssocNone
+ , Infix (try (string ">=") >> return (BinOp ">=")) AssocNone
+ , Infix (char '<' >> return (BinOp "<")) AssocNone
+ , Infix (char '>' >> return (BinOp ">")) AssocNone
+ , Infix (char '=' >> return (BinOp "=")) AssocNone
+ ]
+ , [ Infix (try $ string "and" >> return (BinOp "and")) AssocLeft
+ , Infix (try $ string "or" >> return (BinOp "or")) AssocLeft
+ , Infix (try $ string "xor" >> return (BinOp "xor")) AssocLeft
+ ]
+ , [ Infix (try $ string "shl" >> return (BinOp "and")) AssocNone
+ , Infix (try $ string "shr" >> return (BinOp "or")) AssocNone
+ ]
+ , [Prefix (try (string "not") >> return (PrefixOp "not"))]
+ ]
+
+phrasesBlock = do
+ try $ string "begin"
+ comments
+ p <- manyTill phrase (try $ string "end")
+ comments
+ return $ Phrases p
+
+phrase = do
+ o <- choice [
+ phrasesBlock
+ , ifBlock
+ , whileCycle
+ , repeatCycle
+ , switchCase
+ , withBlock
+ , forCycle
+ , (try $ reference >>= \r -> string ":=" >> return r) >>= \r -> expression >>= return . Assignment r
+ , procCall
+ ]
+ optional $ char ';'
+ comments
+ return o
+
+ifBlock = do
+ try $ string "if"
+ comments
+ e <- expression
+ comments
+ string "then"
+ comments
+ o1 <- phrase
+ comments
+ o2 <- optionMaybe $ do
+ try $ string "else"
comments
- impl <- implementation
- return $ Program name impl (FunctionBody "")
- where
- programName = between (string "program") (char ';') identificator
+ o <- phrase
+ comments
+ return o
+ return $ IfThenElse e o1 o2
- implementation = do
- u <- uses
- manyTill anyChar (try $ string "end.")
- return $ Implementation u (TypesAndVars "") (Functions [])
+whileCycle = do
+ try $ string "while"
+ comments
+ e <- expression
+ comments
+ string "do"
+ comments
+ o <- phrase
+ return $ WhileCycle e o
+
+withBlock = do
+ try $ string "with"
+ comments
+ e <- expression
+ comments
+ string "do"
+ comments
+ o <- phrase
+ return $ WithBlock e o
+
+repeatCycle = do
+ try $ string "repeat"
+ comments
+ o <- many phrase
+ string "until"
+ comments
+ e <- expression
+ comments
+ return $ RepeatCycle e o
- uses = liftM Uses (option [] u)
- where
- u = do
- string "uses"
- spaces
- u <- (identificator >>= \i -> spaces >> return i) `sepBy1` (char ',' >> spaces)
- char ';'
- spaces
- return u
+forCycle = do
+ try $ string "for"
+ comments
+ i <- iD
+ comments
+ string ":="
+ comments
+ e1 <- expression
+ comments
+ choice [string "to", string "downto"]
+ comments
+ e2 <- expression
+ comments
+ string "do"
+ comments
+ p <- phrase
+ comments
+ return $ ForCycle i e1 e2 p
+
+switchCase = do
+ try $ string "case"
+ comments
+ e <- expression
+ comments
+ string "of"
+ comments
+ cs <- many1 aCase
+ o2 <- optionMaybe $ do
+ try $ string "else"
+ comments
+ o <- phrase
+ comments
+ return o
+ string "end"
+ return $ SwitchCase e cs o2
+ where
+ aCase = do
+ e <- expression
+ comments
+ char ':'
+ comments
+ p <- phrase
+ comments
+ return (e, p)
+
+procCall = do
+ i <- iD
+ p <- option [] $ (parens pas) parameters
+ return $ ProcCall i p
+
+parameters = (commaSep pas) expression <?> "parameters"
+
+functionBody = do
+ p <- phrasesBlock
+ char ';'
+ comments
+ return p
+
+uses = liftM Uses (option [] u)
+ where
+ u = do
+ string "uses"
+ comments
+ u <- (iD >>= \i -> comments >> return i) `sepBy1` (char ',' >> comments)
+ char ';'
+ comments
+ return u
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/pas2c.hs Sat Nov 12 17:06:49 2011 +0100
@@ -0,0 +1,95 @@
+module Pas2C where
+
+import PascalParser
+import Text.PrettyPrint.HughesPJ
+import Data.Maybe
+import Data.Char
+
+
+pascal2C :: PascalUnit -> Doc
+pascal2C (Unit unitName interface implementation init fin) = implementation2C implementation
+
+
+implementation2C :: Implementation -> Doc
+implementation2C (Implementation uses tvars) = typesAndVars2C tvars
+
+
+typesAndVars2C :: TypesAndVars -> Doc
+typesAndVars2C (TypesAndVars ts) = vcat $ map tvar2C ts
+
+
+tvar2C :: TypeVarDeclaration -> Doc
+tvar2C (FunctionDeclaration (Identifier name) returnType Nothing) =
+ type2C returnType <+> text (name ++ "();")
+
+
+tvar2C (FunctionDeclaration (Identifier name) returnType (Just phrase)) =
+ type2C returnType <+> text (name ++ "()")
+ $$
+ phrase2C phrase
+tvar2C _ = empty
+
+type2C :: TypeDecl -> Doc
+type2C UnknownType = text "void"
+type2C _ = text "<<type>>"
+
+phrase2C :: Phrase -> Doc
+phrase2C (Phrases p) = text "{" $+$ (nest 4 . vcat . map phrase2C $ p) $+$ text "}"
+phrase2C (ProcCall (Identifier name) params) = text name <> parens (hsep . punctuate (char ',') . map expr2C $ params) <> semi
+phrase2C (IfThenElse (expr) phrase1 mphrase2) = text "if" <> parens (expr2C expr) $+$ (phrase2C . wrapPhrase) phrase1 $+$ elsePart
+ where
+ elsePart | isNothing mphrase2 = empty
+ | otherwise = text "else" $$ (phrase2C . wrapPhrase) (fromJust mphrase2)
+phrase2C (Assignment ref expr) = ref2C ref <> text " = " <> expr2C expr <> semi
+phrase2C (WhileCycle expr phrase) = text "while" <> parens (expr2C expr) $$ (phrase2C $ wrapPhrase phrase)
+phrase2C (SwitchCase expr cases mphrase) = text "switch" <> parens (expr2C expr) <> text "of" $+$ (nest 4 . vcat . map case2C) cases
+ where
+ case2C :: (Expression, Phrase) -> Doc
+ case2C (e, p) = text "case" <+> parens (expr2C e) <> char ':' <> nest 4 (phrase2C p $+$ text "break;")
+{-
+ | RepeatCycle Expression Phrase
+ | ForCycle
+ -}
+phrase2C _ = empty
+
+wrapPhrase p@(Phrases _) = p
+wrapPhrase p = Phrases [p]
+
+expr2C :: Expression -> Doc
+expr2C (Expression s) = text s
+expr2C (BinOp op expr1 expr2) = parens $ (expr2C expr1) <+> op2C op <+> (expr2C expr2)
+expr2C (NumberLiteral s) = text s
+expr2C (HexNumber s) = text "0x" <> (text . map toLower $ s)
+expr2C (StringLiteral s) = doubleQuotes $ text s
+expr2C (Reference ref) = ref2C ref
+expr2C (PrefixOp op expr) = op2C op <+> expr2C expr
+ {-
+ | PostfixOp String Expression
+ | CharCode String
+ -}
+expr2C _ = empty
+
+
+ref2C :: Reference -> Doc
+ref2C (ArrayElement exprs ref) = ref2C ref <> (brackets . hcat) (punctuate comma $ map expr2C exprs)
+ref2C (SimpleReference (Identifier name)) = text name
+ref2C (RecordField (Dereference ref1) ref2) = ref2C ref1 <> text "->" <> ref2C ref2
+ref2C (RecordField ref1 ref2) = ref2C ref1 <> text "." <> ref2C ref2
+ref2C (Dereference ref) = parens $ text "*" <> ref2C ref
+ref2C (FunCall params ref) = ref2C ref <> parens (hsep . punctuate (char ',') . map expr2C $ params)
+ref2C (Address ref) = text "&" <> ref2C ref
+
+op2C "or" = text "|"
+op2C "and" = text "&"
+op2C "not" = text "!"
+op2C "xor" = text "^"
+op2C "div" = text "/"
+op2C "mod" = text "%"
+op2C "shl" = text "<<"
+op2C "shr" = text ">>"
+op2C "<>" = text "!="
+op2C "=" = text "=="
+op2C a = text a
+
+maybeVoid "" = "void"
+maybeVoid a = a