Commit ec11fb4f authored by Ian Wadham's avatar Ian Wadham

Redefine the Pause function and loadLevel. Streamline the game-over sequence....

Redefine the Pause function and loadLevel.  Streamline the game-over sequence.  Remove some obsolete code.  Disable some low-level debug messages.

svn path=/branches/work/kgoldrunner/; revision=949876
parent 5f2e9dff
......@@ -51,6 +51,10 @@
#endif
#define UserPause true
#define ProgramPause false
#define NewLevel true
/******************************************************************************/
/*********************** KGOLDRUNNER GAME CLASS *************************/
/******************************************************************************/
......@@ -68,8 +72,6 @@ KGrGame::KGrGame (KGrCanvas * theView,
fx (NumSounds),
editor (0)
{
newLevel = true; // Next level will be a new one.
loading = true; // Stop input until it is loaded.
settings (NORMAL_SPEED);
gameFrozen = true;
......@@ -107,7 +109,7 @@ void KGrGame::gameActions (int action)
saveGame();
break;
case PAUSE:
pause (true, (! gameFrozen));
freeze (UserPause, (! gameFrozen));
break;
case HIGH_SCORE:
showHighScores();
......@@ -294,7 +296,7 @@ void KGrGame::initGame()
void KGrGame::quickStartDialog()
{
// Make sure the game will not start during the Quick Start dialog.
pause (false, true);
freeze (ProgramPause, true);
qs = new KDialog (view);
......@@ -354,13 +356,13 @@ void KGrGame::quickStartPlay()
// now, to avoid interference with any tutorial messages there may be.
qs->hide();
showTutorialMessages (level); // Level has already been loaded.
pause (false, false);
freeze (ProgramPause, false);
}
void KGrGame::quickStartNewGame()
{
qs->accept();
pause (false, false);
freeze (ProgramPause, false);
startAnyLevel();
// TODO - If Cancelled, need somehow to do "showTutorialMessages()".
}
......@@ -372,9 +374,12 @@ void KGrGame::quickStartUseMenu()
myMessage (view, i18n ("Game Paused"),
i18n ("The game is halted. You will need to press the Pause key "
"(default P or Esc) when you are ready to play."));
pause (false, false);
freeze (ProgramPause, false);
// TODO - This is not working. The game stays frozen. prepareToPlay()?
pause (true, true);
freeze (UserPause, true);
// if (levelPlayer) {
// levelPlayer->prepareToPlay();
// }
}
void KGrGame::quickStartQuit()
......@@ -413,12 +418,7 @@ void KGrGame::startLevel (int startingAt, int requestedLevel)
int selectedLevel = requestedLevel;
// Halt the game during the dialog.
pause (false, true);
// modalFreeze = false;
// if (! gameFrozen) {
// modalFreeze = true;
// freeze();
// }
freeze (ProgramPause, true);
// Run the game and level selection dialog.
KGrSLDialog * sl = new KGrSLDialog (startingAt, requestedLevel, gameIndex,
......@@ -433,11 +433,7 @@ void KGrGame::startLevel (int startingAt, int requestedLevel)
<< "prefix" << gameList.at(selectedGame)->prefix
<< "selectedLevel" << selectedLevel;
// Unfreeze the game, but only if it was previously unfrozen.
pause (false, false);
// if (modalFreeze) {
// unfreeze();
// modalFreeze = false;
// }
freeze (ProgramPause, false);
if (selected) { // If OK, start the selected game and level.
newGame (selectedLevel, selectedGame);
......@@ -514,7 +510,7 @@ void KGrGame::herosDead()
#endif
// Still some life left, so PAUSE and then re-start the level.
emit showLives (lives);
// TODO - Should use a program freeze (pause (bool, bool)).
// TODO - Should use a program freeze (freeze (ProgramPause, bool)).
gameFrozen = true; // Freeze the animation and let
dyingTimer->setSingleShot (true);
dyingTimer->start (1500); // the player see what happened.
......@@ -526,34 +522,30 @@ void KGrGame::herosDead()
effects->play (fx[GameOverSound]);
#endif
emit showLives (lives);
pause (false, true);
QString gameOver = "<NOBR><B>" + i18n ("GAME OVER !!!") + "</B></NOBR>";
KGrMessage::information (view, gameData->name, gameOver);
freeze (ProgramPause, true);
checkHighScore(); // Check if there is a high score for this game.
// Offer the player a chance to start this level again with 5 new lives.
switch (KGrMessage::warning (view, i18n ("Retry Level?"),
i18n ("Would you like to try this level again?"),
QString gameOver = i18n ("<NOBR><B>GAME OVER !!!</B></NOBR><P>"
"Would you like to try this level again?</P>");
switch (KGrMessage::warning (view, i18n ("Game Over"), gameOver,
i18n ("&Try Again"), i18n ("&Finish"))) {
case 0:
pause (false, false); // Offer accepted.
freeze (ProgramPause, false); // Offer accepted.
newGame (level, gameIndex);
showTutorialMessages (level);
return;
break;
case 1:
break; // Offer rejected.
break; // Offer rejected.
}
// Game completely over: display the "ENDE" screen.
// TODO - The "ENDE" screen is displayed but it is frozen.
// TODO - If we restart the game on the "ENDE" screen then use the New
// Game dialog, the new level comes up but animation is haywire.
pause (false, false); // ... NOW we can unfreeze.
newLevel = true;
// Game completely over.
freeze (ProgramPause, false); // Unfreeze.
level = 0;
loadLevel (level); // Display the "ENDE" screen.
newLevel = false;
if (loadLevel (level, (! NewLevel))) { // Display the "ENDE" screen.
levelPlayer->prepareToPlay(); // Activate the animation.
}
}
}
......@@ -562,12 +554,11 @@ void KGrGame::finalBreath()
// Fix bug 95202: Avoid re-starting if the player selected
// edit mode before the 1.5 seconds were up.
if (! editor) {
loadLevel (level);
if (levelPlayer) {
if (loadLevel (level, (! NewLevel))) {
levelPlayer->prepareToPlay();
}
}
// TODO - Should use a program freeze (pause (bool, bool)).
// TODO - Should use a program freeze (freeze (ProgramPause, bool)).
gameFrozen = false; // Unfreeze the game, but don't move yet.
}
......@@ -588,14 +579,14 @@ void KGrGame::goUpOneLevel()
incScore (1500);
if (level >= gameData->nLevels) {
pause (false, true);
freeze (ProgramPause, true);
KGrMessage::information (view, gameData->name,
i18n ("<b>CONGRATULATIONS !!!!</b>"
"<p>You have conquered the last level in the "
"<b>\"%1\"</b> game !!</p>", gameData->name.constData()));
checkHighScore(); // Check if there is a high score for this game.
pause (false, false);
freeze (ProgramPause, false);
level = 0; // Game completed: display the "ENDE" screen.
}
else {
......@@ -603,10 +594,9 @@ void KGrGame::goUpOneLevel()
emit showLevel (level);
}
newLevel = true;
loadLevel (level);
showTutorialMessages (level);
newLevel = false;
if (loadLevel (level, NewLevel)) {
showTutorialMessages (level);
}
}
void KGrGame::setControlMode (const int mode)
......@@ -656,11 +646,6 @@ bool KGrGame::inEditMode()
return (editor != 0); // Return true if the game-editor is active.
}
bool KGrGame::isLoading()
{
return (loading); // Return true if a level is being loaded.
}
void KGrGame::toggleSoundsOnOff()
{
KConfigGroup gameGroup (KGlobal::config(), "KDEGame");
......@@ -672,7 +657,7 @@ void KGrGame::toggleSoundsOnOff()
#endif
}
void KGrGame::pause (const bool userAction, const bool on_off)
void KGrGame::freeze (const bool userAction, const bool on_off)
{
kDebug() << "PAUSE: userAction" << userAction << "on_off" << on_off;
kDebug() << "gameFrozen" << gameFrozen << "programFreeze" << programFreeze;
......@@ -710,51 +695,8 @@ void KGrGame::pause (const bool userAction, const bool on_off)
<< "programFreeze" << programFreeze;
}
// TODO - Remove these functions: superseded by pause (bool, bool).
// void KGrGame::freeze()
// {
// if ((! modalFreeze) && (! messageFreeze)) {
// emit gameFreeze (true); // Do visual feedback in the GUI.
// }
// gameFrozen = true; // Halt the game, by blocking all timer events.
// if (levelPlayer) {
// levelPlayer->pause (true);
// }
// }
// void KGrGame::unfreeze()
// {
// if ((! modalFreeze) && (! messageFreeze)) {
// emit gameFreeze (false);// Do visual feedback in the GUI.
// }
// gameFrozen = false; // Restart the game after the next tick().
// if (levelPlayer) {
// levelPlayer->pause (false);
// }
// }
// void KGrGame::setMessageFreeze (bool on_off)
// {
// if (on_off) { // Freeze the game action during a message.
// messageFreeze = false;
// if (! gameFrozen) {
// messageFreeze = true;
// freeze();
// }
// }
// else { // Unfreeze the game action after a message.
// if (messageFreeze) {
// unfreeze();
// messageFreeze = false;
// }
// }
// }
void KGrGame::newGame (const int lev, const int newGameIndex)
{
// Ignore player input from keyboard or mouse while the screen is set up.
loading = true; // "loadLevel (level)" will reset it.
view->goToBlack();
if (editor) {
emit setEditMenu (false); // Disable edit menu items and toolbar.
......@@ -763,8 +705,6 @@ void KGrGame::newGame (const int lev, const int newGameIndex)
editor = 0;
}
newLevel = true;
level = lev;
gameIndex = newGameIndex;
gameData = gameList.at (gameIndex);
......@@ -778,9 +718,7 @@ void KGrGame::newGame (const int lev, const int newGameIndex)
emit showScore (score);
emit showLevel (level);
newLevel = true;;
loadLevel (level);
newLevel = false;
loadLevel (level, NewLevel);
}
void KGrGame::startTutorial()
......@@ -833,13 +771,8 @@ void KGrGame::showHint()
// TODO - Maybe call this playLevel (level, game, flavour) and pair
// it with endLevel (status).
int KGrGame::loadLevel (int levelNo)
bool KGrGame::loadLevel (const int levelNo, const bool newLevel)
{
// TODO - Need to kill a level that is already playing, e.g. if we do
// New Game... in the middle of a level.
// Ignore player input from keyboard or mouse while the screen is set up.
loading = true;
// If there is a level being played, kill it, with no win/lose result.
if (levelPlayer) {
endLevel (NORMAL);
......@@ -857,8 +790,7 @@ int KGrGame::loadLevel (int levelNo)
systemDataDir : userDataDir;
// Read the level data.
if (! io.readLevelData (dir, gameData, levelNo, levelData)) {
loading = false;
return 0;
return false;
}
view->setLevel (levelNo); // Switch and render background if reqd.
......@@ -888,11 +820,6 @@ int KGrGame::loadLevel (int levelNo)
// If there is a hint, translate it right now.
levelHint = (len > 0) ? i18n ((const char *) levelData.hint) : "";
// TODO - Handle editor connections inside the editor.
// Disconnect edit-mode slots from signals from "view".
// disconnect (view, SIGNAL (mouseClick (int)), 0, 0);
// disconnect (view, SIGNAL (mouseLetGo (int)), 0, 0);
// Re-draw the playfield frame, level title and figures.
view->setTitle (getTitle());
......@@ -908,18 +835,13 @@ int KGrGame::loadLevel (int levelNo)
// executing when control goes to the endLevel (const int heroStatus) slot.
connect (levelPlayer, SIGNAL (endLevel (const int)),
this, SLOT (endLevel (const int)), Qt::QueuedConnection);
// Re-enable player input.
loading = false;
return 1;
return true;
}
void KGrGame::showTutorialMessages (int levelNo)
{
// Halt the game during message displays and mouse pointer moves.
pause (false, true);
// setMessageFreeze (true);
freeze (ProgramPause, true);
// Check if this is a tutorial collection and not on the "ENDE" screen.
if ((gameData->prefix.left (4) == "tute") && (levelNo != 0)) {
......@@ -936,8 +858,7 @@ void KGrGame::showTutorialMessages (int levelNo)
if (levelPlayer) {
levelPlayer->prepareToPlay();
}
pause (false, false); // Let the level begin.
// setMessageFreeze (false); // Let the level begin.
freeze (ProgramPause, false); // Let the level begin.
}
// TODO - Connect these somewhere else in the code, e.g. in KGrLevelPlayer.
......@@ -985,8 +906,7 @@ void KGrGame::kbControl (int dirn)
((controlMode == LAPTOP) && (dirn != DIG_RIGHT) && (dirn != DIG_LEFT)))
{
// Halt the game while a message is displayed.
pause (false, true);
// setMessageFreeze (true);
freeze (ProgramPause, true);
switch (KMessageBox::questionYesNo (view,
i18n ("You have pressed a key that can be used to control the "
......@@ -1008,8 +928,7 @@ void KGrGame::kbControl (int dirn)
}
// Unfreeze the game, but only if it was previously unfrozen.
pause (false, false);
// setMessageFreeze (false);
freeze (ProgramPause, false);
if (controlMode != KEYBOARD) {
return; // Stay in Mouse or Laptop Mode.
......@@ -1120,12 +1039,7 @@ void KGrGame::loadGame() // Re-load game, score and level.
}
// Halt the game during the loadGame() dialog.
pause (false, true);
// modalFreeze = false;
// if (!gameFrozen) {
// modalFreeze = true;
// freeze();
// }
freeze (ProgramPause, true);
QString s;
......@@ -1171,11 +1085,7 @@ void KGrGame::loadGame() // Re-load game, score and level.
}
// Unfreeze the game, but only if it was previously unfrozen.
pause (false, false);
// if (modalFreeze) {
// unfreeze();
// modalFreeze = false;
// }
freeze (ProgramPause, false);
delete lg;
}
......@@ -1679,14 +1589,12 @@ void KGrGame::loadSounds()
void KGrGame::myMessage (QWidget * parent, const QString &title, const QString &contents)
{
// Halt the game while the message is displayed, if not already halted.
pause (false, true);
// setMessageFreeze (true);
freeze (ProgramPause, true);
KGrMessage::information (parent, title, contents);
// Unfreeze the game, but only if it was previously unfrozen.
pause (false, false);
// setMessageFreeze (false);
freeze (ProgramPause, false);
}
#include "kgrgame.moc"
......
......@@ -53,7 +53,6 @@ public:
bool inMouseMode(); // True if the game is in mouse mode.
bool inEditMode(); // True if the game is in editor mode.
bool isLoading(); // True if a level is being loaded.
bool saveOK(); // Check if edits were saved.
......@@ -77,7 +76,7 @@ public slots:
void kbControl (int dirn);
// TODO - Only startAnyLevel() is used (from NewGame...).
// TODO - Only startAnyLevel() is used (from newGame...).
void startLevelOne(); // Start any game from level 1.
void startAnyLevel(); // Start any game from any level.
void startNextLevel(); // Start next level of current game.
......@@ -147,7 +146,7 @@ private slots:
private:
// TODO - Maybe call this playLevel (level, game, flavour) and pair
// it with endLevel (status).
int loadLevel (int levelNo);
bool loadLevel (const int levelNo, const bool newLevel);
void showTutorialMessages (int levelNo);
void checkHighScore(); // Check if high score for current game.
......@@ -179,12 +178,7 @@ private:
long score; // Current score.
long startScore; // Score at start of level.
bool newLevel; // Next level will be a new one.
bool loading; // Stop input until it's loaded.
bool gameFrozen; // Game stopped.
// bool modalFreeze; // Stop game during dialog.
// bool messageFreeze; // Stop game during message.
bool programFreeze; // Stop game during dialog, etc.
QTimer * dyingTimer; // For pause when the hero dies.
......@@ -212,10 +206,7 @@ private:
public slots:
void dbgControl (int code); // Authors' debugging aids.
void pause (const bool userAction, const bool on_off);
// void freeze(); // Stop the gameplay action.
// void unfreeze(); // Restart the gameplay action.
// void setMessageFreeze (bool);
void freeze (const bool userAction, const bool on_off);
private:
KGrEditor * editor; // The level-editor object.
......
#include "kgrdebug.h"
/****************************************************************************
* Copyright 2009 Ian Wadham <iandw.au@gmail.com> *
* *
......@@ -236,14 +238,14 @@ void KGrLevelGrid::calculateCellAccess (const int i, const int j)
void KGrLevelGrid::placeHiddenLadders()
{
int offset, i, j;
fprintf (stderr, "KGrLevelGrid::placeHiddenLadders() %02d width %02d\n",
dbe3 "KGrLevelGrid::placeHiddenLadders() %02d width %02d\n",
hiddenLadders.count(), width);
foreach (offset, hiddenLadders) {
i = offset % width;
j = offset / width;
changeCellAt (i, j, LADDER);
fprintf (stderr, "Show ladder at %04d [%02d,%02d]\n", offset, i, j);
dbe3 "Show ladder at %04d [%02d,%02d]\n", offset, i, j);
}
emit showHiddenLadders (hiddenLadders, width);
hiddenLadders.clear();
......
......@@ -495,12 +495,12 @@ bool KGrLevelPlayer::bumpingFriend (const int spriteId, const Direction dirn,
if (dI != 0) {
otherEnemy = grid->enemyOccupied (gridI + dI, gridJ);
if (otherEnemy > 0) {
kDebug() << otherEnemy << "at" << (gridI + dI) << gridJ
dbk3 << otherEnemy << "at" << (gridI + dI) << gridJ
<< "dirn" << ((otherEnemy > 0) ?
(enemies.at (otherEnemy - 1)->direction()) : 0)
<< "me" << spriteId << "dirn" << dirn;
if (enemies.at (otherEnemy - 1)->direction() != dirn) {
kDebug() << spriteId << "wants" << dirn << ":" << otherEnemy
dbk3 << spriteId << "wants" << dirn << ":" << otherEnemy
<< "at" << (gridI + dI) << gridJ << "wants"
<< (enemies.at (otherEnemy - 1)->direction());
return true;
......@@ -510,12 +510,12 @@ bool KGrLevelPlayer::bumpingFriend (const int spriteId, const Direction dirn,
if (dJ != 0) {
otherEnemy = grid->enemyOccupied (gridI, gridJ + dJ);
if (otherEnemy > 0) {
kDebug() << otherEnemy << "at" << gridI << (gridJ + dJ)
dbk3 << otherEnemy << "at" << gridI << (gridJ + dJ)
<< "dirn" << ((otherEnemy > 0) ?
(enemies.at (otherEnemy - 1)->direction()) : 0)
<< "me" << spriteId << "dirn" << dirn;
if (enemies.at (otherEnemy - 1)->direction() != dirn) {
kDebug() << spriteId << "wants" << dirn << ":" << otherEnemy
dbk3 << spriteId << "wants" << dirn << ":" << otherEnemy
<< "at" << gridI << (gridJ + dJ) << "wants"
<< (enemies.at (otherEnemy - 1)->direction());
return true;
......@@ -529,15 +529,15 @@ void KGrLevelPlayer::unstackEnemy (const int spriteId,
const int gridI, const int gridJ,
const int prevEnemy)
{
dbe "KGrLevelPlayer::unstackEnemy (%02d at [%02d,%02d] prevEnemy %02d)\n",
dbe2 "KGrLevelPlayer::unstackEnemy (%02d at [%02d,%02d] prevEnemy %02d)\n",
spriteId, gridI, gridJ, prevEnemy);
int nextId = grid->enemyOccupied (gridI, gridJ);
int prevId;
while (nextId > 0) {
prevId = enemies.at (nextId - 1)->getPrevInCell();
dbe "Next %02d prev %02d\n", nextId, prevId);
dbe2 "Next %02d prev %02d\n", nextId, prevId);
if (prevId == spriteId) {
dbe " SET IDs - id %02d prev %02d\n", nextId, prevEnemy);
dbe2 " SET IDs - id %02d prev %02d\n", nextId, prevEnemy);
enemies.at (nextId - 1)->setPrevInCell (prevEnemy);
// break;
}
......@@ -581,13 +581,13 @@ int KGrLevelPlayer::runnerGotGold (const int spriteId,
const bool hasGold, const bool lost)
{
if (hasGold) {
kDebug() << "GOLD COLLECTED BY" << spriteId << "AT" << i << j;
dbk3 << "GOLD COLLECTED BY" << spriteId << "AT" << i << j;
}
else if (lost) {
kDebug() << "GOLD LOST BY" << spriteId << "AT" << i << j;
dbk3 << "GOLD LOST BY" << spriteId << "AT" << i << j;
}
else {
kDebug() << "GOLD DROPPED BY" << spriteId << "AT" << i << j;
dbk3 << "GOLD DROPPED BY" << spriteId << "AT" << i << j;
}
if (! lost) {
grid->gotGold (i, j, hasGold); // Record pickup/drop on grid.
......
......@@ -297,7 +297,7 @@ void KGrEnemy::run (const int scaledTime)
else if ((pointCtr == 1) && (currDirection == DOWN) &&
(grid->cellType (gridI, gridJ + 1) == HOLE)) {
// Enemy is starting to fall into a hole.
kDebug() << spriteId
dbk3 << spriteId
<< "Falling into hole at:" << gridI << (gridJ + 1);
grid->changeCellAt (gridI, gridJ + 1, USEDHOLE);
dropGold();
......@@ -318,10 +318,10 @@ void KGrEnemy::run (const int scaledTime)
checkForGold();
// Find the next direction that could lead to the hero.
fprintf (stderr, "\n");
dbe3 "\n");
Direction nextDirection = levelPlayer->getEnemyDirection
(gridI, gridJ, leftRightSearch);
dbk << spriteId << "at" << gridI << gridJ << "===>" << nextDirection;
dbk3 << spriteId << "at" << gridI << gridJ << "===>" << nextDirection;
Flags OK = grid->enemyMoves (gridI, gridJ);
// If the enemy just left a hole, change it to empty. Must execute this
......@@ -329,7 +329,7 @@ void KGrEnemy::run (const int scaledTime)
// enemy will just fall back into the hole again.
if ((currDirection == UP) &&
(grid->cellType (gridI, gridJ + 1) == USEDHOLE)) {
kDebug() << spriteId << "Hole emptied at" << gridI << (gridJ + 1);
dbk3 << spriteId << "Hole emptied at" << gridI << (gridJ + 1);
if (grid->enemyOccupied (gridI, gridJ + 1) < 0) // IDW TODO needed?
grid->changeCellAt (gridI, gridJ + 1, HOLE);
}
......@@ -339,7 +339,7 @@ void KGrEnemy::run (const int scaledTime)
AnimationType nextAnimation = aType [nextDirection];
bool onEnemy = levelPlayer->standOnEnemy (spriteId, gridX, gridY);
if (onEnemy) kDebug() << spriteId << "STANDING ON ENEMY - dirn"
if (onEnemy) dbk3 << spriteId << "STANDING ON ENEMY - dirn"
<< nextDirection;
// TODO - Do a better, smoother job of falling while standing on enemy.
// TODO - Especially, do not do a climb-down action.
......@@ -354,12 +354,12 @@ void KGrEnemy::run (const int scaledTime)
// TODO - Check that the trap time is the same as in KGr 3.0.
// TODO - Ugly 7. Ugly arithmetic too. 270 * 7 / 4 = 472.5.
interval = (trapTime * 7) / pointsPerCell;
kDebug() << spriteId << "Arrived in USEDHOLE at" << gridI << gridJ;
dbk3 << spriteId << "Arrived in USEDHOLE at" << gridI << gridJ;
}
else {
nextDirection = UP;
nextAnimation = CLIMB_U;
kDebug() << spriteId << "Leaving USEDHOLE at" << gridI << gridJ;
dbk3 << spriteId << "Leaving USEDHOLE at" << gridI << gridJ;
}
}
else if (! canStand) {
......@@ -475,12 +475,12 @@ void KGrEnemy::dieAndReappear()
if (rules->reappearAtTop()) {
// Traditional or Scavenger rules.
kDebug() << spriteId << "REAPPEAR AT TOP";
dbk3 << spriteId << "REAPPEAR AT TOP";
levelPlayer->enemyReappear (gridI, gridJ);
}
else {
// KGoldrunner rules.
kDebug() << spriteId << "REAPPEAR AT BIRTHPLACE";
dbk3 << spriteId << "REAPPEAR AT BIRTHPLACE";
gridI = birthI;
gridJ = birthJ;
}
......@@ -499,7 +499,7 @@ void KGrEnemy::reserveCell (const int i, const int j)
// Push down a previous enemy or -1 if the cell was empty.
prevInCell = grid->enemyOccupied (i, j);
grid->setEnemyOccupied (i, j, spriteId);
dbe "%02d Entering [%02d,%02d] pushes %02d\n", spriteId, i, j, prevInCell);
dbe3 "%02d Entering [%02d,%02d] pushes %02d\n", spriteId, i, j, prevInCell);
}
void KGrEnemy::releaseCell (const int i, const int j)
......@@ -511,7 +511,7 @@ void KGrEnemy::releaseCell (const int i, const int j)
else {
levelPlayer->unstackEnemy (spriteId, i, j, prevInCell);
}
dbe "%02d Leaves [%02d,%02d] to %02d\n", spriteId, i, j, prevInCell);
dbe3 "%02d Leaves [%02d,%02d] to %02d\n", spriteId, i, j, prevInCell);
}
void KGrEnemy::showState (char option)
......
Markdown is supported
0%