void AudioEngine::PlayMusic(const std::string &filename) { std::map<std::string, AudioCacheElement>::iterator element = _audio_cache.find(filename); if(element == _audio_cache.end()) { // Get the current game mode, so that the loading/freeing micro management // is handled the most possible. hoa_mode_manager::GameMode *gm = hoa_mode_manager::ModeManager->GetTop(); if(!LoadMusic(filename, gm)) { IF_PRINT_WARNING(AUDIO_DEBUG) << "could not play music from cache because " "the music could not be loaded" << std::endl; return; } else { element = _audio_cache.find(filename); } } // Special case: the music descriptor object must be taken back: MusicDescriptor *music_audio = reinterpret_cast<MusicDescriptor *>(element->second.audio); if(music_audio) { music_audio->Play(); element->second.last_update_time = SDL_GetTicks(); } }
/* 用户窗口初始化 */ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { //去除标题栏、窗口置顶 //setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); //设置窗口大小 //背景透明 setAttribute(Qt::WA_TranslucentBackground, true); //播放音乐 加载音乐路径 LoadMusic(); //定时器设置 TimeStart(); //当前动作 nowAction = 1; //加载图像 image.load("image/database"); //changeAction(); //窗口开始位置 resize(image.width(), image.height()); QDesktopWidget* desktop = QApplication::desktop(); move((desktop->width() - this->width()), 0); }
bool EEMusic::Open(const std::string& _fileName) { if (!LoadMusic(_fileName.c_str())) return false; return true; }
//---------------------------------------------------------------------------------------------------- bool EEMusic::Open(const char* _fileName) { if (!LoadMusic(_fileName)) return false; return true; }
display *newDisplay() { int result; display *d = malloc(sizeof(display)); result = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); if (result < 0) { SDL_Fail("Bad SDL", d); } d->window = SDL_CreateWindow("Diner 51", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);//frame dimenstion if (d->window == NULL) { SDL_Fail("Could not create window", d); } //MUSIC------------- if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2040) < 0) { Mix_GetError(); SDL_Fail("SDL Mixer could not initialise", d); } gCurrentSongIndex = 0; LoadMusic(d); if (Mix_PlayMusic(gMusic[gCurrentSongIndex], -1)< 0) { Mix_GetError(); SDL_Fail("SDL Mixer could not initialise", d); } m_state = MUSIC_ON; //END d->surface = SDL_GetWindowSurface(d->window); if (d->surface == NULL) { SDL_Fail("Could not create surface", d); } d->red = SDL_MapRGB(d->surface->format, 102, 0, 0); if (d->red == 0) { SDL_Fail("Could not create color", d); } d->box = malloc(sizeof(SDL_Rect)); if (d->box == NULL) { SDL_Fail("Allocation for the bpx failed", d); } *d->box = (SDL_Rect) { 0, 0, 32, 32 }; d->renderer = SDL_CreateRenderer(d->window, -1, 0); if (d->renderer == NULL) { SDL_Fail("Redering failed", d); } loadAllImages(d); //event control d->event = malloc(sizeof(SDL_Event)); if (d->event == NULL) { SDL_Fail("Allocation for the bpx failed", d); } //TTF Init and Money TTF_Init(); d->font = TTF_OpenFont("Code.ttf", 23);/*font size changed------------------------*/ if (d->font == NULL) { SDL_Fail("Bad font", d); } d->bg = (SDL_Color) { 253, 205, 146, 255 }; d->fg = (SDL_Color) { 0, 0, 0, 255 }; SDL_StartTextInput(); SDL_RenderClear(d->renderer); return d; }
SoundManager::SoundManager(int frequency, int chunkSize) : m_music() { InitializeSDLSoundSubsystem(); OpenMixAudio(frequency, chunkSize); InitializeOggSupport(); LoadMusic(); LoadSoundEffects(); }
void AudioCache::LoadMenuResources() { mMenuMusic.insert({ MenuMusic::MainmenuTrack, LoadMusic("menu_main.mp3") }); mMenuSound.insert({ MenuSound::Switch, LoadSound("menu_switch.wav") }); mMenuSound.insert({ MenuSound::Choose, LoadSound("menu_choose.wav") }); mMenuSound.insert({ MenuSound::Invalid, LoadSound("menu_invalid.wav") }); }
void BattleSong (BOOLEAN DoPlay) { if (BattleRef == 0) { if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) BattleRef = LoadMusic (BATTLE_MUSIC); else if (GET_GAME_STATE (ORZ_SPACE_SIDE) > 1) // BY JMS - this condition activates Orz space music BattleRef = LoadMusic (ORZSPACE_MUSIC); else if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) BattleRef = LoadMusic (HYPERSPACE_MUSIC); else BattleRef = LoadMusic (QUASISPACE_MUSIC); } if (DoPlay) PlayMusic (BattleRef, TRUE, 1); }
/* ================== SoundLayer::LoadResources ================== */ void SoundLayer::LoadResources() { buttonSheet = new Pim::SpriteBatchNode("soundbuttons.png"); AddChild(buttonSheet); font = new Pim::Font("arial.ttf", 15); LoadButton(); LoadSliders(); LoadMusic(); }
void CSoundPlayer::MenuMusic() { DEBUG0("CSoundPlayer::MenuMusic()\n"); if (!iInitialized) return; StopMusic(); LoadMusic("music/menu.ogg"); PlayMusic(-1); }
//---------------------------------------------------------------------------------------------------- EEMusic::EEMusic(const char* _fileName) : m_totalBytes(0), m_totalSamples(0), m_totalTime(0.f), m_beginSamples(0) { InitializeMusic(); LoadMusic(_fileName); }
/* audioMusicLoad attempts to load and play the music file * Note: loops == -1 means forever */ void audioMusicLoad(char *musicFilename, int loops) { if (!Opts_UsingSound()) { return; } audioMusicUnload(); // make sure defaultMusic is clear defaultMusic = LoadMusic(musicFilename); Mix_PlayMusic(defaultMusic, loops); }
CGeneral::CGeneral(): m_iPrevGirl(0), m_iPrevGirlColor(0), m_iCurMusic(-1) { LoadImages(); LoadFonts(); LoadMusic(); LoadSound(); InitCursor(); }
//---------------------------------------------------------------------------------------------------- EEMusic::EEMusic(const std::string& _fileName) : m_totalBytes(0), m_totalSamples(0), m_totalTime(0.f), m_beginSamples(0) { InitializeMusic(); LoadMusic(_fileName.c_str()); }
void AudioManager::PlayMusic( const tstring& path, const tstring& name, uint8 channel, int32 loopTimes ) { Logger::GetInstance()->Log(mSoundService != nullptr, _T("Sound Service is invalid."), STARENGINE_LOG_TAG); if(mMusicList.find(name) == mMusicList.end()) { LoadMusic(path, name, channel); } return PlayMusic(name, loopTimes); }
void CSoundPlayer::GameMusic( const char* aSoundtrackDir, int aSongNumber ) { DEBUG0("CSoundPlayer::GameMusic()\n"); if (!iInitialized) return; StopMusic(); char *fname=GetSongFilename( aSoundtrackDir, aSongNumber ); if (fname) LoadMusic(fname); free(fname); PlayMusic(-1); }
void AudioEngine::PlayMusic(const std::string& filename) { map<std::string, AudioCacheElement>::iterator element = _audio_cache.find(filename); if (element == _audio_cache.end()) { if (LoadMusic(filename) == false) { IF_PRINT_WARNING(AUDIO_DEBUG) << "could not play music from cache because the music could not be loaded" << endl; return; } else { element = _audio_cache.find(filename); } } element->second.audio->Play(); element->second.last_update_time = SDL_GetTicks(); }
/* MusicLoad attempts to load and play the music file * Note: loops == -1 means forever */ void MusicLoad(const char* musicFilename, int loops) { Mix_Music* tmp_music = NULL; if (!settings.sys_sound) return; if (!musicFilename) return; tmp_music = LoadMusic(musicFilename); if (tmp_music) { MusicUnload(); //Unload previous defaultMusic defaultMusic = tmp_music; Mix_PlayMusic(defaultMusic, loops); } }
TbBool init_sound(void) { struct SoundSettings *snd_settng; unsigned long i; SYNCDBG(8,"Starting"); if (SoundDisabled) return false; snd_settng = &game.sound_settings; SetupAudioOptionDefaults(snd_settng); snd_settng->field_E = 3; snd_settng->sound_type = 1622; snd_settng->sound_data_path = sound_dir; snd_settng->dir3 = sound_dir; snd_settng->field_12 = 1; snd_settng->stereo = 1; i = get_best_sound_heap_size(mem_size); if (i < 1048576) snd_settng->max_number_of_samples = 10; else snd_settng->max_number_of_samples = 16; snd_settng->danger_music = 0; snd_settng->no_load_music = 0; snd_settng->no_load_sounds = 1; snd_settng->field_16 = 1; if ((game.flags_font & FFlg_UsrSndFont) == 0) snd_settng->field_16 = 0; snd_settng->field_18 = 1; snd_settng->redbook_enable = ((game.flags_cd & MFlg_NoCdMusic) == 0); snd_settng->sound_system = 0; InitAudio(snd_settng); LoadMusic(0); InitializeMusicPlayer(); if (!GetSoundInstalled()) { SoundDisabled = 1; return false; } S3DInit(); S3DSetNumberOfSounds(snd_settng->max_number_of_samples); S3DSetMaximumSoundDistance(5120); return true; }
/// <summary> Initializes this object. </summary> void CSound::Init() { // Upon verifying FSOUND is not initialized using 44100 mix rate, 32 channels, and zero flags; do nothing // Otherwise, proceed with loading sounds and music into memory if (!FSOUND_Init(44100,32,0)) { } else { // Upon verifying that sounds did not load report an error message and indicate sound has not loaded if (!LoadSounds()) { // Display message box informing user that sounds did not load MessageBox(p->hWnd, "Failed to load sounds!", 0, 0); // Set sound indicator to zero p->Options->sound = 0; // Save options p->Options->SaveOptions(); } // Upon verifying that music did not load report an error message and indicate music has not loaded if (!LoadMusic()) { // Display message box informing user that music did not load MessageBox(p->hWnd, "Failed to load music!", 0, 0); // Set music indicator to zero p->Options->music = 0; // Save options p->Options->SaveOptions(); } } // Set random starting point based upon current game time interval // http://msdn.microsoft.com/en-us/library/f0d4wb4t(v=vs.71).aspx srand((unsigned int)p->Tick); // Set the index to be zero plus the remainder of rand() divided by six this->MIDIndex = 0 + (rand()%6); // Play the music associated to the index PlaYMID(MIDIndex); // Start the Sound thread _beginthread(thrSound,0,p); }
static BOOLEAN DoRestart (PMENU_STATE pMS) { static DWORD InTime; static DWORD InactTimeOut; /* Cancel any presses of the Pause key. */ GamePaused = FALSE; if (!pMS->Initialized) { if (pMS->hMusic) { StopMusic (); DestroyMusic (pMS->hMusic); pMS->hMusic = 0; } pMS->hMusic = LoadMusic (MAINMENU_MUSIC); InactTimeOut = (pMS->hMusic ? 120 : 20) * ONE_SECOND; PlayMusic (pMS->hMusic, TRUE, 1); DrawRestartMenu ((BYTE)~0, pMS->CurState, pMS->CurFrame); pMS->Initialized = TRUE; { BYTE clut_buf[] = {FadeAllToColor}; DWORD TimeOut = XFormColorMap ((COLORMAPPTR)clut_buf, ONE_SECOND / 2); while ((GetTimeCounter () <= TimeOut) && !(GLOBAL (CurrentActivity) & CHECK_ABORT)) { UpdateInputState (); TaskSwitch (); } } } #ifdef TESTING else if (InputState & DEVICE_EXIT) return (FALSE); #endif /* TESTING */ else if (GLOBAL (CurrentActivity) & CHECK_ABORT) { return (FALSE); } else if (!(PulsedInputState.menu[KEY_MENU_UP] || PulsedInputState.menu[KEY_MENU_DOWN] || PulsedInputState.menu[KEY_MENU_LEFT] || PulsedInputState.menu[KEY_MENU_RIGHT] || PulsedInputState.menu[KEY_MENU_SELECT] || MouseButtonDown)) { if (GetTimeCounter () - InTime < InactTimeOut) return (TRUE); SleepThreadUntil (FadeMusic (0, ONE_SECOND)); StopMusic (); FadeMusic (NORMAL_VOLUME, 0); GLOBAL (CurrentActivity) = (ACTIVITY)~0; return (FALSE); } else if (PulsedInputState.menu[KEY_MENU_SELECT]) { BYTE fade_buf[1]; switch (pMS->CurState) { case LOAD_SAVED_GAME: LastActivity = CHECK_LOAD; GLOBAL (CurrentActivity) = IN_INTERPLANETARY; break; case START_NEW_GAME: LastActivity = CHECK_LOAD | CHECK_RESTART; GLOBAL (CurrentActivity) = IN_INTERPLANETARY; break; case PLAY_SUPER_MELEE: GLOBAL (CurrentActivity) = SUPER_MELEE; break; case SETUP_GAME: LockMutex (GraphicsLock); SetFlashRect (NULL_PTR, (FRAME)0); UnlockMutex (GraphicsLock); SetupMenu (); SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); InTime = GetTimeCounter (); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu ((BYTE)~0, pMS->CurState, pMS->CurFrame); ScreenTransition (3, NULL); UnbatchGraphics (); return TRUE; case QUIT_GAME: fade_buf[0] = FadeAllToBlack; SleepThreadUntil (XFormColorMap ((COLORMAPPTR)fade_buf, ONE_SECOND / 2)); GLOBAL (CurrentActivity) = CHECK_ABORT; break; } LockMutex (GraphicsLock); SetFlashRect (NULL_PTR, (FRAME)0); UnlockMutex (GraphicsLock); return (FALSE); } else { BYTE NewState; NewState = pMS->CurState; if (PulsedInputState.menu[KEY_MENU_UP]) { if (NewState-- == START_NEW_GAME) NewState = QUIT_GAME; } else if (PulsedInputState.menu[KEY_MENU_DOWN]) { if (NewState++ == QUIT_GAME) NewState = START_NEW_GAME; } if (NewState != pMS->CurState) { BatchGraphics (); DrawRestartMenu (pMS->CurState, NewState, pMS->CurFrame); UnbatchGraphics (); pMS->CurState = NewState; } } // if (MouseButtonDown) // { // LockMutex (GraphicsLock); // SetFlashRect (NULL_PTR, (FRAME)0); // UnlockMutex (GraphicsLock); // MouseError (); // SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); // SetTransitionSource (NULL); // BatchGraphics (); // DrawRestartMenuGraphic (pMS); // DrawRestartMenu ((BYTE)~0, pMS->CurState, pMS->CurFrame); // ScreenTransition (3, NULL); // UnbatchGraphics (); // } if (MouseButtonDown) { // TODO WTF FIX GAME CONTROLS } InTime = GetTimeCounter (); return (TRUE); }
LevelMine::LevelMine(unique_ptr<Game> & game, const unique_ptr<PlayerTransfer> & playerTransfer) : Level(game, playerTransfer) { mName = LevelName::Mine; LoadLocalization("mine.loc"); mPlayer->mYaw.SetTarget(180.0f); LoadSceneFromFile("data/maps/mine.scene"); mPlayer->SetPosition(GetUniqueObject("PlayerPosition")->GetPosition()); Vector3 placePos = GetUniqueObject("PlayerPosition")->GetPosition(); Vector3 playerPos = mPlayer->GetCurrentPosition(); mPlayer->GetHUD()->SetObjective(mLocalization.GetString("objective1")); AddInteractiveObject("Note", make_shared<InteractiveObject>(GetUniqueObject("Note1")), [this] { mPlayer->GetInventory()->AddReadedNote(mLocalization.GetString("note1Desc"), mLocalization.GetString("note1")); }); AddInteractiveObject("Note", make_shared<InteractiveObject>(GetUniqueObject("Note2")), [this] { mPlayer->GetInventory()->AddReadedNote(mLocalization.GetString("note2Desc"), mLocalization.GetString("note2")); }); AddInteractiveObject("Note", make_shared<InteractiveObject>(GetUniqueObject("Note3")), [this] { mPlayer->GetInventory()->AddReadedNote(mLocalization.GetString("note3Desc"), mLocalization.GetString("note3")); }); AddInteractiveObject("Note", make_shared<InteractiveObject>(GetUniqueObject("Note4")), [this] { mPlayer->GetInventory()->AddReadedNote(mLocalization.GetString("note4Desc"), mLocalization.GetString("note4")); }); AddInteractiveObject("Note", make_shared<InteractiveObject>(GetUniqueObject("Note5")), [this] { mPlayer->GetInventory()->AddReadedNote(mLocalization.GetString("note5Desc"), mLocalization.GetString("note5")); }); AddInteractiveObject("Note", make_shared<InteractiveObject>(GetUniqueObject("Note6")), [this] { mPlayer->GetInventory()->AddReadedNote(mLocalization.GetString("note6Desc"), mLocalization.GetString("note6")); }); AddInteractiveObject("Note", make_shared<InteractiveObject>(GetUniqueObject("Note7")), [this] { mPlayer->GetInventory()->AddReadedNote(mLocalization.GetString("note7Desc"), mLocalization.GetString("note7")); }); AddInteractiveObject("Note", make_shared<InteractiveObject>(GetUniqueObject("Note8")), [this] { mPlayer->GetInventory()->AddReadedNote(mLocalization.GetString("note8Desc"), mLocalization.GetString("note8")); }); mStoneFallZone = GetUniqueObject("StoneFallZone"); mNewLevelZone = GetUniqueObject("NewLevel"); auto soundSystem = mGame->GetEngine()->GetSoundSystem(); soundSystem->SetReverbPreset(ReverbPreset::Cave); AddSound(mMusic = soundSystem->LoadMusic("data/music/chapter2.ogg")); mConcreteWall = GetUniqueObject("ConcreteWall"); mDeathZone = GetUniqueObject("DeadZone"); mDetonator = GetUniqueObject("Detonator"); AddSound(mAlertSound = soundSystem->LoadSound3D("data/sounds/alert.ogg")); mAlertSound->Attach(mDetonator); AddSound(mExplosionSound = soundSystem->LoadSound3D("data/sounds/blast.ogg")); mExplosionSound->SetReferenceDistance(10); mDetonatorActivated = 0; mExplosionFlashAnimator = 0; // Create detonator places AddItemPlace(mDetonatorPlace[0] = make_shared<ItemPlace>(GetUniqueObject("DetonatorPlace1"), Item::Type::Explosives)); AddItemPlace(mDetonatorPlace[1] = make_shared<ItemPlace>(GetUniqueObject("DetonatorPlace2"), Item::Type::Explosives)); AddItemPlace(mDetonatorPlace[2] = make_shared<ItemPlace>(GetUniqueObject("DetonatorPlace3"), Item::Type::Explosives)); AddItemPlace(mDetonatorPlace[3] = make_shared<ItemPlace>(GetUniqueObject("DetonatorPlace4"), Item::Type::Explosives)); mWireModels[0] = GetUniqueObject("WireModel1"); mWireModels[1] = GetUniqueObject("WireModel2"); mWireModels[2] = GetUniqueObject("WireModel3"); mWireModels[3] = GetUniqueObject("WireModel4"); mDetonatorModels[0] = GetUniqueObject("DetonatorModel1"); mDetonatorModels[1] = GetUniqueObject("DetonatorModel2"); mDetonatorModels[2] = GetUniqueObject("DetonatorModel3"); mDetonatorModels[3] = GetUniqueObject("DetonatorModel4"); mExplosivesModels[0] = GetUniqueObject("ExplosivesModel1"); mExplosivesModels[1] = GetUniqueObject("ExplosivesModel2"); mExplosivesModels[2] = GetUniqueObject("ExplosivesModel3"); mExplosivesModels[3] = GetUniqueObject("ExplosivesModel4"); mFindItemsZone = GetUniqueObject("FindItemsZone"); AddAmbientSound(soundSystem->LoadSound3D("data/sounds/ambient/mine/ambientmine1.ogg")); AddAmbientSound(soundSystem->LoadSound3D("data/sounds/ambient/mine/ambientmine2.ogg")); AddAmbientSound(soundSystem->LoadSound3D("data/sounds/ambient/mine/ambientmine3.ogg")); AddAmbientSound(soundSystem->LoadSound3D("data/sounds/ambient/mine/ambientmine4.ogg")); AddAmbientSound(soundSystem->LoadSound3D("data/sounds/ambient/mine/ambientmine5.ogg")); mExplosionTimer = ITimer::Create(); mBeepSoundTimer = ITimer::Create(); mBeepSoundTiming = 1.0f; CreateItems(); mReadyExplosivesCount = 0; MakeLadder("LadderBegin", "LadderEnd", "LadderEnter", "LadderBeginLeavePoint", "LadderEndLeavePoint"); MakeDoor("Door1", 90); MakeDoor("Door3", 90); MakeDoor("DoorToAdministration", 90); MakeDoor("Door6", 90); MakeDoor("DoorToDirectorsOffice", 90); MakeDoor("DoorToResearchFacility", 90); MakeKeypad("Keypad1", "Keypad1Key0", "Keypad1Key1", "Keypad1Key2", "Keypad1Key3", "Keypad1Key4", "Keypad1Key5", "Keypad1Key6", "Keypad1Key7", "Keypad1Key8", "Keypad1Key9", "Keypad1KeyCancel", MakeDoor("StorageDoor", 90), "7854"); MakeKeypad("Keypad2", "Keypad2Key0", "Keypad2Key1", "Keypad2Key2", "Keypad2Key3", "Keypad2Key4", "Keypad2Key5", "Keypad2Key6", "Keypad2Key7", "Keypad2Key8", "Keypad2Key9", "Keypad2KeyCancel", MakeDoor("DoorToResearchFacility", 90), "1689"); MakeKeypad("Keypad3", "Keypad3Key0", "Keypad3Key1", "Keypad3Key2", "Keypad3Key3", "Keypad3Key4", "Keypad3Key5", "Keypad3Key6", "Keypad3Key7", "Keypad3Key8", "Keypad3Key9", "Keypad3KeyCancel", MakeDoor("DoorMedical", 90), "9632"); mMusic->Play(); mStages["ConcreteWallExp"] = false; mStages["FindObjectObjectiveSet"] = false; mStages["FoundObjectsForExplosion"] = false; // create paths const char * ways[] = { "WayA", "WayB", "WayC", "WayD", "WayE", "WayF", "WayG", "WayH", "WayI", "WayJ", "WayK" }; Path p; for(auto w : ways) { p += Path(mScene, w); } p.Get("WayB1")->AddEdge(p.Get("WayA004")); p.Get("WayC1")->AddEdge(p.Get("WayA019")); p.Get("WayD1")->AddEdge(p.Get("WayA019")); p.Get("WayE1")->AddEdge(p.Get("WayA040")); p.Get("WayF1")->AddEdge(p.Get("WayA042")); p.Get("WayF009")->AddEdge(p.Get("WayG1")); p.Get("WayH1")->AddEdge(p.Get("WayA059")); p.Get("WayI1")->AddEdge(p.Get("WayA097")); p.Get("WayJ1")->AddEdge(p.Get("WayA073")); p.Get("WayK1")->AddEdge(p.Get("WayA027")); vector<shared_ptr<GraphVertex>> patrolPoints = { p.Get("WayA1"), p.Get("WayC024"), p.Get("WayB012"), p.Get("WayB012"), p.Get("WayD003"), p.Get("WayK005"), p.Get("WayE006"), p.Get("WayF019"), p.Get("WayG007"), p.Get("WayH010"), p.Get("WayA110"), p.Get("WayI009") }; mEnemy = make_unique<Enemy>(mGame, p.mVertexList, patrolPoints); mEnemy->SetPosition(GetUniqueObject("EnemyPosition")->GetPosition()); mExplosivesDummy[0] = GetUniqueObject("ExplosivesModel5"); mExplosivesDummy[1] = GetUniqueObject("ExplosivesModel6"); mExplosivesDummy[2] = GetUniqueObject("ExplosivesModel7"); mExplosivesDummy[3] = GetUniqueObject("ExplosivesModel8"); mExplodedWall = GetUniqueObject("ConcreteWallExploded"); mExplodedWall->Hide(); mExplosionFlashPosition = GetUniqueObject("ExplosionFlash"); mPlayer->GetInventory()->RemoveItem(Item::Type::Crowbar, 1); DoneInitialization(); }
void AudioCache::LoadArenaResources() { mArenaMusic.insert({ ArenaMusic::DefaultTrack, LoadMusic("arena_default.mp3") }); }
int main(int argc, char *argv[]) { enum { GAME_COMPUTER, GAME_NETWORK, GAME_UNKNOWN } game_type = GAME_UNKNOWN; char *remote_address; int i; if (argc < 2) { printf("Penguin Warrior\n"); printf("Usage: pw [ mode ] [ option ... ]\n"); printf(" Game modes (choose one):\n"); printf(" --computer\n"); printf(" --net <remote ip address>\n"); printf(" Display options, for tweaking and experimenting:\n"); printf(" --fullscreen\n"); printf(" --hwsurface (use an SDL hardware surface if possible)\n"); printf(" --doublebuf (use SDL double buffering if possible)\n"); printf(" The display options default to a windowed, software buffer.\n"); exit(EXIT_FAILURE); } /* Process command line arguments. There are plenty of libraries for command line processing, but our needs are simple in this case. */ for (i = 0; i < argc; i++) { /* Networked or scripted opponent? */ if (!strcmp(argv[i], "--computer")) { game_type = GAME_COMPUTER; continue; } else if (!strcmp(argv[i], "--net")) { game_type = GAME_NETWORK; if (++i >= argc) { printf("You must supply an IP address for --net.\n"); exit(EXIT_FAILURE); } remote_address = argv[i]; continue; /* Display-related options */ } else if (!strcmp(argv[i], "--hwsurface")) { hwsurface = 1; } else if (!strcmp(argv[i], "--doublebuf")) { doublebuf = 1; } else if (!strcmp(argv[i], "--fullscreen")) { fullscreen = 1; } } switch (game_type) { case GAME_COMPUTER: opponent_type = OPP_COMPUTER; printf("Playing against the computer.\n"); break; case GAME_NETWORK: printf("Sorry, network play is not implemented... yet!\n"); exit(EXIT_FAILURE); default: printf("You must select a game type.\n"); exit(EXIT_FAILURE); } /* Initialize our random number generator. */ initrandom(); /* Fire up SDL. */ if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("Unable to initialize SDL: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } atexit(SDL_Quit); /* Set an appropriate 16-bit double buffered video mode. */ if (SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, (hwsurface ? SDL_HWSURFACE : SDL_SWSURFACE) | (doublebuf ? SDL_DOUBLEBUF : 0) | (fullscreen ? SDL_FULLSCREEN : 0)) == NULL) { printf("Unable to set video mode: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } /* Save the screen pointer for later use. */ screen = SDL_GetVideoSurface(); /* Set the window caption to the name of the game. */ SDL_WM_SetCaption("Penguin Warrior", "Penguin Warrior"); /* Hide the mouse pointer. */ SDL_ShowCursor(0); /* Start the OpenAL-based audio system. */ InitAudio(); /* Initialize music and give the music system a file. */ InitMusic(); if (LoadMusic("reflux.ogg") != 0) { /* If that failed, don't worry about it. */ printf("Unable to load reflux.ogg.\n"); } /* Load the game's data into globals. We can only do this after the video and audio subsystems are ready for action, since the loading routines interact with SDL and OpenAL. */ LoadGameData(); /* Initialize the background starfield. */ InitBackground(); /* Play! */ InitPlayer(); InitOpponent(); PlayGame(); /* Unhide the mouse pointer. */ SDL_ShowCursor(1); /* Unload data. */ UnloadGameData(); /* Shut down audio. */ CleanupMusic(); CleanupAudio(); return 0; }
void AudioManager::LoadMusic(const tstring& path, const tstring& name, uint8 channel) { LoadMusic(path, name, 1.0f, channel); }
static BOOLEAN DoRestart (MENU_STATE *pMS) { static TimeCount LastInputTime; static TimeCount InactTimeOut; TimeCount TimeIn = GetTimeCounter (); /* Cancel any presses of the Pause key. */ GamePaused = FALSE; if (pMS->Initialized) Flash_process(pMS->flashContext); if (!pMS->Initialized) { if (pMS->hMusic) { StopMusic (); DestroyMusic (pMS->hMusic); pMS->hMusic = 0; } pMS->hMusic = LoadMusic (MAINMENU_MUSIC); InactTimeOut = (pMS->hMusic ? 120 : 20) * ONE_SECOND; pMS->flashContext = Flash_createOverlay (ScreenContext, NULL, NULL); Flash_setMergeFactors (pMS->flashContext, -3, 3, 16); Flash_setSpeed (pMS->flashContext, (6 * ONE_SECOND) / 16, 0, (6 * ONE_SECOND) / 16, 0); Flash_setFrameTime (pMS->flashContext, ONE_SECOND / 16); Flash_setState(pMS->flashContext, FlashState_fadeIn, (3 * ONE_SECOND) / 16); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame); Flash_start (pMS->flashContext); PlayMusic (pMS->hMusic, TRUE, 1); LastInputTime = GetTimeCounter (); pMS->Initialized = TRUE; SleepThreadUntil (FadeScreen (FadeAllToColor, ONE_SECOND / 2)); } else if (GLOBAL (CurrentActivity) & CHECK_ABORT) { return FALSE; } else if (PulsedInputState.menu[KEY_MENU_SELECT]) { switch (pMS->CurState) { case LOAD_SAVED_GAME: LastActivity = CHECK_LOAD; GLOBAL (CurrentActivity) = IN_INTERPLANETARY; break; case START_NEW_GAME: LastActivity = CHECK_LOAD | CHECK_RESTART; GLOBAL (CurrentActivity) = IN_INTERPLANETARY; break; case PLAY_SUPER_MELEE: GLOBAL (CurrentActivity) = SUPER_MELEE; break; case SETUP_GAME: Flash_pause(pMS->flashContext); Flash_setState(pMS->flashContext, FlashState_fadeIn, (3 * ONE_SECOND) / 16); SetupMenu (); SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); LastInputTime = GetTimeCounter (); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); ScreenTransition (3, NULL); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame); Flash_continue(pMS->flashContext); UnbatchGraphics (); return TRUE; case QUIT_GAME: SleepThreadUntil (FadeScreen (FadeAllToBlack, ONE_SECOND / 2)); GLOBAL (CurrentActivity) = CHECK_ABORT; break; } Flash_pause(pMS->flashContext); return FALSE; } else if (PulsedInputState.menu[KEY_MENU_UP] || PulsedInputState.menu[KEY_MENU_DOWN]) { BYTE NewState; NewState = pMS->CurState; if (PulsedInputState.menu[KEY_MENU_UP]) { if (NewState == START_NEW_GAME) NewState = QUIT_GAME; else --NewState; } else if (PulsedInputState.menu[KEY_MENU_DOWN]) { if (NewState == QUIT_GAME) NewState = START_NEW_GAME; else ++NewState; } if (NewState != pMS->CurState) { BatchGraphics (); DrawRestartMenu (pMS, NewState, pMS->CurFrame); UnbatchGraphics (); pMS->CurState = NewState; } LastInputTime = GetTimeCounter (); } else if (PulsedInputState.menu[KEY_MENU_LEFT] || PulsedInputState.menu[KEY_MENU_RIGHT]) { // Does nothing, but counts as input for timeout purposes LastInputTime = GetTimeCounter (); } else if (MouseButtonDown) { Flash_pause(pMS->flashContext); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 54)); // Mouse not supported message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame); ScreenTransition (3, NULL); UnbatchGraphics (); Flash_continue(pMS->flashContext); LastInputTime = GetTimeCounter (); } else { // No input received, check if timed out if (GetTimeCounter () - LastInputTime > InactTimeOut) { SleepThreadUntil (FadeMusic (0, ONE_SECOND)); StopMusic (); FadeMusic (NORMAL_VOLUME, 0); GLOBAL (CurrentActivity) = (ACTIVITY)~0; return FALSE; } } SleepThreadUntil (TimeIn + ONE_SECOND / 30); return TRUE; }
bool JResourceManager::LoadResource(const string& resourceName) { string path = /*mResourceRoot + */resourceName; // TiXmlDocument doc(path.c_str()); // // if (!doc.LoadFile()) return false; JGE *engine = JGE::GetInstance(); if (engine == NULL) return false; JFileSystem *fileSystem = JFileSystem::GetInstance(); if (fileSystem == NULL) return false; if (!fileSystem->OpenFile(path.c_str())) return false; int size = fileSystem->GetFileSize(); char *xmlBuffer = new char[size]; fileSystem->ReadFile(xmlBuffer, size); TiXmlDocument doc; doc.Parse(xmlBuffer); TiXmlNode* resource = 0; TiXmlNode* node = 0; TiXmlElement* element = 0; resource = doc.FirstChild("resource"); if (resource) { element = resource->ToElement(); printf("---- Loading %s:%s\n", element->Value(), element->Attribute("name")); for (node = resource->FirstChild(); node; node = node->NextSibling()) { element = node->ToElement(); if (element != NULL) { if (strcmp(element->Value(), "texture")==0) { CreateTexture(element->Attribute("name")); } else if (strcmp(element->Value(), "quad")==0) { string quadName = element->Attribute("name"); string textureName = element->Attribute("texture"); float x = 0.0f; float y = 0.0f; float width = 16.0f; float height = 16.0f; float value; float hotspotX = 0.0f; float hotspotY = 0.0f; if (element->QueryFloatAttribute("x", &value) == TIXML_SUCCESS) x = value; if (element->QueryFloatAttribute("y", &value) == TIXML_SUCCESS) y = value; if (element->QueryFloatAttribute("width", &value) == TIXML_SUCCESS) width = value; if (element->QueryFloatAttribute("height", &value) == TIXML_SUCCESS) height = value; if (element->QueryFloatAttribute("w", &value) == TIXML_SUCCESS) width = value; if (element->QueryFloatAttribute("h", &value) == TIXML_SUCCESS) height = value; if (element->QueryFloatAttribute("hotspot.x", &value) == TIXML_SUCCESS) hotspotX = value; else hotspotX = width/2; if (element->QueryFloatAttribute("hotspot.y", &value) == TIXML_SUCCESS) hotspotY = value; else hotspotY = height/2; // if (element->QueryFloatAttribute("regx", &value) == TIXML_SUCCESS) // hotspotX = width/2; // // if (element->QueryFloatAttribute("regy", &value) == TIXML_SUCCESS) // hotspotY = height/2; int id = CreateQuad(quadName, textureName, x, y, width, height); if (id != INVALID_ID) { GetQuad(id)->SetHotSpot(hotspotX, hotspotY); } } else if (strcmp(element->Value(), "font")==0) { } else if (strcmp(element->Value(), "music")==0) { LoadMusic(element->Attribute("name")); } else if (strcmp(element->Value(), "sample")==0) { LoadSample(element->Attribute("name")); } // else if (strcmp(element->Value(), "effect")==0) // { // RegisterParticleEffect(element->Attribute("name")); // } // else if (strcmp(element->Value(), "motion_emitter")==0) // { // RegisterMotionEmitter(element->Attribute("name")); // } } } } fileSystem->CloseFile(); delete[] xmlBuffer; // JGERelease(); return true; }
static BOOLEAN DoRestart (MENU_STATE *pMS) { static TimeCount LastInputTime; static TimeCount InactTimeOut; TimeCount TimeIn = GetTimeCounter (); /* Cancel any presses of the Pause key. */ GamePaused = FALSE; if (pMS->Initialized) Flash_process(pMS->flashContext); if (!pMS->Initialized) { if (pMS->hMusic) { StopMusic (); DestroyMusic (pMS->hMusic); pMS->hMusic = 0; } pMS->hMusic = LoadMusic (MAINMENU_MUSIC); InactTimeOut = (pMS->hMusic ? 120 : 20) * ONE_SECOND; pMS->flashContext = Flash_createOverlay (ScreenContext, NULL, NULL); Flash_setMergeFactors (pMS->flashContext, -3, 3, 16); Flash_setSpeed (pMS->flashContext, (6 * ONE_SECOND) / 16, 0, (6 * ONE_SECOND) / 16, 0); Flash_setFrameTime (pMS->flashContext, ONE_SECOND / 16); Flash_setState(pMS->flashContext, FlashState_fadeIn, (3 * ONE_SECOND) / 16); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); Flash_start (pMS->flashContext); PlayMusic (pMS->hMusic, TRUE, 1); LastInputTime = GetTimeCounter (); pMS->Initialized = TRUE; SleepThreadUntil (FadeScreen (FadeAllToColor, ONE_SECOND / 2)); } else if (GLOBAL (CurrentActivity) & CHECK_ABORT) { return FALSE; } else if (PulsedInputState.menu[KEY_MENU_SELECT]) { //BYTE fade_buf[1]; COUNT oldresfactor; BOOLEAN packsInstalled; if (resolutionFactor == 0) packsInstalled = TRUE; else if (resolutionFactor == 1 && hires2xPackPresent) packsInstalled = TRUE; else if (resolutionFactor == 2 && hires4xPackPresent) packsInstalled = TRUE; else packsInstalled = FALSE; switch (pMS->CurState) { case LOAD_SAVED_GAME: if (resFactorWasChanged) { LockMutex (GraphicsLock); SetFlashRect (NULL); UnlockMutex (GraphicsLock); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 35)); // Got to restart -message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); ScreenTransition (3, NULL); UnbatchGraphics (); //fade_buf[0] = FadeAllToBlack; //SleepThreadUntil (XFormColorMap ((COLORMAPPTR)fade_buf, ONE_SECOND / 2)); SleepThreadUntil (FadeScreen(FadeAllToBlack, ONE_SECOND / 2)); GLOBAL (CurrentActivity) = CHECK_ABORT; } else if (!packsInstalled) { Flash_pause(pMS->flashContext); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 35 + resolutionFactor)); // Could not find graphics pack - message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); ScreenTransition (3, NULL); UnbatchGraphics (); Flash_continue(pMS->flashContext); SleepThreadUntil (TimeIn + ONE_SECOND / 30); return TRUE; } else { LastActivity = CHECK_LOAD; GLOBAL (CurrentActivity) = IN_INTERPLANETARY; } break; case START_NEW_GAME: if (resFactorWasChanged) { LockMutex (GraphicsLock); SetFlashRect (NULL); UnlockMutex (GraphicsLock); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 35)); // Got to restart -message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); ScreenTransition (3, NULL); UnbatchGraphics (); //fade_buf[0] = FadeAllToBlack; //SleepThreadUntil (XFormColorMap ((COLORMAPPTR)fade_buf, ONE_SECOND / 2)); SleepThreadUntil (FadeScreen(FadeAllToBlack, ONE_SECOND / 2)); GLOBAL (CurrentActivity) = CHECK_ABORT; } else if (!packsInstalled) { Flash_pause(pMS->flashContext); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 35 + resolutionFactor)); // Could not find graphics pack - message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); ScreenTransition (3, NULL); UnbatchGraphics (); Flash_continue(pMS->flashContext); SleepThreadUntil (TimeIn + ONE_SECOND / 30); return TRUE; } else { LastActivity = CHECK_LOAD | CHECK_RESTART; GLOBAL (CurrentActivity) = IN_INTERPLANETARY; } break; case PLAY_SUPER_MELEE: if (resFactorWasChanged) { LockMutex (GraphicsLock); SetFlashRect (NULL); UnlockMutex (GraphicsLock); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 35)); // Got to restart -message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); ScreenTransition (3, NULL); UnbatchGraphics (); //fade_buf[0] = FadeAllToBlack; //SleepThreadUntil (XFormColorMap ((COLORMAPPTR)fade_buf, ONE_SECOND / 2)); SleepThreadUntil (FadeScreen(FadeAllToBlack, ONE_SECOND / 2)); GLOBAL (CurrentActivity) = CHECK_ABORT; } else if (!packsInstalled) { Flash_pause(pMS->flashContext); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 35 + resolutionFactor)); // Could not find graphics pack - message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); ScreenTransition (3, NULL); UnbatchGraphics (); Flash_continue(pMS->flashContext); SleepThreadUntil (TimeIn + ONE_SECOND / 30); return TRUE; } else { GLOBAL (CurrentActivity) = SUPER_MELEE; } break; case SETUP_GAME: oldresfactor = resolutionFactor; Flash_pause(pMS->flashContext); Flash_setState(pMS->flashContext, FlashState_fadeIn, (3 * ONE_SECOND) / 16); SetupMenu (); SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); LastInputTime = GetTimeCounter (); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); ScreenTransition (3, NULL); // JMS_GFX: This prevents drawing an annoying wrong-sized "Setup" frame when changing resolution. if (oldresfactor < resolutionFactor) DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, TRUE); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); Flash_continue(pMS->flashContext); UnbatchGraphics (); return TRUE; case QUIT_GAME: SleepThreadUntil (FadeScreen (FadeAllToBlack, ONE_SECOND / 2)); GLOBAL (CurrentActivity) = CHECK_ABORT; break; } Flash_pause(pMS->flashContext); return FALSE; } else if (PulsedInputState.menu[KEY_MENU_UP] || PulsedInputState.menu[KEY_MENU_DOWN]) { BYTE NewState; NewState = pMS->CurState; if (PulsedInputState.menu[KEY_MENU_UP]) { if (NewState == START_NEW_GAME) NewState = QUIT_GAME; else --NewState; } else if (PulsedInputState.menu[KEY_MENU_DOWN]) { if (NewState == QUIT_GAME) NewState = START_NEW_GAME; else ++NewState; } if (NewState != pMS->CurState) { BatchGraphics (); DrawRestartMenu (pMS, NewState, pMS->CurFrame, FALSE); UnbatchGraphics (); pMS->CurState = NewState; } LastInputTime = GetTimeCounter (); } else if (PulsedInputState.menu[KEY_MENU_LEFT] || PulsedInputState.menu[KEY_MENU_RIGHT]) { // Does nothing, but counts as input for timeout purposes LastInputTime = GetTimeCounter (); } else if (MouseButtonDown) { Flash_pause(pMS->flashContext); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 54)); // Mouse not supported message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame, FALSE); ScreenTransition (3, NULL); UnbatchGraphics (); Flash_continue(pMS->flashContext); LastInputTime = GetTimeCounter (); } else { // No input received, check if timed out if (GetTimeCounter () - LastInputTime > InactTimeOut) { SleepThreadUntil (FadeMusic (0, ONE_SECOND)); StopMusic (); FadeMusic (NORMAL_VOLUME, 0); GLOBAL (CurrentActivity) = (ACTIVITY)~0; return FALSE; } } SleepThreadUntil (TimeIn + ONE_SECOND / 30); return TRUE; }
int main(int argc, char *argv[]) { enum { GAME_COMPUTER, GAME_NETWORK, GAME_UNKNOWN } game_type = GAME_UNKNOWN; char *remote_address = NULL; int remote_port; int i; if (argc < 2) { printf("Penguin Warrior\n"); printf("Usage: pw [ mode ] [ option ... ]\n"); printf(" Game modes (choose one):\n"); printf(" --computer\n"); printf(" --client <remote ip address>\n"); printf(" --server <port number>\n"); printf(" Display options, for tweaking and experimenting:\n"); printf(" --fullscreen\n"); printf(" --hwsurface (use an SDL hardware surface if possible)\n"); printf(" --doublebuf (use SDL double buffering if possible)\n"); printf(" The display options default to a windowed, software buffer.\n"); exit(EXIT_FAILURE); } /* Process command line arguments. There are plenty of libraries for command line processing, but our needs are simple in this case. */ for (i = 0; i < argc; i++) { /* Networked or scripted opponent? */ if (!strcmp(argv[i], "--computer")) { game_type = GAME_COMPUTER; continue; } else if (!strcmp(argv[i], "--client")) { game_type = GAME_NETWORK; if (i + 2 >= argc) { printf("You must supply an IP address "\ "and port number for network games.\n"); exit(EXIT_FAILURE); } remote_address = argv[i+1]; remote_port = atoi(argv[i+2]); i++; continue; } else if (!strcmp(argv[i], "--server")) { game_type = GAME_NETWORK; if (++i >= argc) { printf("You must supply a port number "\ "for --server.\n"); exit(EXIT_FAILURE); } remote_port = atoi(argv[i]); continue; /* Display-related options */ } else if (!strcmp(argv[i], "--hwsurface")) { hwsurface = 1; } else if (!strcmp(argv[i], "--doublebuf")) { doublebuf = 1; } else if (!strcmp(argv[i], "--fullscreen")) { fullscreen = 1; } } /* If this is a network game, make a connection. */ if (game_type == GAME_NETWORK) { /* If there's no remote address, the user selected server mode. */ if (remote_address == NULL) { if (WaitNetgameConnection(remote_port, &netlink) != 0) { printf("Unable to receive connection.\n"); exit(EXIT_FAILURE); } } else { if (ConnectToNetgame(remote_address, remote_port, &netlink) != 0) { printf("Unable to connect.\n"); exit(EXIT_FAILURE); } } opponent_type = OPP_NETWORK; printf("Playing in network game against %s.\n", netlink.dotted_ip); } else if (game_type == GAME_COMPUTER) { opponent_type = OPP_COMPUTER; printf("Playing against the computer.\n"); } else { printf("No game type selected.\n"); exit(EXIT_FAILURE); } /* Initialize our random number generator. */ initrandom(); /* Create a mutex to protect the player data. */ player_mutex = SDL_CreateMutex(); if (player_mutex == NULL) { fprintf(stderr, "Unable to create mutex: %s\n", SDL_GetError()); } /* Start our scripting engine. */ InitScripting(); if (LoadGameScript("pw.tcl") != 0) { fprintf(stderr, "Exiting due to script error.\n"); exit(EXIT_FAILURE); } /* Fire up SDL. */ if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("Unable to initialize SDL: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } atexit(SDL_Quit); /* Set an appropriate 16-bit video mode. */ if (SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, (hwsurface ? SDL_HWSURFACE : SDL_SWSURFACE) | (doublebuf ? SDL_DOUBLEBUF : 0) | (fullscreen ? SDL_FULLSCREEN : 0)) == NULL) { printf("Unable to set video mode: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } /* Save the screen pointer for later use. */ screen = SDL_GetVideoSurface(); /* Set the window caption to the name of the game. */ SDL_WM_SetCaption("Penguin Warrior", "Penguin Warrior"); /* Hide the mouse pointer. */ SDL_ShowCursor(0); /* Initialize the status display. */ if (InitStatusDisplay() < 0) { printf("Unable to initialize status display.\n"); exit(EXIT_FAILURE); } /* Start the OpenAL-based audio system. */ InitAudio(); /* Initialize music and give the music system a file. */ InitMusic(); if (LoadMusic("reflux.ogg") < 0) { /* If that failed, don't worry about it. */ printf("Unable to load reflux.ogg.\n"); } /* Load the game's data into globals. */ LoadGameData(); /* Initialize the background starfield. */ InitBackground(); /* Start the network thread. */ if (game_type == GAME_NETWORK) { network_thread = SDL_CreateThread(NetworkThread, NULL); if (network_thread == NULL) { printf("Unable to start network thread: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } } /* Play! */ InitPlayer(&player); InitPlayer(&opponent); PlayGame(); /* Kill the network thread. */ if (game_type == GAME_NETWORK) { SDL_KillThread(network_thread); } /* Close the network connection. */ if (game_type == GAME_NETWORK) CloseNetgameLink(&netlink); /* Unhide the mouse pointer. */ SDL_ShowCursor(1); /* Clean up the status display. */ CleanupStatusDisplay(); /* Unload data. */ UnloadGameData(); /* Shut down our scripting engine. */ CleanupScripting(); /* Get rid of the mutex. */ SDL_DestroyMutex(player_mutex); /* Shut down audio. */ CleanupMusic(); CleanupAudio(); return 0; }
RACE_DESC * load_ship (SPECIES_ID SpeciesID, BOOLEAN LoadBattleData) { RACE_DESC *RDPtr = 0; void *CodeRef; if (SpeciesID >= NUM_SPECIES_ID) return NULL; CodeRef = CaptureCodeRes (LoadCodeRes (code_resources[SpeciesID]), &GlobData, (void **)(&RDPtr)); if (!CodeRef) goto BadLoad; RDPtr->CodeRef = CodeRef; if (RDPtr->ship_info.icons_rsc != NULL_RESOURCE) { RDPtr->ship_info.icons = CaptureDrawable (LoadGraphic ( RDPtr->ship_info.icons_rsc)); if (!RDPtr->ship_info.icons) { /* goto BadLoad */ } } if (RDPtr->ship_info.melee_icon_rsc != NULL_RESOURCE) { RDPtr->ship_info.melee_icon = CaptureDrawable (LoadGraphic ( RDPtr->ship_info.melee_icon_rsc)); if (!RDPtr->ship_info.melee_icon) { /* goto BadLoad */ } } if (RDPtr->ship_info.race_strings_rsc != NULL_RESOURCE) { RDPtr->ship_info.race_strings = CaptureStringTable (LoadStringTable ( RDPtr->ship_info.race_strings_rsc)); if (!RDPtr->ship_info.race_strings) { /* goto BadLoad */ } } if (LoadBattleData) { DATA_STUFF *RawPtr = &RDPtr->ship_data; if (!load_animation (RawPtr->ship, RawPtr->ship_rsc[0], RawPtr->ship_rsc[1], RawPtr->ship_rsc[2])) goto BadLoad; if (RawPtr->weapon_rsc[0] != NULL_RESOURCE) { if (!load_animation (RawPtr->weapon, RawPtr->weapon_rsc[0], RawPtr->weapon_rsc[1], RawPtr->weapon_rsc[2])) goto BadLoad; } if (RawPtr->special_rsc[0] != NULL_RESOURCE) { if (!load_animation (RawPtr->special, RawPtr->special_rsc[0], RawPtr->special_rsc[1], RawPtr->special_rsc[2])) goto BadLoad; } if (RawPtr->captain_control.captain_rsc != NULL_RESOURCE) { RawPtr->captain_control.background = CaptureDrawable (LoadGraphic ( RawPtr->captain_control.captain_rsc)); if (!RawPtr->captain_control.background) goto BadLoad; } if (RawPtr->victory_ditty_rsc != NULL_RESOURCE) { RawPtr->victory_ditty = LoadMusic (RawPtr->victory_ditty_rsc); if (!RawPtr->victory_ditty) goto BadLoad; } if (RawPtr->ship_sounds_rsc != NULL_RESOURCE) { RawPtr->ship_sounds = CaptureSound ( LoadSound (RawPtr->ship_sounds_rsc)); if (!RawPtr->ship_sounds) goto BadLoad; } } ExitFunc: return RDPtr; // TODO: We should really free the resources that did load here BadLoad: if (CodeRef) DestroyCodeRes (ReleaseCodeRes (CodeRef)); RDPtr = 0; /* failed */ goto ExitFunc; }