void doMovement() { if(keys == GLFW_KEY_W && actionPress == GLFW_PRESS) processKeyboard(FORWARD, deltaTime); if(keys == GLFW_KEY_S && actionPress == GLFW_PRESS) processKeyboard(BACKWARD, deltaTime); if(keys == GLFW_KEY_A && actionPress == GLFW_PRESS) processKeyboard(LEFT, deltaTime); if(keys == GLFW_KEY_D && actionPress == GLFW_PRESS) processKeyboard(RIGHT, deltaTime); }
void CineEngine::mainLoop(int bootScriptIdx) { bool playerAction; byte di; uint16 mouseButton; if (_preLoad == false) { resetBgIncrustList(); setTextWindow(0, 0, 20, 200); errorVar = 0; addScriptToGlobalScripts(bootScriptIdx); menuVar = 0; // gfxRedrawPage(page0c, page0, page0c, page0, -1); // gfxWaitVBL(); // gfxRedrawMouseCursor(); inMenu = false; allowPlayerInput = 0; checkForPendingDataLoadSwitch = 0; fadeRequired = false; isDrawCommandEnabled = 0; waitForPlayerClick = 0; menuCommandLen = 0; playerCommand = -1; g_cine->_commandBuffer = ""; g_cine->_globalVars[VAR_MOUSE_X_POS] = 0; g_cine->_globalVars[VAR_MOUSE_Y_POS] = 0; if (g_cine->getGameType() == Cine::GType_OS) { g_cine->_globalVars[VAR_MOUSE_X_POS_2ND] = 0; g_cine->_globalVars[VAR_MOUSE_Y_POS_2ND] = 0; g_cine->_globalVars[VAR_BYPASS_PROTECTION] = 0; // set to 1 to bypass the copy protection g_cine->_globalVars[VAR_LOW_MEMORY] = 0; // set to 1 to disable some animations, sounds etc. } strcpy(newPrcName, ""); strcpy(newRelName, ""); strcpy(newObjectName, ""); strcpy(newMsgName, ""); strcpy(currentCtName, ""); strcpy(currentPartName, ""); g_sound->stopMusic(); } do { // HACK: Force amount of oxygen left to maximum during Operation Stealth's first arcade sequence. // This makes it possible to pass the arcade sequence for now. // FIXME: Remove the hack and make the first arcade sequence normally playable. if (g_cine->getGameType() == Cine::GType_OS) { Common::String bgName(renderer->getBgName()); // Check if the background is one of the three backgrounds // that are only used during the first arcade sequence. if (bgName == "28.PI1" || bgName == "29.PI1" || bgName == "30.PI1") { static const uint oxygenObjNum = 202, maxOxygen = 264; // Force the amount of oxygen left to the maximum. g_cine->_objectTable[oxygenObjNum].x = maxOxygen; } } // HACK: In Operation Stealth after the first arcade sequence jump player's position to avoid getting stuck. // After the first arcade sequence the player comes up stairs from // the water in Santa Paragua's downtown in front of the flower shop. // Previously he was completely stuck after getting up the stairs. // If the background is the one used in the flower shop scene ("21.PI1") // and the player is at the exact location after getting up the stairs // then we just nudge him a tiny bit away from the stairs and voila, he's free! // Maybe the real problem behind all this is collision data related as it looks // like there's some boundary right there near position (204, 110) which we can // jump over by moving the character to (204, 109). The script handling the // flower shop scene is AIRPORT.PRC's 13th script. // FIXME: Remove the hack and solve what's really causing the problem in the first place. if (g_cine->getGameType() == Cine::GType_OS) { if (scumm_stricmp(renderer->getBgName(), "21.PI1") == 0 && g_cine->_objectTable[1].x == 204 && g_cine->_objectTable[1].y == 110) { g_cine->_objectTable[1].y--; // Move the player character upward on-screen by one pixel } } stopMusicAfterFadeOut(); di = executePlayerInput(); // Clear the zoneQuery table (Operation Stealth specific) if (g_cine->getGameType() == Cine::GType_OS) { Common::set_to(g_cine->_zoneQuery.begin(), g_cine->_zoneQuery.end(), 0); } if (g_cine->getGameType() == Cine::GType_OS) { processSeqList(); } executeObjectScripts(); executeGlobalScripts(); purgeObjectScripts(); purgeGlobalScripts(); if (g_cine->getGameType() == Cine::GType_OS) { purgeSeqList(); } if (playerCommand == -1) { setMouseCursor(MOUSE_CURSOR_NORMAL); } else { setMouseCursor(MOUSE_CURSOR_CROSS); } if (renderer->ready()) { renderer->drawFrame(); } // NOTE: In the original Future Wars and Operation Stealth messages // were removed when running the drawOverlays function which is // currently called from the renderer's drawFrame function. removeMessages(); if (waitForPlayerClick) { playerAction = false; _messageLen <<= 3; if (_messageLen < 0x800) _messageLen = 0x800; do { manageEvents(); getMouseData(mouseUpdateStatus, &mouseButton, &dummyU16, &dummyU16); } while (mouseButton != 0 && !shouldQuit()); menuVar = 0; do { manageEvents(); getMouseData(mouseUpdateStatus, &mouseButton, &dummyU16, &dummyU16); playerAction = (mouseButton != 0) || processKeyboard(menuVar); mainLoopSub6(); } while (!playerAction && !shouldQuit()); menuVar = 0; do { manageEvents(); getMouseData(mouseUpdateStatus, &mouseButton, &dummyU16, &dummyU16); } while (mouseButton != 0 && !shouldQuit()); waitForPlayerClick = 0; } if (checkForPendingDataLoadSwitch) { checkForPendingDataLoad(); checkForPendingDataLoadSwitch = 0; } if (di) { if ("quit"[menuCommandLen] == (char)di) { ++menuCommandLen; if (menuCommandLen == 4) { quitGame(); } } else { menuCommandLen = 0; } } manageEvents(); } while (!shouldQuit() && !_restartRequested); hideMouse(); g_sound->stopMusic(); // if (g_cine->getGameType() == Cine::GType_OS) { // freeUnkList(); // } closePart(); }
void singlePlayer(GlobalState* globalData) { static int tempScore = 0; static int transition = 0; static int movedone = 0; // First time playing? // Read first time from SRAM if (globalData->firstTime == TRUE) { if (globalData->newKeyboard) { printKeyboard(globalData, "NAME?", 5); } else { processKeyboard(globalData, game.name, 5); } } if (globalData->doneKeyboard) { globalData->firstTime = FALSE; if (globalData->newGame) { globalData->newGame = 0; // Setup new game setupGame(); tempScore = 0; transition = 0; game.turn = rand() % 2; printGame(globalData); getCards(); // Assume cards already read by interrupts on switches (?) } // Wait till someone presses D to continue if (globalData->keyPress == 0x0D) { transition = 1; } // Begin game with computer if (transition) { if (!game.gameOver) { // Situation depends on game.turn if (game.turn) { if (game.moveSel == 0) { pickMove(globalData); } if (game.moveSel == 1) { tempScore = game.oppScore; game.oppScore = attack(game.myMove, game.myMonster, game.oppScore); if (game.oppScore == tempScore) { prints(0, 10, RED, BLACK, " ", 1); prints(0, 18, RED, BLACK, " ", 1); prints(0, 26, RED, BLACK, " ", 1); prints(0, 10, RED, BLACK, "Missed!", 1); } else { prints(0, 10, RED, BLACK, " ", 1); prints(0, 18, RED, BLACK, " ", 1); prints(0, 26, RED, BLACK, " ", 1); prints(0, 10, RED, BLACK, "Your", 1); printrs(30, 10, RED, BLACK, game.myMonster->monsterName, 1); prints(84, 10, RED, BLACK, "used", 1); printrs(0, 18, RED, BLACK, game.myMove->moveName, 1); prints(0, 26, RED, BLACK, "- ", 1); integerprint(6, 26, RED, BLACK, tempScore - game.oppScore, 1); } game.moveSel = 0; movedone = 1; } } else { // Computer randomly picks a monster and attack game.oppMonster = &myMonsterList[rand() % 3 ]; game.oppMove = &game.oppMonster->movelist[rand() % 3]; tempScore = game.myScore; game.myScore = attack(game.oppMove, game.oppMonster, game.myScore); if (game.myScore == tempScore) { prints(0, 10, RED, BLACK, " ", 1); prints(0, 18, RED, BLACK, " ", 1); prints(0, 26, RED, BLACK, " ", 1); prints(0, 10, RED, BLACK, "Enmy Missed!", 1); } else { prints(0, 10, RED, BLACK, " ", 1); prints(0, 18, RED, BLACK, " ", 1); prints(0, 26, RED, BLACK, " ", 1); prints(0, 10, RED, BLACK, "Enmy", 1); printrs(30, 10, RED, BLACK, game.oppMonster->monsterName, 1); prints(84, 10, RED, BLACK, "used", 1); printrs(0, 18, RED, BLACK, game.oppMove->moveName, 1); prints(0, 26, RED, BLACK, "- ", 1); integerprint(6, 26, RED, BLACK, tempScore - game.myScore, 1); } movedone = 1; } if (movedone == 1) { prints(0, 40, YELLOW, BLACK, "Your Score: ", 1); prints(0, 55, YELLOW, BLACK, " ", 1); integerprint(0, 55, YELLOW, BLACK, game.myScore, 1); prints(0, 70, WHITE, BLACK, "Opponent Score: ", 1); prints(0, 85, WHITE, BLACK, " ", 1); integerprint(0, 85, WHITE, BLACK, game.oppScore, 1); // Check game status game.gameOver = gameStatus(); game.turn = !game.turn; transition = 0; movedone = 0; } // if (game.gameOver == 1) { // if (globalData->newGame == 0) { // printResults(); // } // } } else { if (globalData->newGame == 0) { printResults(); } } } // Display results once there is a lost } }
void idle() { processKeyboard(); }
void Camera::update(bool keys[1024], glm::vec2 mouse, glm::vec2 scroll, GLfloat deltaTime) { processKeyboard(keys, deltaTime); processMouse(mouse); processScroll(scroll); }