Game::Game(std::istream &stream) { pleaseWait(); loadPuzzle(solvedPuzzle, stream); loadRules(rules, stream); memcpy(savedSolvedPuzzle, solvedPuzzle, sizeof(solvedPuzzle)); savedRules = rules; possibilities = new Possibilities(stream); puzzle = new Puzzle(iconSet, solvedPuzzle, possibilities); verHints = new VertHints(iconSet, rules, stream); horHints = new HorHints(iconSet, rules, stream); watch = new Watch(stream); hinted = true; }
void Game::genPuzzle() { pleaseWait(); int horRules, verRules; do { if (rules.size() > 0) deleteRules(); ::genPuzzle(solvedPuzzle, rules); getHintsQty(rules, verRules, horRules); } while ((horRules > 24) || (verRules > 15)); memcpy(savedSolvedPuzzle, solvedPuzzle, sizeof(solvedPuzzle)); savedRules = rules; hinted = false; }
bool Creature::canFlee(bool displayFail, bool checkTimer) { bool crtInRoom=false; long t=0; int i=0; if(isMonster()) { if(!flagIsSet(M_WILL_FLEE) || flagIsSet(M_DM_FOLLOW)) return(false); if(hp.getCur() > hp.getMax()/5) return(false); if(flagIsSet(M_PERMENANT_MONSTER)) return(false); } else { //Player* pThis = getPlayer(); if(!ableToDoCommand()) return(false); if(flagIsSet(P_SITTING)) { if(displayFail) print("You have to stand up first.\n"); return(false); } if(isEffected("hold-person")) { if(displayFail) print("You are unable to move right now.\n"); return(false); } // blah blah re-submit if( (cClass == CreatureClass::BERSERKER || cClass == CreatureClass::CLERIC) && isEffected("berserk") ) { if(displayFail) printColor("^rYour lust for battle prevents you from fleeing!\n"); return(false); } if(checkTimer && !isEffected("fear") && !isStaff()) { t = time(0); i = MAX(getLTAttack(), MAX(lasttime[LT_SPELL].ltime,lasttime[LT_READ_SCROLL].ltime)) + 3L; if(t < i) { if(displayFail) pleaseWait(i-t); return(false); } } // confusion and drunkenness overrides following checks if(isEffected("confusion") || isEffected("drunkenness")) return(true); // players can only flee if someone/something else is in the room for(Monster* mons : getConstRoomParent()->monsters) { if(!mons->isPet()) { crtInRoom = true; break; } } if(!crtInRoom) { for(Player* ply : getConstRoomParent()->players) { if(ply == this) continue; if(!ply->isStaff()) { crtInRoom = true; break; } } } if( !crtInRoom && !checkStaff("There's nothing to flee from!\n") ) { getAsPlayer()->setFleeing(false); return(false); } } return(true); }