[kgoldrunner/frameworks] /: Merge remote-tracking branch 'origin/master' into frameworks

Luigi Toscano null at kde.org
Thu Apr 27 22:21:30 UTC 2017


Git commit f20f59d52d116af84b9fcbb484efb56bcdf11ff3 by Luigi Toscano.
Committed on 26/04/2017 at 19:36.
Pushed by ltoscano into branch 'frameworks'.

Merge remote-tracking branch 'origin/master' into frameworks

- adapt few imported kDebug as qCDebug(KGOLDRUNNER_LOG);
- use the variable provided by ECM to set the target directory for
  the appdata file.

M  +37   -10   doc/index.docbook
M  +9    -1    gamedata/CMakeLists.txt
M  +1    -0    src/CMakeLists.txt
M  +60   -26   src/kgoldrunner.cpp
M  +1    -0    src/kgoldrunner.h
M  +188  -83   src/kgrgame.cpp
M  +40   -13   src/kgrgameio.cpp
M  +4    -25   src/kgrlevelplayer.cpp
M  +2    -2    src/kgrrenderer.cpp
M  +52   -14   src/kgrrunner.cpp
M  +2    -2    src/kgrscene.cpp
M  +4    -0    src/kgrselector.cpp
M  +1    -1    src/main.cpp
M  +1    -1    src/org.kde.kgoldrunner.desktop

https://commits.kde.org/kgoldrunner/f20f59d52d116af84b9fcbb484efb56bcdf11ff3

diff --cc gamedata/CMakeLists.txt
index fe6db5e,23b6737..8736c25
--- a/gamedata/CMakeLists.txt
+++ b/gamedata/CMakeLists.txt
@@@ -26,5 -28,11 +28,11 @@@ install( FILES game_blb.tx
                 rec_demo.txt
                 rec_GMGR.txt
  	       rec_GRII.txt
+                sol_blb.txt
+                sol_fd.txt
+ 	       sol_kgr.txt
+ 	       sol_plws.txt
+ 	       sol_tute.txt
+ 	       sol_tutea.txt
 -   DESTINATION ${DATA_INSTALL_DIR}/kgoldrunner/system )
 +   DESTINATION ${KDE_INSTALL_DATADIR}/kgoldrunner/system )
  
