void IgorEngine::PART_18_ACTION_111() { if (_objectsState[0] == 0) { ADD_DIALOGUE_TEXT(211, 1); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); return; } if (_objectsState[0] == 2) { ADD_DIALOGUE_TEXT(212, 1); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); return; } const int offset = 26798; for (int i = 0; i <= 28; ++i) { memcpy(_screenVGA + i * 320 + offset, _animFramesBuffer + i * 28 + 0xF0A, 28); } playSound(47, 1); for (int i = 1; i <= 2; ++i) { waitForTimer(200); } for (int i = 0; i <= 28; ++i) { memcpy(_screenVGA + i * 320 + offset, _animFramesBuffer + i * 28 + 0xBDE, 28); } ADD_DIALOGUE_TEXT(213, 2); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); _objectsState[0] = 2; UPDATE_OBJECT_STATE(1); }
void IgorEngine::handlePause() { drawActionSentence(getString(STR_GamePaused), 0xFB); do { waitForTimer(); } while (!_inputVars[kInputPause]); memset(_inputVars, 0, sizeof(_inputVars)); }
void IgorEngine::PART_18_ACTION_109() { const int offset = 29480; for (int i = 1; i <= 2; ++i) { for (int j = 1; j <= 48; ++j) { memcpy(_screenVGA + j * 320 + offset, _animFramesBuffer + (i - 1) * 1519 + j * 31, 31); } waitForTimer(120); } int part = _currentPart; _currentPart = 191; fadeOutPalette(768); PART_19(); memcpy(_screenVGA, _screenLayer2, 46080); loadResourceData__ROOM_MenToilets(); loadResourceData__ANIM_MenToilets(); loadActionData(DAT_MenToilets); _roomDataOffsets = PART_18_ROOM_DATA_OFFSETS; setRoomWalkBounds(0, 0, 319, 143); SET_EXEC_ACTION_FUNC(1, &IgorEngine::PART_18_EXEC_ACTION); PART_18_HELPER_1(255); memset(_screenVGA + 46080, 0, 17920); drawVerbsPanel(); removeObjectFromInventory(53); fadeInPalette(768); _currentPart = part; ADD_DIALOGUE_TEXT(215, 1); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); }
void IgorEngine::PART_85_HELPER_1(int frameOffset2, int frameOffset1, int firstFrame, int lastFrame, int delay) { do { if (compareGameTick(0, delay)) { decodeAnimFrame(_animFramesBuffer + frameOffset2 - 1 + READ_LE_UINT16(_animFramesBuffer + frameOffset1 + firstFrame * 2 - 3), _screenVGA, true); ++firstFrame; } PART_85_UPDATE_ROOM_BACKGROUND(); if (_inputVars[kInputEscape]) return; waitForTimer(); } while (firstFrame <= lastFrame); }
void IgorEngine::PART_04() { if (_objectsState[106] == 1) { _currentPart = 730; playMusic(1); return; } if (_objectsState[107] == 1) { _objectsState[107] = 0; _currentPart = 750; playMusic(1); return; } _gameState.enableLight = 1; loadRoomData(PAL_Map, IMG_Map, BOX_Map, MSK_Map, TXT_Map); loadActionData(DAT_Map); _roomDataOffsets = PART_04_ROOM_DATA_OFFSETS; SET_EXEC_ACTION_FUNC(1, &IgorEngine::PART_04_EXEC_ACTION); PART_04_CLEAR_OBJECT_STATE_84(255); memcpy(_screenVGA, _screenLayer1, 46080); fadeInPalette(768); _currentAction.verb = kVerbWalk; if (_gameState.musicNum != 2) { playMusic(2); } _walkData[0].x = 160; _walkData[0].y = 133; _walkData[0].scaleWidth = 49; _walkData[0].scaleHeight = 49; _walkDataLastIndex = 1; _walkDataCurrentIndex = 1; enterPartLoop(); while (_currentPart == 40) { handleRoomInput(); if (compareGameTick(19, 32)) { handleRoomDialogue(); } if (compareGameTick(4, 8)) { handleRoomInventoryScroll(); } scrollPalette(200, 207); setPaletteRange(200, 207); if (compareGameTick(1)) { handleRoomLight(); } scrollPalette(184, 199); setPaletteRange(184, 199); waitForTimer(); } leavePartLoop(); fadeOutPalette(624); }
void IgorEngine::PART_19_HELPER_4() { decodeAnimFrame(_animFramesBuffer + 0xE1A + READ_LE_UINT16(_animFramesBuffer + 0x40AB) - 1, _screenVGA, true); waitForTimer(60); ADD_DIALOGUE_TEXT(225, 1); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); waitForEndOfIgorDialogue(); --_walkDataLastIndex; buildWalkPath(295, 142, 319, 142); _walkDataCurrentIndex = 1; _gameState.igorMoving = true; waitForIgorMove(); _currentPart = 232; }
void IgorEngine::PART_85_HELPER_2() { int x = 1; do { if (compareGameTick(0, 16)) { for (int y = 0; y <= 143; ++y) { memcpy(_screenTextLayer + y * 320, _screenLayer1 + y * 320 + x * 8, 320 - x * 8); memcpy(_screenTextLayer + y * 320 + 320 - x * 8, _screenLayer2 + y * 320 + 96, x * 8); } memcpy(_screenVGA, _screenTextLayer, 46080); ++x; } PART_85_UPDATE_ROOM_BACKGROUND(); waitForTimer(); } while (x != 29 && !_inputVars[kInputEscape]); }
void IgorEngine::PART_19_HELPER_5() { fadeOutPalette(624); uint8 *tmp = (uint8 *)malloc(64000 + 768); if (tmp) { memcpy(tmp, _screenVGA, 64000); memcpy(tmp + 64000, _paletteBuffer, 768); } loadData(IMG_RomanNumbersPaper, _screenVGA); loadData(PAL_RomanNumbersPaper, _paletteBuffer); fadeInPalette(624); PART_UPDATE_FIGURES_ON_PAPER(60); _objectsState[2] = 1; waitForTimer(255); if (tmp) { memcpy(_screenVGA, tmp, 64000); memcpy(_paletteBuffer, tmp + 64000, 768); free(tmp); } }
void IgorEngine::PART_25_ACTION_108() { if (_objectsState[68] == 0) { EXEC_MAIN_ACTION(14); return; } for (int i = 3; i <= 4; ++i) { const int offset = 21881; for (int j = 0; j <= 55; ++j) { memcpy(_screenVGA + j * 320 + offset, _animFramesBuffer + i * 1736 + j * 31 + 0x290, 31); if (i == 4) { playSound(14, 1); } if (i == 3) { waitForTimer(100); } } } _objectsState[68] = 0; PART_25_HELPER_1(1); }
void IgorEngine::PART_19_ACTION_107() { if (_objectsState[58] == 1) { ADD_DIALOGUE_TEXT(211, 1); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); return; } ADD_DIALOGUE_TEXT(206, 1); ADD_DIALOGUE_TEXT(207, 1); SET_DIALOGUE_TEXT(1, 2); startIgorDialogue(); waitForEndOfIgorDialogue(); for (int i = 1; i <= 2; ++i) { const int offset = 27110; for (int j = 0; j <= 48; ++j) { memcpy(_screenVGA + j * 320 + offset, _animFramesBuffer + i * 1372 + j * 28 - 506, 28); waitForTimer(120); } } addObjectToInventory(12, 47); _objectsState[58] = 1; PART_19_HELPER_1(255); }
void IgorEngine::PART_19_ACTION_109() { if (_objectsState[2] == 1) { ADD_DIALOGUE_TEXT(210, 1); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); return; } for (int i = 1; i <= 4; ++i) { const uint8 *src = _animFramesBuffer + READ_LE_UINT16(_animFramesBuffer + 0x354 + i * 2) - 1; decodeAnimFrame(src, _screenVGA, true); waitForTimer(45); } decodeAnimFrame(_animFramesBuffer + READ_LE_UINT16(_animFramesBuffer + 0x35E) - 1, _screenVGA, true); playSound(45, 1); PART_19_HELPER_5(); PART_19_HELPER_1(255); stopSound(); decodeAnimFrame(_animFramesBuffer + READ_LE_UINT16(_animFramesBuffer + 0x360) - 1, _screenVGA, true); ADD_DIALOGUE_TEXT(209, 1); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); waitForEndOfIgorDialogue(); }
void IgorEngine::PART_19_HELPER_2() { int talkSpeed = _gameState.talkSpeed; _gameState.talkSpeed = 5; memcpy(_screenLayer2, _screenVGA, 46080); memcpy(_screenVGA, _screenLayer1, 46080); const uint8 *src = _animFramesBuffer + 0xE1A + READ_LE_UINT16(_animFramesBuffer + 0x4051) - 1; decodeAnimFrame(src, _screenVGA, true); memcpy(_screenLayer1, _screenVGA, 46080); fadeInPalette(624); ADD_DIALOGUE_TEXT(212, 3); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(243, 92, 63, 23, 33); VAR_CURRENT_TALKING_ACTOR = 0; _updateDialogue = &IgorEngine::PART_19_UPDATE_DIALOGUE_WOMEN; waitForEndOfCutsceneDialogue(243, 92, 63, 23, 33); _updateDialogue = 0; for (int i = 2; i <= 9; ++i) { src = _animFramesBuffer + 0xE1A + READ_LE_UINT16(_animFramesBuffer + 0x404F + i * 2) - 1; waitForTimer(60); } ADD_DIALOGUE_TEXT(215, 1); ADD_DIALOGUE_TEXT(216, 2); SET_DIALOGUE_TEXT(1, 2); startCutsceneDialogue(227, 91, 0, 63, 63); _gameState.counter[1] = 10; VAR_CURRENT_TALKING_ACTOR = 1; _updateRoomBackground = &IgorEngine::PART_19_UPDATE_BACKGROUND_HELPER_9; waitForEndOfCutsceneDialogue(227, 91, 0, 63, 63); _updateRoomBackground = 0; while (_gameState.counter[1] != 35) { PART_19_UPDATE_BACKGROUND_HELPER_9(); } for (int i = 47; i <= 48; ++i) { src = _animFramesBuffer + 0xE1A + READ_LE_UINT16(_animFramesBuffer + 0x404F + i * 2) - 1; decodeAnimFrame(src, _screenVGA, true); waitForTimer(30); } for (int i = 1; i <= 3; ++i) { for (int j = 49; j <= 50; ++j) { src = _animFramesBuffer + 0xE1A + READ_LE_UINT16(_animFramesBuffer + 0x404F + j * 2) - 1; decodeAnimFrame(src, _screenVGA, true); waitForTimer(30); if (j == 50) { playSound(46, 1); } } } src = _animFramesBuffer + 0xE1A + READ_LE_UINT16(_animFramesBuffer + 0x40B5) - 1; decodeAnimFrame(src, _screenVGA, true); waitForTimer(30); ADD_DIALOGUE_TEXT(218, 1); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(243, 92, 63, 23, 33); VAR_CURRENT_TALKING_ACTOR = 0; _updateDialogue = &IgorEngine::PART_19_UPDATE_DIALOGUE_WOMEN; waitForEndOfCutsceneDialogue(243, 92, 63, 23, 33); _updateDialogue = 0; ADD_DIALOGUE_TEXT(219, 2); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(227, 91, 0, 63, 63); VAR_CURRENT_TALKING_ACTOR = 1; _updateDialogue = &IgorEngine::PART_19_UPDATE_DIALOGUE_WOMEN; waitForEndOfCutsceneDialogue(227, 91, 0, 63, 63); _updateDialogue = 0; ADD_DIALOGUE_TEXT(221, 2); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(243, 92, 63, 23, 33); VAR_CURRENT_TALKING_ACTOR = 0; _updateDialogue = &IgorEngine::PART_19_UPDATE_DIALOGUE_WOMEN; waitForEndOfCutsceneDialogue(243, 92, 63, 23, 33); _updateDialogue = 0; ADD_DIALOGUE_TEXT(223, 2); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(227, 91, 0, 63, 63); VAR_CURRENT_TALKING_ACTOR = 1; _updateDialogue = &IgorEngine::PART_19_UPDATE_DIALOGUE_WOMEN; waitForEndOfCutsceneDialogue(227, 91, 0, 63, 63); _updateDialogue = 0; _objectsState[59] = 1; fadeOutPalette(624); _gameState.talkSpeed = talkSpeed; }
void PreAgiEngine::playNote(int16 frequency, int32 length) { _speakerStream->play(Audio::PCSpeaker::kWaveFormSquare, frequency, length); waitForTimer(length); }
void PreAgiEngine::playNote(int16 frequency, int32 length) { _speakerStream->play(frequency, length); waitForTimer(length); }
void IgorEngine::PART_85() { playMusic(2); loadRoomData(PAL_SpringRock, IMG_SpringRock, BOX_SpringRock, MSK_SpringRock, TXT_SpringRock); memcpy(_screenLayer2, _screenLayer1, 46080); loadRoomData(PAL_SpringBridgeIntro, IMG_SpringBridgeIntro, 0, 0, TXT_SpringBridgeIntro); static const int anm[] = { ANM_PhilipLauraIntro, AOF_PhilipLauraIntro, ANM_LauraIntro, AOF_LauraIntro, 0 }; loadAnimData(anm); memcpy(_screenVGA, _screenLayer1, 46080); _updateDialogue = &IgorEngine::PART_85_UPDATE_DIALOGUE_PHILIP_LAURA; _updateRoomBackground = &IgorEngine::PART_85_UPDATE_ROOM_BACKGROUND; VAR_WATER_SOUND_PLAYING = true; playSound(17, 1); decodeAnimFrame(getAnimFrame(0, 0x7480, 1), _screenVGA, true); fadeInPalette(768); if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_1(0, 0x7481, 2, 7, 32); if (_inputVars[kInputEscape]) goto PART_85_EXIT; ADD_DIALOGUE_TEXT(201, 3, 545); ADD_DIALOGUE_TEXT(204, 1, 546); SET_DIALOGUE_TEXT(1, 2); startCutsceneDialogue(89, 56, 63, 63, 0); VAR_CURRENT_TALKING_ACTOR = 0; waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0); if (_inputVars[kInputEscape]) goto PART_85_EXIT; ADD_DIALOGUE_TEXT(205, 3, 547); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(113, 59, 63, 0, 38); VAR_CURRENT_TALKING_ACTOR = 1; waitForEndOfCutsceneDialogue(113, 59, 63, 0, 38); if (_inputVars[kInputEscape]) goto PART_85_EXIT; ADD_DIALOGUE_TEXT(208, 1, 548); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(89, 56, 63, 63, 0); VAR_CURRENT_TALKING_ACTOR = 0; waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0); if (_inputVars[kInputEscape]) goto PART_85_EXIT; ADD_DIALOGUE_TEXT(209, 2, 549); ADD_DIALOGUE_TEXT(211, 1, 550); ADD_DIALOGUE_TEXT(212, 1, 551); ADD_DIALOGUE_TEXT(213, 1, 552); ADD_DIALOGUE_TEXT(214, 1, 553); SET_DIALOGUE_TEXT(1, 5); startCutsceneDialogue(113, 59, 63, 0, 38); VAR_CURRENT_TALKING_ACTOR = 1; waitForEndOfCutsceneDialogue(113, 59, 63, 0, 38); if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_1(0, 0x7481, 2, 7, 32); if (_inputVars[kInputEscape]) goto PART_85_EXIT; ADD_DIALOGUE_TEXT(215, 1, 554); ADD_DIALOGUE_TEXT(216, 2, 555); ADD_DIALOGUE_TEXT(218, 1, 556); SET_DIALOGUE_TEXT(1, 3); startCutsceneDialogue(89, 56, 63, 63, 0); VAR_CURRENT_TALKING_ACTOR = 0; waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0); if (_inputVars[kInputEscape]) goto PART_85_EXIT; ADD_DIALOGUE_TEXT(219, 2, 557); ADD_DIALOGUE_TEXT(221, 2, 558); SET_DIALOGUE_TEXT(1, 2); startCutsceneDialogue(113, 59, 63, 0, 38); VAR_CURRENT_TALKING_ACTOR = 1; waitForEndOfCutsceneDialogue(113, 59, 63, 0, 38); if (_inputVars[kInputEscape]) goto PART_85_EXIT; decodeAnimFrame(getAnimFrame(0, 0x7480, 1), _screenVGA, true); PART_85_HELPER_1(0, 0x7481, 2, 7, 32); if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_1(0, 0x7481, 18, 37, 20); if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_2(); VAR_WATER_SOUND_PLAYING = false; stopSound(); if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_1(0x74CA, 0xA6C4, 1, 6, 32); if (_inputVars[kInputEscape]) goto PART_85_EXIT; for (int i = 0; i <= 200 / kTimerTicksCount; ++i) { PART_85_UPDATE_ROOM_BACKGROUND(); if (_inputVars[kInputEscape]) goto PART_85_EXIT; waitForTimer(); } _walkData[0].x = 251; _walkData[0].y = 125; _walkData[0].scaleWidth = 50; _walkDataLastIndex = 1; _walkCurrentPos = 4; ADD_DIALOGUE_TEXT(223, 2, 559); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); waitForEndOfIgorDialogue(); if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_1(0x74CA, 0xA6C4, 7, 9, 32); if (_inputVars[kInputEscape]) goto PART_85_EXIT; _walkData[0].x = 250; _walkData[0].y = 119; _walkCurrentPos = 3; ADD_DIALOGUE_TEXT(225, 2, 560); ADD_DIALOGUE_TEXT(227, 3, 561); SET_DIALOGUE_TEXT(1, 2); startIgorDialogue(); waitForEndOfIgorDialogue(); if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_1(0x74CA, 0xA6C4, 10, 24, 16); PART_85_EXIT: stopSound(); _gameState.dialogueTextRunning = false; _inputVars[kInputEscape] = 0; _walkData[0].setPos(155, 121, 4, 0); _walkData[0].setDefaultScale(); copyArea(_screenLayer2, 23180, 320, _facingIgorFrames[3], 30, 30, 50, true); memcpy(_screenVGA, _screenLayer2, 46080); memset(_currentPalette + 0x270, 0, 0x8D); setPaletteRange(208, 254); _currentPart = 61; _updateDialogue = 0; _updateRoomBackground = 0; }
int main(int argc, char *argv[]) { char c; int status = 0; printf("Hello World, I'm game!\n"); status = init_display(); if (status != 0) { printf("Error: Failed to init display\n"); return status; } status = init_driver(); if (status != 0) { printf("Error: Failed to init driver\n"); destroy_display(); return status; } status = setup_handler(); if (status != 0) { printf("Error: Failed to init signal handler\n"); destroy_display(); close(file_gamepad_driver); return status; } time_handler(); /* Intializes random number generator */ srand((unsigned) time(&t)); sigset_t myset; (void) sigemptyset(&myset); while(1) { clear_LCD(); draw_game(); draw_score(p1_score, p2_score); redraw(); waitForButton(); printf("start game\n"); while((p1_score < 5) && (p2_score < 5)) { random_timer = (rand() % 3) + 2; startTimer(random_timer); waitForTimer(); random_button = (rand() % 4); draw_button(random_button, true, RED); redraw(); gettimeofday(&time_button_appears, NULL); // start timer startTimer(3); buf = 0; while((playerButtonPressed(random_button) == 0) && (timer_expired == false)) { waitForButton(); } stopTimer(); if (timer_expired == false) { time_elapsed = getGameTime(); draw_time(time_elapsed, BLUE); redraw(); } if (playerButtonPressed(random_button) == P1) { p1_score++; p1_time += time_elapsed; } else if (playerButtonPressed(random_button) == P2) { p2_score++; p2_time += time_elapsed; } draw_score(p1_score, p2_score); reset_button(random_button); redraw(); } // draw winner button_pressed = 0; if (p1_score == 5) { winner = P1; winner_time = p1_time; } else if (p2_score == 5) { winner = P2; winner_time = p2_time; } while(button_pressed == 0) { startTimer(1); winner_blink(winner, winner_time); waitForTimer(); } // print waiting waitForButton(); p1_score = 0; p1_time = 0; p2_score = 0; p2_time = 0; } }