示例#1
0
void Game_System::BgmPlay(RPG::Music const& bgm) {
	RPG::Music previous_music = data.current_music;
	data.current_music = bgm;

	// (OFF) means play nothing
	// A Polish RPG Maker translation overtranslated the (OFF) reserved string.
	// This particular translation uses (Brak) in editor for these cases.
	// Because RPG_RT doesn't show warnings about audios not found,
	// theses strings are ignored to prevent filling the log.
	// Though RPG_RT plays files named (Brak) is still preferred to ignore it.
	if (!bgm.name.empty() && bgm.name != "(OFF)" && bgm.name != "(Brak)") {
		// Same music: Only adjust volume and speed
		if (previous_music.name == bgm.name) {
			if (previous_music.volume != bgm.volume) {
				if (!bgm_pending) { // Delay if not ready
					Audio().BGM_Volume(bgm.volume);
				}
			}
			if (previous_music.tempo != bgm.tempo) {
				if (!bgm_pending) { // Delay if not ready
					Audio().BGM_Pitch(bgm.tempo);
				}
			}
		} else {
			Audio().BGM_Stop();
			bgm_pending = true;
			FileRequestAsync* request = AsyncHandler::RequestFile("Music", bgm.name);
			request->Bind(&Game_System::OnBgmReady);
			request->Start();
		}
	} else {
		BgmStop();
	}
}
示例#2
0
void Scene_Gameover::Start() {
	// Load Background Graphic
	background.reset(new Sprite());
	background->SetBitmap(Cache::Gameover(Data::system.gameover_name));
	// Stop current music
	Audio().BGM_Stop();
	Audio().BGS_Stop();
	// Play gameover music
	Game_System::BgmPlay(Game_System::GetSystemBGM(Game_System::BGM_GameOver));
}
示例#3
0
		Audio OpenAudio(const Arg::loop_<bool> loop, const FilePath& defaultPath, const String& title)
		{
			if (const auto path = OpenFile(detail::OpenAudioFilters, defaultPath, title))
			{
				return Audio(path.value(), loop);
			}
			else
			{
				return Audio();
			}
		}
示例#4
0
void Game_System::BgmPlay(RPG::Music const& bgm) {
	RPG::Music previous_music = data.current_music;
	data.current_music = bgm;

	// Validate
	if (bgm.volume < 0 || bgm.volume > 100) {
		data.current_music.volume = 100;

		Output::Debug("BGM %s has invalid volume %d", bgm.name.c_str(), bgm.volume);
	}

	if (bgm.fadein < 0 || bgm.fadein > 10000) {
		data.current_music.fadein = 0;

		Output::Debug("BGM %s has invalid fadein %d", bgm.name.c_str(), bgm.fadein);
	}

	if (bgm.tempo < 50 || bgm.tempo > 200) {
		data.current_music.tempo = 100;

		Output::Debug("BGM %s has invalid tempo %d", bgm.name.c_str(), bgm.tempo);
	}

	// (OFF) means play nothing
	if (!bgm.name.empty() && bgm.name != "(OFF)") {
		// Same music: Only adjust volume and speed
		if (!force_bgm_play && previous_music.name == bgm.name) {
			if (previous_music.volume != data.current_music.volume) {
				if (!bgm_pending) { // Delay if not ready
					Audio().BGM_Volume(data.current_music.volume);
				}
			}
			if (previous_music.tempo != data.current_music.tempo) {
				if (!bgm_pending) { // Delay if not ready
					Audio().BGM_Pitch(data.current_music.tempo);
				}
			}
		} else {
			Audio().BGM_Stop();
			bgm_pending = true;
			FileRequestAsync* request = AsyncHandler::RequestFile("Music", bgm.name);
			music_request_id = request->Bind(&Game_System::OnBgmReady);
			request->Start();
		}
	} else {
		BgmStop();
	}

	force_bgm_play = false;
}
示例#5
0
void Game_System::BgmPlay(RPG::Music const& bgm) {
	// Same music: Only adjust volume and speed
	if (data.current_music.name == bgm.name) {
		if (data.current_music.volume != bgm.volume) {
			Audio().BGM_Volume(bgm.volume);
		}
		if (data.current_music.tempo != bgm.tempo) {
			Audio().BGM_Pitch(bgm.tempo);
		}
	} else {
		Audio().BGM_Play(bgm.name, bgm.volume, bgm.tempo, bgm.fadein);
	}
	data.current_music = bgm;
	Graphics::FrameReset();
}
示例#6
0
文件: Main.cpp 项目: adan830/FKEngine
	CGameWindow()
		: CFKWindow( 640,480,false )
		, m_Player( Graphics(), Audio() )
		, m_Font( Graphics(), FK2DEngine::DefaultFontName(), 24 )
		, m_nFps( 0 )
		, m_nLastFps( 0 )
	{
		SetCaption( L"自由骑士笃志引擎:DEMO1" );

		std::wstring szFileName = FK2DEngine::ShareResourcePrefix() + L"rc/media/Space.png";
		m_pBackgroundImage.reset( new FK2DEngine::CImage( Graphics(), szFileName, false ) );

		szFileName = FK2DEngine::ShareResourcePrefix() + L"rc/media/Star.png";
		FK2DEngine::ImagesFromTiledBitmap( Graphics(), szFileName, 25, 25, false, m_StarAnim );

		m_Player.Warp( 320, 240 );

		//szFileName = FK2DEngine::ShareResourcePrefix() + L"avgRc\\Attack.cur";
		//SetNewCursor( szFileName );

		szFileName = FK2DEngine::ShareResourcePrefix() + L"avgRc\\AnimCursor.bmp";
		m_pCursorBitmap = LoadImageFile( szFileName );
		SSAnimationCursorManager::Instance()->AddCursor( m_pCursorBitmap, L"默认鼠标", 32, 32 );
		SSAnimationCursorManager::Instance()->SetAnimCursor( L"默认鼠标" );
		SSAnimationCursorManager::Instance()->Enable( true );
	}