diff --cc src/CMakeLists.txt
index 4e36aaf,7706dcb..35cdab0
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@@ -39,16 -30,8 +39,17 @@@ install(TARGETS kgoldrunner  ${KDE_INST
  
  ########### install files ###############
  
 -install( PROGRAMS org.kde.kgoldrunner.desktop  DESTINATION  ${XDG_APPS_INSTALL_DIR} )
 -install( FILES kgoldrunnerui.rc  DESTINATION  ${DATA_INSTALL_DIR}/kgoldrunner )
 -install(FILES org.kde.kgoldrunner.appdata.xml DESTINATION ${SHARE_INSTALL_PREFIX}/metainfo/ )
 +install(PROGRAMS org.kde.kgoldrunner.desktop  DESTINATION  ${KDE_INSTALL_APPDIR})
 +install(FILES kgoldrunnerui.rc  DESTINATION  ${KDE_INSTALL_KXMLGUI5DIR}/kgoldrunner)
++install(FILES org.kde.kgoldrunner.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
 +
 +ecm_install_icons(ICONS
 +    128-apps-kgoldrunner.png
 +    16-apps-kgoldrunner.png
 +    22-apps-kgoldrunner.png
 +    32-apps-kgoldrunner.png
 +    48-apps-kgoldrunner.png
 +    64-apps-kgoldrunner.png
 +    DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor
 +)
  
 -kde4_install_icons( ${ICON_INSTALL_DIR} )
diff --cc src/kgoldrunner.cpp
index cfa2bbb,e209d5e..26abe08
--- a/src/kgoldrunner.cpp
+++ b/src/kgoldrunner.cpp
@@@ -115,7 -114,10 +115,7 @@@ KGoldrunner::KGoldrunner(
  /*************************  SET UP THE USER INTERFACE  ************************/
  /******************************************************************************/
  
-     // Tell the KMainWindow that the KGrCanvas object is the main widget.
 -    // Get catalog for translation.
 -    KGlobal::locale()->insertCatalog ( QLatin1String( "libkdegames" ));
 -
+     // Tell the KMainWindow that the KGrView object is the main widget.
      setCentralWidget (view);
  
      scene       = view->gameScene ();
@@@ -225,8 -230,18 +228,18 @@@ void KGoldrunner::setupActions(
      actionCollection()->addAction (saveGame->objectName(), saveGame);
      gameMapper->setMapping (saveGame, SAVE_GAME);
      saveGame->setText (i18n ("&Save Game..."));
 -    saveGame->setShortcut (Qt::Key_S); // Alternate key.
 +    actionCollection()->setDefaultShortcut(saveGame, Qt::Key_S); // Alternate key.
  
+     // The name of the solution-file is 'sol_<prefix>.txt', where <prefix> is
+     // the unique prefix belonging to the game involved (eg. plws, tute, etc.).
+     a        = gameAction ("save_solution", SAVE_SOLUTION,
+                            i18n ("Save A Solution..."),
+                            i18n ("Save A Solution..."),
+                            i18n ("Save a solution for a level into a file "
+                                  "called 'sol_<prefix>.txt' in your "
+ 				 "user's data directory..."),
+                            Qt::ShiftModifier + Qt::Key_S);
+ 
      // Pause
      // Show High Scores
      // Get a Hint
@@@ -648,9 -663,10 +661,10 @@@ void KGoldrunner::keyControl (const QSt
                                const QKeySequence & shortcut, const int code,
                                const bool mover)
  {
 -    KAction * a = actionCollection()->addAction (name);
 +    QAction * a = actionCollection()->addAction (name);
      a->setText (text);
 -    a->setShortcut (shortcut);
 +    actionCollection()->setDefaultShortcut(a, shortcut);
+     a->setAutoRepeat (false);		// Avoid repeats of signals by QAction.
  
      // If this is a move-key, let keyPressEvent() through, instead of signal.
      if (mover) {
diff --cc src/kgrgame.cpp
index cb6e88f,2e894b1..b7cb7e7
--- a/src/kgrgame.cpp
+++ b/src/kgrgame.cpp
@@@ -112,11 -111,11 +112,11 @@@ KGrGame::KGrGame (KGrView * theView
      gameFrozen = false;
  
      dyingTimer = new QTimer (this);
 -    connect (dyingTimer, SIGNAL (timeout()),  SLOT (finalBreath()));
 +    connect(dyingTimer, &QTimer::timeout, this, &KGrGame::finalBreath);
  
      // Initialise random number generator.
 -    randomGen = new KRandomSequence (time (0));
 -    // kDebug() << "RANDOM NUMBER GENERATOR INITIALISED";
 +    randomGen = new KRandomSequence (std::time(nullptr));
-     qCDebug(KGOLDRUNNER_LOG) << "RANDOM NUMBER GENERATOR INITIALISED";
++    //qCDebug(KGOLDRUNNER_LOG) << "RANDOM NUMBER GENERATOR INITIALISED";
  
      scene->setReplayMessage (i18n("Click anywhere to begin live play"));
  }
@@@ -197,7 -200,7 +201,7 @@@ void KGrGame::gameActions (const int ac
              return;
          }
          level++;
-         qCDebug(KGOLDRUNNER_LOG) << "Game" << gameList.at(gameIndex)->name << "level" << level;
 -        // kDebug() << "Game" << gameList.at(gameIndex)->name << "level" << level;
++        //qCDebug(KGOLDRUNNER_LOG) << "Game" << gameList.at(gameIndex)->name << "level" << level;
          newGame (level, gameIndex);
          showTutorialMessages (level);
          break;
@@@ -329,8 -335,8 +336,8 @@@ void KGrGame::editActions (const int ac
          prefix    = gameList.at (gameIndex)->prefix;
          level     = lev;
  
-         qCDebug(KGOLDRUNNER_LOG) << "Saving to KConfigGroup";
 -        // kDebug() << "Saving to KConfigGroup";
 -        KConfigGroup gameGroup (KGlobal::config(), "KDEGame");
++        //qCDebug(KGOLDRUNNER_LOG) << "Saving to KConfigGroup";
 +        KConfigGroup gameGroup (KSharedConfig::openConfig(), "KDEGame");
          gameGroup.writeEntry ("GamePrefix", prefix);
          gameGroup.writeEntry ("Level_" + prefix, level);
          gameGroup.sync();		// Ensure that the entry goes to disk.
@@@ -426,7 -432,7 +433,7 @@@ void KGrGame::initGame(
                    "SndFile libraries were present when it was compiled and built."),
                    "WarningNoSound");
  #endif
-     qCDebug(KGOLDRUNNER_LOG) << "Entered, draw the initial graphics now ...";
 -    // kDebug() << "Entered, draw the initial graphics now ...";
++    //qCDebug(KGOLDRUNNER_LOG) << "Entered, draw the initial graphics now ...";
  
      // Get the most recent collection and level that was played by this user.
      // If he/she has never played before, set it to Tutorial, level 1.
@@@ -434,7 -440,7 +441,7 @@@
      QString prevGamePrefix = gameGroup.readEntry ("GamePrefix", "tute");
      int prevLevel          = gameGroup.readEntry ("Level_" + prevGamePrefix, 1);
  
-     qCDebug(KGOLDRUNNER_LOG)<< "Config() Game and Level" << prevGamePrefix << prevLevel;
 -    // kDebug()<< "Config() Game and Level" << prevGamePrefix << prevLevel;
++    //qCDebug(KGOLDRUNNER_LOG)<< "Config() Game and Level" << prevGamePrefix << prevLevel;
  
      // Use that game and level, if it is among the current games.
      // Otherwise, use the first game in the list and level 1.
@@@ -473,7 -479,7 +480,7 @@@
  #ifdef KGAUDIO_BACKEND_OPENAL
          // Set up sounds, if required in config.
          soundOn = gameGroup.readEntry ("Sound", false);
-         qCDebug(KGOLDRUNNER_LOG) << "Sound" << soundOn;
 -        // kDebug() << "Sound" << soundOn;
++        //qCDebug(KGOLDRUNNER_LOG) << "Sound" << soundOn;
          if (soundOn) {
              loadSounds();
              effects->setMuted (false);
@@@ -481,7 -487,7 +488,7 @@@
          emit setToggle ("options_sounds", soundOn);
  
          stepsOn = gameGroup.readEntry ("StepSounds", false);
-         qCDebug(KGOLDRUNNER_LOG) << "StepSounds" << stepsOn;
 -        // kDebug() << "StepSounds" << stepsOn;
++        //qCDebug(KGOLDRUNNER_LOG) << "StepSounds" << stepsOn;
          emit setToggle ("options_steps", stepsOn);
  #endif
  
@@@ -511,7 -547,13 +548,13 @@@ bool KGrGame::startDemo (const Owner de
  {
      // Find the relevant file and the list of levels it contains.
      QString     dir      = (demoOwner == SYSTEM) ? systemDataDir : userDataDir;
-     QString     filepath = dir + "rec_" + pPrefix + ".txt";
+     QString     filepath;
+     if (! getRecordingName (dir, pPrefix, filepath)) {
 -	kDebug() << "No file found by getRecordingName() for" << dir << pPrefix;
++	qCDebug(KGOLDRUNNER_LOG) << "No file found by getRecordingName() for" << dir << pPrefix;
+ 	return false;
+     }
+     dbk1 << "Owner" << demoOwner << "type" << demoType
+          << pPrefix << levelNo << "filepath" << filepath;
      KConfig     config (filepath, KConfig::SimpleConfig);
      QStringList demoList = config.groupList();
      dbk1 << "DEMO LIST" << demoList.count() << demoList;
@@@ -765,11 -807,11 +808,11 @@@ bool KGrGame::selectGame (const SelectA
      bool selected = sl->selectLevel (selectedGame, selectedLevel);
      delete sl;
  
-     qCDebug(KGOLDRUNNER_LOG) << "After dialog - programFreeze" << programFreeze;
-     qCDebug(KGOLDRUNNER_LOG) << "selected" << selected << "gameFrozen" << gameFrozen;
-     qCDebug(KGOLDRUNNER_LOG) << "selectedGame" << selectedGame
-              << "prefix" << gameList.at(selectedGame)->prefix
-              << "selectedLevel" << selectedLevel;
 -    // kDebug() << "After dialog - programFreeze" << programFreeze;
 -    // kDebug() << "selected" << selected << "gameFrozen" << gameFrozen;
 -    // kDebug() << "selectedGame" << selectedGame
 -             // << "prefix" << gameList.at(selectedGame)->prefix
 -             // << "selectedLevel" << selectedLevel;
++    //qCDebug(KGOLDRUNNER_LOG) << "After dialog - programFreeze" << programFreeze;
++    //qCDebug(KGOLDRUNNER_LOG) << "selected" << selected << "gameFrozen" << gameFrozen;
++    //qCDebug(KGOLDRUNNER_LOG) << "selectedGame" << selectedGame
++          //   << "prefix" << gameList.at(selectedGame)->prefix
++          //   << "selectedLevel" << selectedLevel;
      // Unfreeze the game, but only if it was previously unfrozen.
      freeze (ProgramPause, false);
      return selected;
@@@ -1021,9 -1084,9 +1083,9 @@@ void KGrGame::herosDead(
  
  void KGrGame::finalBreath()
  {
-     dbk << "Connecting fadeFinished()";
 -    // dbk << "Connecting fadeFinished()";
 -    connect (scene, SIGNAL (fadeFinished()), this, SLOT (repeatLevel()));
 -    // dbk << "Calling scene->fadeOut()";
++    //dbk << "Connecting fadeFinished()";
 +    connect(scene, &KGrScene::fadeFinished, this, &KGrGame::repeatLevel);
-     dbk << "Calling scene->fadeOut()";
++    //dbk << "Calling scene->fadeOut()";
      scene->fadeIn (false);
  }
  
@@@ -1048,9 -1111,9 +1110,9 @@@ void KGrGame::levelCompleted(
  {
      playSound (CompletedSound);
  
-     dbk << "Connecting fadeFinished()";
 -    // dbk << "Connecting fadeFinished()";
 -    connect (scene, SIGNAL (fadeFinished()), this, SLOT (goUpOneLevel()));
 -    // dbk << "Calling scene->fadeOut()";
++    //dbk << "Connecting fadeFinished()";
 +    connect(scene, &KGrScene::fadeFinished, this, &KGrGame::goUpOneLevel);
-     dbk << "Calling scene->fadeOut()";
++    //dbk << "Calling scene->fadeOut()";
      scene->fadeIn (false);
  }
  
@@@ -1137,7 -1200,7 +1199,7 @@@ void KGrGame::setTimeScale (const int a
  
      if (levelPlayer && (! playback)) {
          // Change speed during play, but not during a demo or replay.
-         qCDebug(KGOLDRUNNER_LOG) << "setTimeScale" << (timeScale);
 -        // kDebug() << "setTimeScale" << (timeScale);
++        //qCDebug(KGOLDRUNNER_LOG) << "setTimeScale" << (timeScale);
          levelPlayer->setTimeScale (timeScale);
      }
  }
@@@ -1174,8 -1237,8 +1236,8 @@@ void KGrGame::toggleSoundsOnOff (const 
  void KGrGame::freeze (const bool userAction, const bool on_off)
  {
      QString type = userAction ? "UserAction" : "ProgramAction";
-     qCDebug(KGOLDRUNNER_LOG) << "PAUSE:" << type << on_off;
-     qCDebug(KGOLDRUNNER_LOG) << "gameFrozen" << gameFrozen << "programFreeze" << programFreeze;
 -    // kDebug() << "PAUSE:" << type << on_off;
 -    // kDebug() << "gameFrozen" << gameFrozen << "programFreeze" << programFreeze;
++    //qCDebug(KGOLDRUNNER_LOG) << "PAUSE:" << type << on_off;
++    //qCDebug(KGOLDRUNNER_LOG) << "gameFrozen" << gameFrozen << "programFreeze" << programFreeze;
  
  #ifdef KGAUDIO_BACKEND_OPENAL
      if (on_off && effects) {		// If pausing and sounds are loaded, cut
@@@ -1187,23 -1250,23 +1249,23 @@@
          // The program needs to freeze the game during a message, dialog, etc.
          if (on_off) {
              if (gameFrozen) {
-                 if (programFreeze) {
-                     qCDebug(KGOLDRUNNER_LOG) << "P: The program has already frozen the game.";
-                 }
-                 else {
-                     qCDebug(KGOLDRUNNER_LOG) << "P: The user has already frozen the game.";
-                 }
 -                // if (programFreeze) {
 -                    // kDebug() << "P: The program has already frozen the game.";
 -                // }
 -                // else {
 -                    // kDebug() << "P: The user has already frozen the game.";
 -                // }
++                //if (programFreeze) {
++                //    qCDebug(KGOLDRUNNER_LOG) << "P: The program has already frozen the game.";
++                //}
++                //else {
++                //    qCDebug(KGOLDRUNNER_LOG) << "P: The user has already frozen the game.";
++                //}
                  return;			// The game is already frozen.
              }
              programFreeze = false;
          }
          else if (! programFreeze) {
-             if (gameFrozen) {
-                 qCDebug(KGOLDRUNNER_LOG) << "P: The user will keep the game frozen.";
-             }
-             else {
-                 qCDebug(KGOLDRUNNER_LOG) << "P: The game is NOT frozen.";
-             }
 -            // if (gameFrozen) {
 -                // kDebug() << "P: The user will keep the game frozen.";
 -            // }
 -            // else {
 -                // kDebug() << "P: The game is NOT frozen.";
 -            // }
++            //if (gameFrozen) {
++            //    qCDebug(KGOLDRUNNER_LOG) << "P: The user will keep the game frozen.";
++            //}
++            //else {
++            //    qCDebug(KGOLDRUNNER_LOG) << "P: The game is NOT frozen.";
++            //}
              return;			// The user will keep the game frozen.
          }
          // The program will succeed in freezing or unfreezing the game.
@@@ -1223,8 -1286,8 +1285,8 @@@
      if (levelPlayer) {
          levelPlayer->pause (on_off);
      }
-     qCDebug(KGOLDRUNNER_LOG) << "RESULT: gameFrozen" << gameFrozen
-              << "programFreeze" << programFreeze;
 -    // kDebug() << "RESULT: gameFrozen" << gameFrozen
 -             // << "programFreeze" << programFreeze;
++    //qCDebug(KGOLDRUNNER_LOG) << "RESULT: gameFrozen" << gameFrozen
++    //         << "programFreeze" << programFreeze;
  }
  
  void KGrGame::showHint()
@@@ -1995,9 -2087,8 +2088,8 @@@ bool KGrGame::initRecordingData (const 
          recording->dateTime    = QDateTime::currentDateTime()
                                                .toUTC()
                                                .toString (Qt::ISODate);
-         qCDebug(KGOLDRUNNER_LOG) << "Recording at" << recording->dateTime;
 -        // kDebug() << "Recording at" << recording->dateTime;
++        //qCDebug(KGOLDRUNNER_LOG) << "Recording at" << recording->dateTime;
  
-         KGrGameData * gameData = gameList.at (gameIndex);
          recording->owner       = gameData->owner;
          recording->rules       = gameData->rules;
          recording->prefix      = gameData->prefix;
@@@ -2024,11 -2118,12 +2119,12 @@@
      return true;
  }
  
- void KGrGame::saveRecording()
+ void KGrGame::saveRecording (const QString & filetype)
  {
-     QString filename = userDataDir + "rec_" + prefix + ".txt";
-     QString groupName = prefix + QString::number(level).rightJustified(3,'0');
-     qCDebug(KGOLDRUNNER_LOG) << filename << groupName;
+     QString filename = userDataDir + filetype + prefix + ".txt";
+     QString groupName = prefix +
+                         QString::number(recording->level).rightJustified(3,'0');
 -    // kDebug() << filename << groupName;
++    //qCDebug(KGOLDRUNNER_LOG) << filename << groupName;
  
      KConfig config (filename, KConfig::SimpleConfig);
      KConfigGroup configGroup = config.group (groupName);
@@@ -2083,10 -2173,14 +2174,14 @@@
  bool KGrGame::loadRecording (const QString & dir, const QString & prefix,
                                                    const int levelNo)
  {
-     qCDebug(KGOLDRUNNER_LOG) << prefix << levelNo;
-     QString filename  = dir + "rec_" + prefix + ".txt";
 -    // kDebug() << prefix << levelNo;
++    //qCDebug(KGOLDRUNNER_LOG) << prefix << levelNo;
+     QString     filename;
+     if (! getRecordingName (dir, prefix, filename)) {
 -	kDebug() << "No file found by getRecordingName() for" << dir << prefix;
++	qCDebug(KGOLDRUNNER_LOG) << "No file found by getRecordingName() for" << dir << prefix;
+ 	return false;
+     }
      QString groupName = prefix + QString::number(levelNo).rightJustified(3,'0');
-     qCDebug(KGOLDRUNNER_LOG) << filename << groupName;
 -    kDebug() << "loadRecording" << filename << prefix << levelNo << groupName;
++    qCDebug(KGOLDRUNNER_LOG) << "loadRecording" << filename << prefix << levelNo << groupName;
  
      KConfig config (filename, KConfig::SimpleConfig);
      if (! config.hasGroup (groupName)) {
@@@ -2126,8 -2224,12 +2225,12 @@@
              }
          }
          if (index >= 0) {
-             // Get the current translation of the name of the game.
+             // Get digWhileFalling flag and current translation of name of game.
+             recording->digWhileFalling = gameList.at (index)->digWhileFalling;
              recording->gameName = gameList.at (index)->name;
 -            // kDebug() << "GAME" << gameList.at (index)->name << levelNo
++            // qCDebug(KGOLDRUNNER_LOG) << "GAME" << gameList.at (index)->name << levelNo
+                      // << "set digWhileFalling to"
+                      // << gameList.at (index)->digWhileFalling;
  
              // Read the current level data.
              KGrGameIO    io (view);
@@@ -2140,6 -2246,10 +2247,10 @@@
                                           i18n (levelData.name.constData()) : "";
                  recording->hint        = (levelData.hint.size() > 0) ?
                                           i18n (levelData.hint.constData()) : "";
+                 recording->digWhileFalling = levelData.digWhileFalling;
 -                // kDebug() << "LEVEL" << gameList.at (index)->name << levelNo
++                // qCDebug(KGOLDRUNNER_LOG) << "LEVEL" << gameList.at (index)->name << levelNo
+                          // << "digWhileFalling is NOW"
+                          // << levelData.digWhileFalling;
              }
          }
      }
diff --cc src/kgrgameio.cpp
index c673daa,d2b6f9f..07d74eb
--- a/src/kgrgameio.cpp
+++ b/src/kgrgameio.cpp
@@@ -117,7 -112,26 +112,26 @@@ IOStatus KGrGameIO::fetchGameListDat
                  gameName = removeNewline (textLine.right (textLine.size() - n));
                  g->name  = i18n (gameName.constData());
              }
-             // //qCDebug(KGOLDRUNNER_LOG) << "Skill:" << g->skill << "Name:" << g->name;
+ 
+             // Check for further settings in this game.
+             // bool usedDwfOpt = false;		// For debug.
+             while ((c = getALine (kgr3Format, textLine)) == '.') {
+                 if (textLine.startsWith ("dwf ")) {
+                     // Dig while falling is allowed in this game, or not.
+                     g->digWhileFalling = textLine.endsWith (" false\n") ?
+                                          false : true;
+                     // usedDwfOpt = true;		// For debug.
+                 }
+             }
+ 
+             if (kgr3Format && (c == ' ')) {
+                 gameName = removeNewline (textLine);
+                 g->name  = i18n (gameName.constData());
+                 c = getALine (kgr3Format, textLine);
+             }
 -            // qDebug() << "Dig while falling" << g->digWhileFalling
++            //qCDebug(KGOLDRUNNER_LOG) << "Dig while falling" << g->digWhileFalling
+                      // << "usedDwfOpt" << usedDwfOpt << "Game" << g->name;
 -            // kDebug() << "Skill:" << g->skill << "Name:" << g->name;
++            //qCDebug(KGOLDRUNNER_LOG) << "Skill:" << g->skill << "Name:" << g->name;
  
              // Loop to accumulate lines of about-data.  If kgr3Format, exit on
              // EOF or 'L' line.  If not kgr3Format, exit on EOF or numeric line.
@@@ -130,9 -143,10 +143,10 @@@
                      break;
                  }
                  g->about.append (textLine);
+                 c = getALine (kgr3Format, textLine);
              }
              g->about = removeNewline (g->about);	// Remove final '\n'.
 -            // kDebug() << "Info about: [" + g->about + "]";
 +            // //qCDebug(KGOLDRUNNER_LOG) << "Info about: [" + g->about + "]";
  
              if ((! kgr3Format) && (c != '\0')) {
                  filePath = dir + filename;
diff --cc src/kgrlevelplayer.cpp
index 19c286c,461722e..3de17f9
--- a/src/kgrlevelplayer.cpp
+++ b/src/kgrlevelplayer.cpp
@@@ -71,30 -71,8 +71,8 @@@ KGrLevelPlayer::~KGrLevelPlayer(
  {
      qDeleteAll(dugBricks);
      dugBricks.clear(); //TODO: necessary?
 -    // kDebug() << "LEVEL PLAYER BEING DELETED.";
 +    //qCDebug(KGOLDRUNNER_LOG) << "LEVEL PLAYER BEING DELETED.";
      playerCount--;
- 
- // TODO - Remove this debugging code.
- if (recording) {
-     int ch = 0;
-     for (int i = 0; i <= (recIndex + 1); i ++) {
-         ch = (uchar)(recording->content.at(i));
-         dbe1 "%03d ", ch);
-         if (ch == 0)
-             break;
-     }
-     dbe1 "\n%d bytes\n", recIndex + 1);
-     int j = 0;
-     while (j < recording->draws.size()) {
-         ch = (uchar)(recording->draws.at(j));
-         dbe1 "%03d ", ch);
-         if (ch == 0)
-             break;
-         j++;
-     }
-     dbe1 "\n%d bytes\n", j);
- }
- 
  }
  
  void KGrLevelPlayer::init (KGrView * view,
diff --cc src/kgrrenderer.cpp
index cd2f79e,d01e836..37d49c9
--- a/src/kgrrenderer.cpp
+++ b/src/kgrrenderer.cpp
@@@ -98,7 -99,7 +98,7 @@@ void KGrRenderer::matchThemes (const Kg
  
  void KGrRenderer::currentThemeChanged (const KgTheme* currentSetTheme)
  {
-     qCDebug(KGOLDRUNNER_LOG) << "KGrRenderer::currentThemeChanged()" << currentSetTheme->name();
 -    // qDebug() << "KGrRenderer::currentThemeChanged()" << currentSetTheme->name();
++    //qCDebug(KGOLDRUNNER_LOG) << "KGrRenderer::currentThemeChanged()" << currentSetTheme->name();
  
      matchThemes (currentSetTheme);
      m_scene->changeTheme();
@@@ -274,7 -275,7 +274,7 @@@ QString KGrRenderer::getBackgroundKey (
  	}
      }
  
-     qCDebug(KGOLDRUNNER_LOG) << "BACKGROUND pixmap key" << pixmapKey;
 -    // qDebug() << "BACKGROUND pixmap key" << pixmapKey;
++    //qCDebug(KGOLDRUNNER_LOG) << "BACKGROUND pixmap key" << pixmapKey;
      return pixmapKey;
  }
  
diff --cc src/kgrrunner.cpp
index d98c7b6,3cf5127..b21d92b
--- a/src/kgrrunner.cpp
+++ b/src/kgrrunner.cpp
@@@ -73,10 -73,10 +73,10 @@@ void KGrRunner::getRules(
  {
      pointsPerCell = rules->pointsPerCell();
      turnAnywhere  = rules->turnAnywhere();
-     if (spriteId < 1) {
-         qCDebug(KGOLDRUNNER_LOG) << "pointsPerCell" << pointsPerCell
-                  << "turnAnywhere" << turnAnywhere;
-     }
 -    // if (spriteId < 1) {
 -        // kDebug() << "pointsPerCell" << pointsPerCell
 -                 // << "turnAnywhere" << turnAnywhere;
 -    // }
++    //if (spriteId < 1) {
++    //    qCDebug(KGOLDRUNNER_LOG) << "pointsPerCell" << pointsPerCell
++    //             << "turnAnywhere" << turnAnywhere;
++    //}
  }
  
  Situation KGrRunner::situation (const int scaledTime)
@@@ -149,7 -149,10 +149,10 @@@ bool KGrRunner::setNextMovement (const 
  
      interval = runTime;
  
-     KGrEnemy * onEnemy  = levelPlayer->standOnEnemy (spriteId, gridX, gridY);
+     // if (spriteType == HERO) {
 -        // kDebug() << "Calling standOnEnemy() for" << gridX << gridY;
++        // qCDebug(KGOLDRUNNER_LOG) << "Calling standOnEnemy() for" << gridX << gridY;
+     // }
+     onEnemy  = levelPlayer->standOnEnemy (spriteId, gridX, gridY);
      bool canStand = (OK & dFlag [STAND]) || (OK == 0) || onEnemy;
      if ((dir == DOWN) && (cellType == BAR)) {
          canStand = false;
@@@ -199,11 -202,14 +202,14 @@@ KGrHero::KGrHero (KGrLevelPlayer * pLev
                    int i, int j, int pSpriteId, KGrRuleBook * pRules)
      :
      KGrRunner (pLevelPlayer, pGrid, i, j, pSpriteId, pRules, 0),
-     nuggets (0)		// KGrLevelPlayer object will call hero->setNuggets().
+ 
+     // KGrLevelPlayer object will call setDigWhileFalling() and setNuggets().
+     digWhileFalling (true),
+     nuggets (0)
  {
-     qCDebug(KGOLDRUNNER_LOG) << "THE HERO IS BORN at" << i << j << "sprite ID" << pSpriteId;
 -    // kDebug() << "THE HERO IS BORN at" << i << j << "sprite ID" << pSpriteId;
++    //qCDebug(KGOLDRUNNER_LOG) << "THE HERO IS BORN at" << i << j << "sprite ID" << pSpriteId;
      rules->getHeroTimes (runTime, fallTime, enemyFallTime, trapTime);
-     qCDebug(KGOLDRUNNER_LOG) << "Hero run time" << runTime << "fall time" << fallTime;
 -    // kDebug() << "Hero run time" << runTime << "fall time" << fallTime;
++    //qCDebug(KGOLDRUNNER_LOG) << "Hero run time" << runTime << "fall time" << fallTime;
      interval = runTime;
  }
  
@@@ -231,7 -237,9 +237,9 @@@ HeroStatus KGrHero::run (const int scal
  
      // Check if we have fallen onto an enemy.  If so, continue at enemy-speed.
      if (falling && (interval != enemyFallTime)) {
-         if (levelPlayer->standOnEnemy (spriteId, gridX, gridY)) {
 -        // kDebug() << "Calling standOnEnemy() for" << gridX << gridY;
++        // qCDebug(KGOLDRUNNER_LOG) << "Calling standOnEnemy() for" << gridX << gridY;
+ 	onEnemy = levelPlayer->standOnEnemy (spriteId, gridX, gridY);
+         if (onEnemy != 0) {
              interval = enemyFallTime;
              // If MidCell, hero-speed animation overshoots, but looks OK.
          }
@@@ -333,6 -341,36 +341,36 @@@ bool KGrHero::dig (const Direction digg
          i = gridI + relativeI;
          j = gridJ + 1;
          result = true;
+ 
+         // If dig-while-falling is not allowed, prevent attempts to use it.
+         // The boolean defaults to true but can be read from a setting for
+         // the game, the specific level or a recording. So it can be false.
+         if (! digWhileFalling) {
+ 	    // Work out where the hero WILL be standing when he digs. In the
+ 	    // second case, he will dig the brick that is now right under him.
+             int nextGridI = (relativeI != 0) ? (gridI + relativeI/2) :
+                         ((currDirection == LEFT) ? (gridI - 1) : (gridI + 1));
+             Flags OK = grid->heroMoves (nextGridI, gridJ);
+             bool canStand = (OK & dFlag [STAND]) || (OK == 0);
+             bool enemyUnder = (onEnemy != 0);
+             // Must be on solid ground or on an enemy (standing or riding down).
+             if ((! canStand) && (nextGridI != gridI)) {
+ 		// If cannot move to next cell and stand, is an enemy under it?
 -                // kDebug() << "Calling standOnEnemy() at gridX" << gridX
++                // qCDebug(KGOLDRUNNER_LOG) << "Calling standOnEnemy() at gridX" << gridX
+                          // << "for" << (nextGridI * pointsPerCell) << gridY;
+                 enemyUnder = (levelPlayer->standOnEnemy (spriteId,
+                                         nextGridI * pointsPerCell, gridY) != 0);
+             }
+             if ((! canStand) && (! enemyUnder)) {
 -                kDebug() << "INVALID DIG: hero at" << gridI << gridJ
++                qCDebug(KGOLDRUNNER_LOG) << "INVALID DIG: hero at" << gridI << gridJ
+                          << "nextGridI" << nextGridI << "relI" << relativeI
+                          << "dirn" << currDirection << "brick at" << i << j
+                          << "heroMoves" << ((int) OK) << "canStand" << canStand
+                          << "enemyUnder" << enemyUnder;
+                 emit invalidDig();	// Issue warning re dig while falling.
+                 result = false;
+             }
+         }
      }
      if (result) {
          emit soundSignal (DigSound);
@@@ -363,11 -401,11 +401,11 @@@ KGrEnemy::KGrEnemy (KGrLevelPlayer * pL
      rulesType     = rules->getEnemyTimes (runTime, fallTime, trapTime);
      enemyFallTime = fallTime;
      interval      = runTime;
-     qCDebug(KGOLDRUNNER_LOG) << "ENEMY" << pSpriteId << "IS BORN at" << i << j;
-     if (pSpriteId < 2) {
-         qCDebug(KGOLDRUNNER_LOG) << "Enemy run time " << runTime << "fall time" << fallTime;
-         qCDebug(KGOLDRUNNER_LOG) << "Enemy trap time" << trapTime << "Rules type" << rulesType;
-     }
 -    // kDebug() << "ENEMY" << pSpriteId << "IS BORN at" << i << j;
 -    // if (pSpriteId < 2) {
 -        // kDebug() << "Enemy run time " << runTime << "fall time" << fallTime;
 -        // kDebug() << "Enemy trap time" << trapTime << "Rules type" << rulesType;
 -    // }
++    //qCDebug(KGOLDRUNNER_LOG) << "ENEMY" << pSpriteId << "IS BORN at" << i << j;
++    //if (pSpriteId < 2) {
++    //    qCDebug(KGOLDRUNNER_LOG) << "Enemy run time " << runTime << "fall time" << fallTime;
++    //    qCDebug(KGOLDRUNNER_LOG) << "Enemy trap time" << trapTime << "Rules type" << rulesType;
++    //}
      t.start(); // IDW
  }
  
diff --cc src/kgrscene.cpp
index dd97158,2da06e3..f05557e
--- a/src/kgrscene.cpp
+++ b/src/kgrscene.cpp
@@@ -106,7 -108,7 +106,7 @@@ KGrScene::~KGrScene(
  
  void KGrScene::redrawScene ()
  {
-     qCDebug(KGOLDRUNNER_LOG) << "REDRAW: m_sizeChanged" << m_sizeChanged << "m_themeChanged" << m_themeChanged;
 -    // qDebug() << "REDRAW: m_sizeChanged" << m_sizeChanged << "m_themeChanged" << m_themeChanged;
++    //qCDebug(KGOLDRUNNER_LOG) << "REDRAW: m_sizeChanged" << m_sizeChanged << "m_themeChanged" << m_themeChanged;
      bool redrawToolbar = false;
      if (m_sizeChanged) {
          // Calculate what size of tile will fit in the view.
@@@ -116,7 -118,7 +116,7 @@@
          m_topLeftX   = (size.width()  - m_tilesWide * tileSize)/2.0;
          m_topLeftY   = (size.height() - m_tilesHigh * tileSize)/2.0;
          setSceneRect   (0, 0, size.width(), size.height());
- 	qCDebug(KGOLDRUNNER_LOG) << "SIZE" << size << "TL" << m_topLeftX << m_topLeftY << "TILE" << tileSize << "was" << m_tileSize << m_toolbarTileSize;
 -	// qDebug() << "SIZE" << size << "TL" << m_topLeftX << m_topLeftY << "TILE" << tileSize << "was" << m_tileSize << m_toolbarTileSize;
++	//qCDebug(KGOLDRUNNER_LOG) << "SIZE" << size << "TL" << m_topLeftX << m_topLeftY << "TILE" << tileSize << "was" << m_tileSize << m_toolbarTileSize;
  
          // Make the fade-out/fade-in rectangle cover the playing area.
          m_spotlight->setRect (m_topLeftX + 2 * tileSize - 1,


More information about the kde-doc-english mailing list