void IgorEngine::PART_19() { _gameState.enableLight = 1; loadRoomData(PAL_WomenToilets, IMG_WomenToilets, BOX_WomenToilets, MSK_WomenToilets, TXT_WomenToilets); static const int anm[] = { FRM_WomenToilets1, FRM_WomenToilets2, FRM_WomenToilets3, FRM_WomenToilets4, FRM_WomenToilets5, 0 }; loadAnimData(anm); loadActionData(DAT_WomenToilets); _roomDataOffsets = PART_19_ROOM_DATA_OFFSETS; setRoomWalkBounds(0, 0, 319, 143); if (_currentPart == 191) { PART_19_HELPER_2(); } else { SET_EXEC_ACTION_FUNC(1, &IgorEngine::PART_19_EXEC_ACTION); PART_19_HELPER_1(255); } memcpy(_screenVGA, _screenLayer1, 46080); _currentAction.verb = kVerbWalk; fadeInPalette(768); PART_19_HELPER_3(); if (_objectsState[59] == 0) { PART_19_HELPER_4(); } else { enterPartLoop(); while (_currentPart == 190) { runPartLoop(); } leavePartLoop(); } fadeOutPalette(624); }
void IgorEngine::PART_25() { _gameState.enableLight = 2; loadRoomData(PAL_CollegeCorridorAnnouncementBoard, IMG_CollegeCorridorAnnouncementBoard, BOX_CollegeCorridorAnnouncementBoard, MSK_CollegeCorridorAnnouncementBoard, TXT_CollegeCorridorAnnouncementBoard); static const int anm[] = { FRM_CollegeCorridorAnnouncementBoard1, FRM_CollegeCorridorAnnouncementBoard2, 0 }; loadAnimData(anm); loadActionData(DAT_CollegeCorridorAnnouncementBoard); _roomDataOffsets = PART_25_ROOM_DATA_OFFSETS; setRoomWalkBounds(0, 0, 319, 143); SET_EXEC_ACTION_FUNC(1, &IgorEngine::PART_25_EXEC_ACTION); PART_25_HELPER_1(255); memcpy(_screenVGA, _screenLayer1, 46080); _currentAction.verb = kVerbWalk; fadeInPalette(768); if (_currentPart == 250) { PART_25_HELPER_2(); } else if (_currentPart == 251) { PART_25_HELPER_3(); } else if (_currentPart == 252) { PART_25_HELPER_4(); } enterPartLoop(); while (_currentPart >= 250 && _currentPart <= 252) { runPartLoop(); } leavePartLoop(); fadeOutPalette(624); }
const AnimationData* ResourceLoader::anim(string name) { auto anim = animations.find(name); if (anim == animations.end()) { pugi::xml_document animXml; string path = root + name; animXml.load_file(path.c_str()); if (animXml.begin() == animXml.end()) { // Couldn't open .anim file! std::cerr << "ERROR: couldn't load animation \"" << path << "\"\n"; return &AnimationData::defaultAnim; } pugi::xml_node node = animXml.child("animations"); string sheetName = animXml.first_child().first_attribute().as_string(); const SpriteSheet* sheet = sh(sheetName); if (sheet == nullptr) { std::cerr << "\t(requested by \"" << path << "\")\n"; return &AnimationData::defaultAnim; } AnimationData& aData = animations[name]; if (!loadAnimData(aData, animXml, sheet)) { animations.erase(animations.find(name)); std::cerr << "\t(requested by \"" << path << "\")\n"; return &AnimationData::defaultAnim; } const sf::Texture* texture = tex(sheet->imageName); if (texture == nullptr) { std::cerr << "\t(requested by \"" << path << "\")\n"; return &AnimationData::defaultAnim; } aData.tx = texture; return &aData; } return &anim->second; }
void AnimLoader::loadAnimDataArray(CCArray* animArray) { int count = animArray->count(); for (int i = 0; i < count; i++) { CCString* resName = (CCString*)animArray->objectAtIndex(i); loadAnimData(resName->getCString()); } }
const AnimData* AnimResManager::getAnimData(const char *aniFileName) { const AnimData *pAnimData = findAnimData(aniFileName); if (!pAnimData) { pAnimData = loadAnimData(aniFileName); if (pAnimData) m_AnimData.push_back(Pair(pAnimData, aniFileName)); } return pAnimData; }
void IgorEngine::loadResourceData__ANIM_MenToilets() { static const int anm[] = { FRM_MenToilets1, FRM_MenToilets2, 0 }; loadAnimData(anm); }
bool TileManager::loadTiles() { std::string maptiles_path, masktype_path, path; NuvieIOFileRead objtiles_vga; NuvieIOFileRead tileindx_vga; NuvieIOFileRead file; U6Lib_n lib_file; U6Lzw *lzw; uint32 tile_offset; unsigned char *tile_data = NULL; uint32 maptiles_size = 0; uint32 objtiles_size; unsigned char *masktype = NULL; uint32 masktype_size; uint16 i; Dither *dither; dither = Game::get_game()->get_dither(); config_get_path(config,"maptiles.vga",maptiles_path); config_get_path(config,"masktype.vga",masktype_path); lzw = new U6Lzw(); switch(game_type) { case NUVIE_GAME_U6 : tile_data = lzw->decompress_file(maptiles_path,maptiles_size); if(tile_data == NULL) { ConsoleAddError("Decompressing " + maptiles_path); return false; } masktype = lzw->decompress_file(masktype_path,masktype_size); if(masktype == NULL) { ConsoleAddError("Decompressing " + masktype_path); return false; } break; case NUVIE_GAME_MD : case NUVIE_GAME_SE : if(lib_file.open(maptiles_path,4,game_type) == false) { ConsoleAddError("Opening " + maptiles_path); return false; } maptiles_size = lib_file.get_item_size(0); tile_data = lib_file.get_item(0); lib_file.close(); if(lib_file.open(masktype_path,4,game_type) == false) { ConsoleAddError("Opening " + masktype_path); return false; } //masktype_size = lib_file.get_item_size(0); masktype = lib_file.get_item(0); lib_file.close(); break; } if(tile_data == NULL) { ConsoleAddError("Loading maptiles.vga"); return false; } if(masktype == NULL) { ConsoleAddError("Loading masktype.vga"); return false; } config_get_path(config,"objtiles.vga",path); if(objtiles_vga.open(path) == false) { ConsoleAddError("Opening " + path); return false; } objtiles_size = objtiles_vga.get_size(); tile_data = (unsigned char *)nuvie_realloc(tile_data,maptiles_size + objtiles_size); objtiles_vga.readToBuf(&tile_data[maptiles_size], objtiles_size); config_get_path(config,"tileindx.vga",path); if(tileindx_vga.open(path) == false) { ConsoleAddError("Opening " + path); return false; } for(i=0;i<2048;i++) { tile_offset = tileindx_vga.read2() * 16; tile[i].tile_num = i; tile[i].transparent = false; switch(masktype[i]) { case U6TILE_TRANS : tile[i].transparent = true; memcpy(tile[i].data, &tile_data[tile_offset], 256); break; case U6TILE_PLAIN : memcpy(tile[i].data, &tile_data[tile_offset], 256); break; case U6TILE_PBLCK : tile[i].transparent = true; decodePixelBlockTile(&tile_data[tile_offset],i); break; } dither->dither_bitmap(tile[i].data,16,16,tile[i].transparent); tileindex[i] = i; //set all tile indexs to default value. this is changed in update() for animated tiles } loadAnimData(); loadTileFlag(); free(masktype); free(tile_data); look = new Look(config); if(look->init() == false) { ConsoleAddError("Initialising Look Class"); return false; } desc_buf = (char *)malloc(look->get_max_len() + 6); // add space for "%03d \n\0" or "the \n\0" if(desc_buf == NULL) { ConsoleAddError("Allocating desc_buf"); return false; } loadAnimMask(); #ifdef TILEMANAGER_DEBUG look->print(); DEBUG(0,LEVEL_DEBUGGING,"Dumping tile flags:"); for(i=0;i<2048;i++) { bool plural; DEBUG(1,LEVEL_DEBUGGING,"%04d : ",i); print_b(LEVEL_DEBUGGING, tile[i].flags1); DEBUG(1,LEVEL_DEBUGGING," "); print_b(LEVEL_DEBUGGING, tile[i].flags2); DEBUG(1,LEVEL_DEBUGGING," "); print_b(LEVEL_DEBUGGING, tile[i].flags3); DEBUG(1,LEVEL_DEBUGGING," %s\n",look->get_description(i,&plural)); } #endif delete lzw; return true; }
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; }