示例#7
0
文件: track.cpp 项目: eqbeats/eqbeats
void Pages::track(Document *doc){

    std::string sub;
    int tid = route("track", path, sub);
    bool post = cgi.getEnvironment().getRequestMethod() == "POST";

    if(!tid) return;

    if(sub == ""){

        ExtendedTrack t(tid);
        if(!t) return;

        doc->setHtml("html/track.tpl", t.title);

        doc->rootDict()->SetValueAndShowSection("TID", number(t.id), "HAS_OEMBED");
        t.fill(doc->dict());
        t.player(doc->dict(), true);
        Audio(&t).fill(doc->dict());

        Dict *embed = doc->dict()->AddIncludeDictionary("EMBED_CODE");
        embed->SetFilename("html/embed-code.tpl");
        embed->SetIntValue("WIDTH", 150);
        t.Track::fill(embed);

        Dict *uploader = doc->dict()->AddIncludeDictionary("UPLOADER");
        uploader->SetFilename("html/uploader.tpl");
        uploader->SetValue("ACTION", t.url() + "/upload");

        EventList::track(t).fill(doc->dict(), "EVENTS");
    }
}
示例#8
0
void Game_System::OnBgmReady(FileRequestResult* result) {
	// Take from current_music, params could have changed over time
	bgm_pending = false;

	std::string path;
	if (isStopFilename(result->file, FileFinder::FindMusic, path)) {
		Audio().BGM_Stop();
		return;
	} else if (path.empty()) {
		Output::Debug("Music not found: %s", result->file.c_str());
		return;
	}

	if (Utils::EndsWith(result->file, ".link")) {
		// Handle Ineluki's MP3 patch
		std::shared_ptr<std::fstream> stream = FileFinder::openUTF8(path, std::ios_base::in);
		if (!stream) {
			Output::Warning("Ineluki link read error: %s", path.c_str());
			return;
		}

		// The first line contains the path to the actual audio file to play
		std::string line = Utils::ReadLine(*stream.get());
		line = ReaderUtil::Recode(line, Player::encoding);

		Output::Debug("Ineluki link file: %s -> %s", path.c_str(), line.c_str());

		#ifdef EMSCRIPTEN
		Output::Warning("Ineluki MP3 patch unsupported in the web player");
		return;
		#else
		std::string line_canonical = FileFinder::MakeCanonical(line, 1);

		std::string ineluki_path = FileFinder::FindDefault(line_canonical);
		if (ineluki_path.empty()) {
			Output::Debug("Music not found: %s", line_canonical.c_str());
			return;
		}

		Audio().BGM_Play(ineluki_path, data.current_music.volume, data.current_music.tempo, data.current_music.fadein);

		return;
		#endif
	}

	Audio().BGM_Play(path, data.current_music.volume, data.current_music.tempo, data.current_music.fadein);
}
示例#9
0
文件: Player.cpp 项目: trnila/keys
void Player::add(std::string code, std::string path) {
	try {
		letters.insert({code, Audio(code, path)});
		std::cerr << "<5>" << "Adding '" << code << "' from '" << path << "'\n";
	} catch(std::runtime_error &e) {
		std::cerr << "<3>" << e.what() << "\n";
	}
}
示例#10
0
void Game_System::SePlay(RPG::Sound const& se) {
	// HACK:
	// Yume Nikki plays hundreds of sound effects at 0% volume on
	// startup. Probably for caching. This triggers "No free channels"
	// warnings.
	if (se.volume > 0) {
		Audio().SE_Play(se.name, se.volume, se.tempo);
	}
}
示例#11
0
void Game_System::OnSeReady(FileRequestResult* result, int volume, int tempo, bool stop_sounds) {
	auto item = se_request_ids.find(result->file);
	if (item != se_request_ids.end()) {
		se_request_ids.erase(item);
	}

	std::string path;
	if (isStopFilename(result->file, FileFinder::FindSound, path)) {
		if (stop_sounds) {
			Audio().SE_Stop();
		}
		return;
	} else if (path.empty()) {
		Output::Debug("Sound not found: %s", result->file.c_str());
		return;
	}

	Audio().SE_Play(path, volume, tempo);
}
示例#12
0
void Game_System::OnBgmReady(FileRequestResult* result) {
	if (data.current_music.name != result->file) {
		// Not the music we expect, probably changed over time
		return;
	}

	// Take from current_music, params could have changed over time
	Audio().BGM_Play(result->file, data.current_music.volume, data.current_music.tempo, data.current_music.fadein);

	bgm_pending = false;
}
示例#13
0
		static bool DefaultPreload(AudioAssetData& asset)
		{
			if (asset.audio)
			{
				return true;
			}

			asset.audio = Audio(asset.path, asset.loop);

			return !asset.audio.isEmpty();
		}
示例#14
0
void Game_System::BgmPlay(RPG::Music const& bgm) {
	// (OFF) means play nothing
	if (!bgm.name.empty() && bgm.name != "(OFF)") {
		// Same music: Only adjust volume and speed
		if (data.current_music.name == bgm.name) {
			if (data.current_music.volume != bgm.volume) {
				Audio().BGM_Volume(bgm.volume);
			}
			if (data.current_music.tempo != bgm.tempo) {
				Audio().BGM_Pitch(bgm.tempo);
			}
		} else {
			Audio().BGM_Play(bgm.name, bgm.volume, bgm.tempo);
		}
	} else {
		Audio().BGM_Stop();
	}
	data.current_music = bgm;
	Graphics::FrameReset();
}
示例#15
0
void Scene_End::Update() {
	command_window->Update();

	if (Input::IsTriggered(Input::CANCEL)) {
		Game_System::SePlay(Main_Data::game_data.system.cancel_se);
		Scene::Pop(); // Select End Game
	} else if (Input::IsTriggered(Input::DECISION)) {
		Game_System::SePlay(Main_Data::game_data.system.decision_se);
		switch (command_window->GetIndex()) {
		case 0: // Yes
			Audio().BGM_Fade(800);
			Audio().BGS_Fade(800);
			Audio().ME_Fade(800);
			Scene::PopUntil(Scene::Title);
			break;
		case 1: // No
			Scene::Pop();
			break;
		}
	}
}
示例#16
0
文件: track.cpp 项目: codl/eqbeats
void Track::deleteTrack() {
    log("Deleting track: " + title + " (" + number(id) + ")");

    Art art(id);
    if(art) art.remove();
    Audio(this).unlink();

    Playlist::removeTrack(id);
    DB::query("DELETE FROM events WHERE track_id = " + number(id));
    DB::query("DELETE FROM featured_tracks WHERE track_id = " + number(id));
    DB::query("DELETE FROM favorites WHERE type = 'track' AND ref = " + number(id));
    DB::query("DELETE FROM user_features WHERE type = 'track' AND ref = " + number(id));
    DB::query("DELETE FROM tracks WHERE id = " + number(id));
}
示例#17
0
bool Game_Interpreter_Map::ContinuationShowInnFinish(RPG::EventCommand const& /* com */) {
	if (Graphics::IsTransitionPending())
		return false;

	const RPG::Music& bgm_inn = Game_System::GetSystemBGM(Game_System::BGM_Inn);
	if (bgm_inn.name.empty() ||
		bgm_inn.name == "(OFF)" ||
		bgm_inn.name == "(Brak)" ||
		!Audio().BGM_IsPlaying() ||
		Audio().BGM_PlayedOnce()) {

		Game_System::BgmStop();
		continuation = NULL;
		Graphics::GetTransition().Init(Transition::TransitionFadeIn, Scene::instance.get(), 36, false);
		Game_System::BgmPlay(Main_Data::game_data.system.before_battle_music);

		if (Game_Temp::inn_handlers)
			SkipTo(Cmd::Stay, Cmd::EndInn);
		index++;
		return false;
	}

	return false;
}
示例#18
0
void Scene_Title::CommandNewGame() {
    if (!CheckValidPlayerLocation()) {
        Output::Warning("The game has no start location set.");
    } else {
        Game_System::SePlay(Main_Data::game_data.system.decision_se);
        Audio().BGM_Stop();
        Graphics::SetFrameCount(0);
        CreateGameObjects();
        Game_Map::Setup(Data::treemap.start.party_map_id);
        Main_Data::game_player->MoveTo(
            Data::treemap.start.party_x, Data::treemap.start.party_y);
        Main_Data::game_player->Refresh();
        Game_Map::Autoplay();
        Scene::Push(EASYRPG_MAKE_SHARED<Scene_Map>());
    }
}
示例#19
0
void Game_System::SePlay(const RPG::Sound& se, bool stop_sounds) {
	static bool ineluki_warning_shown = false;

	if (se.name.empty()) {
		return;
	} else if (se.name == "(OFF)") {
		if (stop_sounds) {
			Audio().SE_Stop();
		}
		return;
	}

	std::string end = ".script";
	if (se.name.length() >= end.length() &&
		0 == se.name.compare(se.name.length() - end.length(), end.length(), end)) {
		if (!ineluki_warning_shown) {
			Output::Warning("This game seems to use Ineluki's key patch to support "
				"additional keys, mouse or scripts. Such patches are "
				"unsupported, so this functionality will not work!");
			ineluki_warning_shown = true;
		}
		return;
	}

	// NOTE: Yume Nikki plays hundreds of sound effects at 0% volume on startup,
	// probably for caching. This avoids "No free channels" warnings.
	if (se.volume == 0)
		return;

	int volume = se.volume;
	int tempo = se.tempo;

	// Validate
	if (se.volume < 0 || se.volume > 100) {
		Output::Debug("SE %s has invalid volume %d", se.name.c_str(), se.volume);
		volume = 100;
	}

	if (se.tempo < 50 || se.tempo > 200) {
		Output::Debug("SE %s has invalid tempo %d", se.name.c_str(), se.tempo);
		tempo = 100;
	}

	FileRequestAsync* request = AsyncHandler::RequestFile("Sound", se.name);
	se_request_ids[se.name] = request->Bind(std::bind(&Game_System::OnSeReady, std::placeholders::_1, volume, tempo, stop_sounds));
	request->Start();
}
示例#20
0
void UploadWinController::Add(MainWindow* mainWin){
    QStringList files = QFileDialog::getOpenFileNames(mainWin,
                                QString::fromUtf8("Выберите аудиофайлы"),
                                QDir::homePath(),
                                "Music (*.mp3 *.mp4 *.wav)");

    QVector<Audio> tracks;
    foreach(QString str, files){
       tracks.append(Audio(str));
       //currentPath = str.mid(0, startIndexNameSong + 1);

       // информация о преобразовании имени песни
       // и пути к ней
       /*qDebug() << str;
       qDebug() << startIndexNameSong;
       qDebug() << str.size() - 1;
       qDebug() << str.mid(startIndexNameSong + 1, str.size() - 1);
       qDebug() << currentPath;*/
    }
示例#21
0
Audio Audio::fromQDomElement(const QDomElement& fr, const QString& srvcId, const QString& accountId, const QString& friendId)
{
    Audio ret = Audio();

    ret.setAudioId(fr.elementsByTagName(NODE_AUDIO_ID).at(0).firstChild().toText().data());
    if (fr.elementsByTagName(NODE_AUDIO_TITLE).count() > 0)
        ret.setTitle(fr.elementsByTagName(NODE_AUDIO_TITLE).at(0).firstChild().toText().data());
    if (fr.elementsByTagName(NODE_AUDIO_ARTIST).count() > 0)
        ret.setArtist(fr.elementsByTagName(NODE_AUDIO_ARTIST).at(0).firstChild().toText().data());
    if (fr.elementsByTagName(NODE_AUDIO_DURATION).count() > 0)
        ret.setDuration(fr.elementsByTagName(NODE_AUDIO_DURATION).at(0).firstChild().toText().data().toInt());
    if (fr.elementsByTagName(NODE_AUDIO_URL).count()>0)
        ret.setUrl(fr.elementsByTagName(NODE_AUDIO_URL).at(0).firstChild().toText().data());

    ret.setServiceId(srvcId);
    ret.setAccountId(accountId);
    ret.setOwnerId(friendId);

    return ret;
}
示例#22
0
void Scene_Title::CommandShutdown() {
	Game_System::SePlay(Main_Data::game_data.system.decision_se);
	Audio().BGS_Fade(800);
	Graphics::Transition(Graphics::TransitionFadeOut, 32, true);
	Scene::Pop();
}
示例#23
0
void Pages::track(Document *doc){

    std::string sub;
    int tid = route("track", path, sub);
    bool post = cgi.getEnvironment().getRequestMethod() == "POST";

    if(!tid) return;

    if(sub == ""){

        ExtendedTrack t(tid);
        if(!t) return;

        doc->setHtml("html/track.tpl", t.title);

        doc->rootDict()->SetValueAndShowSection("TID", number(t.id), "HAS_OEMBED");
        t.fill(doc->dict());
        t.player(doc->dict(), true);
        Audio(&t).fill(doc->dict());

        doc->dict()->ShowSection(Youtube(t.artist.id) ? "HAS_YOUTUBE" : "NO_YOUTUBE");

        Dict *embed = doc->dict()->AddIncludeDictionary("EMBED_CODE");
        embed->SetFilename("html/embed-code.tpl");
        embed->SetIntValue("WIDTH", 150);
        t.Track::fill(embed);

        Dict *uploader = doc->dict()->AddIncludeDictionary("UPLOADER");
        uploader->SetFilename("html/uploader.tpl");
        uploader->SetValue("ACTION", t.url() + "/upload");

        int hits = Stat::push("trackView", t.artist.id, tid);
        doc->dict()->SetValue("HIT_COUNT", number(hits));
        int unique_hits = Stat::get("trackView", 0, tid, true);
        doc->dict()->SetValue("UNIQUE_HIT_COUNT", number(unique_hits));
        doc->rootDict()->ShowSection("REQUIRES_STATS_JS");

        Session::fill(doc->dict());
        EventList::track(t).fill(doc->dict(), "EVENTS", false);
        doc->dict()->ShowSection(Follower(Session::user().id).favorited(tid) ? "IS_FAVORITE" : "NOT_FAVORITE");

        if(Session::user()){
            DB::Result playlists = DB::query(
                "SELECT id, name FROM playlists WHERE user_id = " + number(Session::user().id) + " ORDER BY name ASC");
            if(!playlists.empty()){
                doc->dict()->ShowSection("HAS_PLAYLISTS");
                for(DB::Result::const_iterator i=playlists.begin(); i!=playlists.end(); i++){
                    Dict *playlist = doc->dict()->AddSectionDictionary("PLAYLIST");
                    playlist->SetValue("PLAYLIST_ID", i->at(0));
                    playlist->SetValue("PLAYLIST_NAME", i->at(1));
                }
            }
        }
    }

    else if(sub == "delete"){
        Track t(tid);
        if(!t) return;
        if(!t.artist.self())
            doc->redirect(t.url());

        else if(!post || cgi("confirm") != "Delete" || Session::nonce() != cgi("nonce")){
            Session::newNonce();
            doc->setHtml("html/delete.tpl", "Track deletion");
            doc->dict()->SetValue("WHAT", t.title);
            doc->dict()->SetValue("CANCEL_URL", t.url());
        }

        else{
            log("Deleting track: " + t.title + " (" + number(t.id) + ")");

            Art art(t.id);
            if(art) art.remove();
            Audio(&t).unlink();

            Playlist::removeTrack(t.id);
            DB::query("DELETE FROM events WHERE track_id = " + number(t.id));
            DB::query("DELETE FROM featured_tracks WHERE track_id = " + number(t.id));
            DB::query("DELETE FROM favorites WHERE type = 'track' AND ref = " + number(t.id));
            DB::query("DELETE FROM user_features WHERE type = 'track' AND ref = " + number(t.id));
            DB::query("DELETE FROM tracks WHERE id = " + number(t.id));

            doc->redirect(Session::user().url());
        }

    }

    else if(sub == "publish"){
        Track t(tid);
        if(!t) return;
        if(tid != number(cgi("tid")))
            return doc->redirect(t.url());

        if(t.artist.self() && !t.visible && post){

            DB::query("UPDATE tracks SET visible = 't', date = 'now' WHERE id = " + number(t.id));

            Event e;
            e.type = Event::Publish;
            e.source = t.artist;
            e.track = t;
            e.push();

            std::vector<std::string> emails = Follower(t.artist.id).followers();
            std::string maildata =
                "From: EqBeats notification <*****@*****.**>\n"
                "Message-ID: notify-t" + number(t.id) + "\n"
                "Subject: " + filter("EqBeats notification: " + t.artist.name + " - " + t.title) + "\n"
                "Precedence: bulk\n\n" +
                t.artist.name + " just published a new track : " + t.title + "\n"
                "Listen to it here : " + eqbeatsUrl() + t.url() + "\n\n"
                "You're receiving this email because you're following " + t.artist.name + " on EqBeats.\n"
                "If you don't want to receive these notifications anymore, go to " + eqbeatsUrl() + t.artist.url() + " and click \"Stop following\".";
            for(std::vector<std::string>::const_iterator i = emails.begin(); i!=emails.end(); i++)
                sendMail(i->c_str(), maildata.c_str());

        }
        doc->redirect(t.url());

    }

}
示例#24
0
void Scene_Title::CommandShutdown() {
	Game_System::SePlay(Game_System::GetSystemSE(Game_System::SFX_Decision));
	Audio().BGS_Fade(800);
	Graphics::Transition(Graphics::TransitionFadeOut, 32, true);
	Scene::Pop();
}
示例#25
0
bool Game_Interpreter::CommandFadeOutBGM(RPG::EventCommand const& com) { // code 11520
	int fadeout = com.parameters[0];
	Audio().BGM_Fade(fadeout);
	return true;
}
示例#26
0
void Game_Character::MoveTypeCustom() {
	if (IsStopping()) {
		move_failed = false;
		if ((size_t)move_route_index >= move_route->move_commands.size()) {
			// End of Move list
			if (move_route->repeat) {
				move_route_index = 0;
			} else if (move_route_forcing) {
				move_route_forcing = false;
				if (move_route_owner != NULL) {
					move_route_owner->EndMoveRoute(move_route);
				}
				move_route = original_move_route;
				move_route_index = original_move_route_index;
				original_move_route = NULL;
			}
		} else {
			RPG::MoveCommand& move_command = move_route->move_commands[move_route_index];
			switch (move_command.command_id) {
			case RPG::MoveCommand::Code::move_up:
				MoveUp(); break;
			case RPG::MoveCommand::Code::move_right:
				MoveRight(); break;
			case RPG::MoveCommand::Code::move_down:
				MoveDown(); break;
			case RPG::MoveCommand::Code::move_left:
				MoveLeft(); break;
			case RPG::MoveCommand::Code::move_upright: break;
			case RPG::MoveCommand::Code::move_downright: break;
			case RPG::MoveCommand::Code::move_downleft: break;
			case RPG::MoveCommand::Code::move_upleft: break;
			case RPG::MoveCommand::Code::move_random:
				MoveRandom();
				break;
			case RPG::MoveCommand::Code::move_towards_hero:
				MoveTowardsPlayer();
				break;
			case RPG::MoveCommand::Code::move_away_from_hero:
				MoveAwayFromPlayer();
				break;
			case RPG::MoveCommand::Code::move_forward:
				MoveForward();
				break;
			case RPG::MoveCommand::Code::face_up:
				TurnUp(); break;
			case RPG::MoveCommand::Code::face_right:
				TurnRight(); break;
			case RPG::MoveCommand::Code::face_down:
				TurnDown(); break;
			case RPG::MoveCommand::Code::face_left:
				TurnLeft(); break;
			case RPG::MoveCommand::Code::turn_90_degree_right:
				Turn90DegreeRight();
				break;
			case RPG::MoveCommand::Code::turn_90_degree_left:
				Turn90DegreeLeft();
				break;
			case RPG::MoveCommand::Code::turn_180_degree:
				Turn180Degree();
				break;
			case RPG::MoveCommand::Code::turn_90_degree_random:
				Turn90DegreeLeftOrRight();
				break;
			case RPG::MoveCommand::Code::face_random_direction: break;
			case RPG::MoveCommand::Code::face_hero: break;
			case RPG::MoveCommand::Code::face_away_from_hero: break;
			case RPG::MoveCommand::Code::wait: break;
			case RPG::MoveCommand::Code::begin_jump: break;
			case RPG::MoveCommand::Code::end_jump: break;
			case RPG::MoveCommand::Code::lock_facing:
				Lock();
				break;
			case RPG::MoveCommand::Code::unlock_facing:
				Unlock();
				break;
			case RPG::MoveCommand::Code::increase_movement_speed:
				move_speed = min(move_speed + 1, 6); break;
			case RPG::MoveCommand::Code::decrease_movement_speed:
				move_speed = max(move_speed - 1, 1); break;
			case RPG::MoveCommand::Code::increase_movement_frequence: break;
			case RPG::MoveCommand::Code::decrease_movement_frequence: break;
			case RPG::MoveCommand::Code::switch_on: // Parameter A: Switch to turn on
				Game_Switches[move_command.parameter_a] = true;
				Game_Map::SetNeedRefresh(true);
				break;
			case RPG::MoveCommand::Code::switch_off: // Parameter A: Switch to turn off
				Game_Switches[move_command.parameter_a] = false;
				Game_Map::SetNeedRefresh(true);
				break;
			case RPG::MoveCommand::Code::change_graphic: // String: File, Parameter A: index
				character_name = move_command.parameter_string;
				character_index = move_command.parameter_a;
				break;
			case RPG::MoveCommand::Code::play_sound_effect: // String: File, Parameters: Volume, Tempo, Balance
				if (move_command.parameter_string != "(OFF)") {
					Audio().SE_Play(move_command.parameter_string,
						move_command.parameter_a, move_command.parameter_b);
				}
				break;
			case RPG::MoveCommand::Code::walk_everywhere_on:
				through = true;
				break;
			case RPG::MoveCommand::Code::walk_everywhere_off:
				through = false;
				break;
			case RPG::MoveCommand::Code::stop_animation: break;
			case RPG::MoveCommand::Code::start_animation: break;
			case RPG::MoveCommand::Code::increase_transp: break; // ???
			case RPG::MoveCommand::Code::decrease_transp: break; // ???
			}

			if (move_route->skippable || !move_failed) {
				++move_route_index;
			}
		}
	}
}
示例#27
0
void Player::Resume() {
	Input::ResetKeys();
	Audio().BGM_Resume();
	Graphics::FrameReset();
}
示例#28
0
void Player::Pause() {
	Audio().BGM_Pause();
}
示例#29
0
void Game_System::BgmFade(int duration) {
	Audio().BGM_Fade(duration);
	force_bgm_play = true;
}
示例#30
0
void Game_System::BgmStop() {
	music_request_id = FileRequestBinding();
	data.current_music.name = "(OFF)";
	Audio().BGM_Stop();
}