mirror of
https://github.com/Vita3K/Vita3K-Android.git
synced 2024-11-26 23:10:39 +00:00
Typo fixes #2475
This commit is contained in:
parent
e395624811
commit
75a6bf0d86
39
README.md
39
README.md
@ -5,23 +5,21 @@
|
||||
|
||||
## Introduction
|
||||
|
||||
Vita3K is an experimental PlayStation Vita emulator for Windows, Linux, macOS and [Android](https://github.com/Vita3K/Vita3K-Android).
|
||||
Vita3K is an experimental PlayStation Vita emulator for Windows, Linux, macOS and Android.
|
||||
|
||||
* [Website](https://vita3k.org/) (information for users)
|
||||
* [Wiki](https://github.com/Vita3K/Vita3K/wiki) (information for developers)
|
||||
* [**Discord**](https://discord.gg/MaWhJVH) (recommended)
|
||||
* IRC `#vita3k` on **freenode** ([Web-based IRC client](https://webchat.freenode.net/?channels=%23vita3k))
|
||||
* [Patreon](https://www.patreon.com/Vita3K) (support the project)
|
||||
|
||||
You can view the Android version [here](https://github.com/Vita3K/Vita3K-Android).
|
||||
* [Discord server](https://discord.gg/MaWhJVH) (recommended)
|
||||
|
||||
## Compatibility
|
||||
|
||||
The emulator currently runs most homebrew programs. It is also able to load some decrypted commercial games.
|
||||
The emulator currently runs most homebrew programs. It is also able to load some commercial games.
|
||||
|
||||
- [Homebrew compatibility page](https://vita3k.org/compatibility-homebrew.html)
|
||||
- [Commercial compatibility page](https://vita3k.org/compatibility.html)
|
||||
|
||||
## Gallery
|
||||
|
||||
| **Persona 4 Golden** by Atlus | **A Rose in the Twilight** by Nippon Ichi Software |
|
||||
| :-----------------------------------------------------------: | :--------------------------------------------------------------------------------------------: |
|
||||
| ![Persona 4 Golden screenshot](./_readme/screenshots/P4G.png) | ![A Rose in the Twilight screenshot](./_readme/screenshots/A%20Rose%20in%20the%20Twilight.png) |
|
||||
@ -34,7 +32,7 @@ The emulator currently runs most homebrew programs. It is also able to load some
|
||||
| :----------------------------------------------------------------: | :------------------------------------------------------------------------: |
|
||||
| ![Fruit Ninja Screenshot](./_readme/screenshots/Fruit%20Ninja.png) | ![Jetpack Joyride Screenshot](./_readme/screenshots/Jetpack%20Joyride.png) |
|
||||
|
||||
## Licence
|
||||
## License
|
||||
|
||||
Vita3K is licensed under the **GPLv2** license. This is largely dictated by external dependencies, most notably Unicorn.
|
||||
|
||||
@ -49,6 +47,8 @@ Vita3K is licensed under the **GPLv2** license. This is largely dictated by exte
|
||||
* [vita3k-git](https://aur.archlinux.org/packages/vita3k-git)<sup><small>AUR</small></sup>
|
||||
* Requirements:
|
||||
* xdg-desktop-portal
|
||||
* [Android](https://github.com/Vita3K/Vita3K-Android/releases/)
|
||||
* [Adreno drivers](https://github.com/K11MCH1/AdrenoToolsDrivers/releases/)
|
||||
* Others
|
||||
* [Download Artifact](https://github.com/Vita3K/Vita3K/actions?query=event%3Apush+is%3Asuccess+branch%3Amaster)
|
||||
|
||||
@ -57,26 +57,17 @@ Vita3K is licensed under the **GPLv2** license. This is largely dictated by exte
|
||||
Please see [`building.md`](./building.md).
|
||||
|
||||
## Running
|
||||
Specify the path to a .vpk file as the first command line argument, or run `Vita3K --help` from the command-line for a full list of options.
|
||||
For more detailed instructions on running/installing games on all platforms, please read the **#info-faq** channel on our [Discord Server](https://discord.gg/MaWhJVH).
|
||||
Look through the app list and click on the app you would like to run and click the start button.
|
||||
|
||||
For more detailed instructions on running/installing apps on Vita3K, please read the **#info-faq** channel on our [Discord Server](https://discord.gg/MaWhJVH).
|
||||
|
||||
## Bugs and issues
|
||||
The project is in an early stage, so please be sensitive to that when opening new issues. Expect crashes, glitches, low compatibility and poor performance.
|
||||
The project is in an early stage, so please be mindful when opening new issues. Expect crashes, glitches, low compatibility and poor performance.
|
||||
|
||||
## Thanks
|
||||
Thanks go out to people who offered advice or otherwise made this project possible, such as Davee, korruptor, Rinnegatamante, ScHlAuChi, Simon Kilroy, TheFlow, xerpi, xyz, Yifan Lu and many others.
|
||||
|
||||
## Donations
|
||||
If you would like to show your appreciation or help fund development, the project has a [Patreon](https://www.patreon.com/Vita3K) page.
|
||||
|
||||
## Supporters
|
||||
Thank you to the following supporters:
|
||||
* Mored1984
|
||||
* soiaf
|
||||
|
||||
If you support us on Patreon and would like your name added, please get in touch or open a Pull Request.
|
||||
Thanks go out to the developer team and [everyone who has contributed](https://github.com/Vita3K/Vita3K/graphs/contributors). These are people like petmac, frangarcj, VelocityRa, 1whatleytay, EXtremeExploit, HolyMcDiver, HorrorTroll, IllusionMan1212, KorewaWatchful, scribam, sunho, wfscans, Macdu, bookmist and pent0.
|
||||
|
||||
## Note
|
||||
The purpose of this emulator is not to enable illegal activity. You can dump games by using [NoNpDrm](https://github.com/TheOfficialFloW/NoNpDrm)/[FAGDec](https://github.com/CelesteBlue-dev/PSVita-RE-tools/tree/master/FAGDec/build). You can get homebrew programs from [VitaDB](https://vitadb.rinnegatamante.it/).
|
||||
The purpose of this emulator is not to enable illegal activity. You can dump games from a Vita by using [NoNpDrm](https://github.com/TheOfficialFloW/NoNpDrm) or [FAGDec](https://github.com/CelesteBlue-dev/PSVita-RE-tools/tree/master/FAGDec/build). You can get homebrew programs from [VitaDB](https://vitadb.rinnegatamante.it/).
|
||||
|
||||
PlayStation and PlayStation Vita are trademarks of Sony Interactive Entertainment Inc. This emulator is not related to or endorsed by Sony, or derived from confidential materials belonging to Sony.
|
||||
PlayStation, PlayStation Vita and PlayStation Network are all registered trademarks of Sony Interactive Entertainment Inc. This emulator is not related to or endorsed by Sony, or derived from confidential materials belonging to Sony.
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 140 KiB |
Binary file not shown.
Before Width: | Height: | Size: 659 KiB |
@ -57,7 +57,7 @@
|
||||
<history_version>Version {}</history_version>
|
||||
<information>Information</information>
|
||||
<app_delete>This application and all related data, including saved data, will be deleted.</app_delete>
|
||||
<app_delete_note>Deleting a application may take a while
|
||||
<app_delete_note>Deleting an application may take a while
|
||||
depending on its size and your hardware.</app_delete_note>
|
||||
<addcont_delete>Do you want to delete this add-on data?</addcont_delete>
|
||||
<license_delete>Do you want to delete this license?</license_delete>
|
||||
|
@ -57,7 +57,7 @@
|
||||
<history_version>Version {}</history_version>
|
||||
<information>Information</information>
|
||||
<app_delete>This application and all related data, including saved data, will be deleted.</app_delete>
|
||||
<app_delete_note>Deleting a application may take a while
|
||||
<app_delete_note>Deleting an application may take a while
|
||||
depending on its size and your hardware.</app_delete_note>
|
||||
<addcont_delete>Do you want to delete this add-on data?</addcont_delete>
|
||||
<license_delete>Do you want to delete this license?</license_delete>
|
||||
|
@ -190,7 +190,7 @@ bool init(EmuEnvState &state, Config &cfg, const Root &root_paths) {
|
||||
break;
|
||||
|
||||
case renderer::Backend::Vulkan:
|
||||
error_dialog("Could not create Vulkan context!");
|
||||
error_dialog("Could not create Vulkan context!\nDoes your device support Vulkan?");
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -210,7 +210,7 @@ bool init(EmuEnvState &state, Config &cfg, const Root &root_paths) {
|
||||
LOG_CRITICAL("Unicorn backend is not supported with a page table");
|
||||
|
||||
if (!state.audio.init(resume_thread, state.cfg.audio_backend)) {
|
||||
LOG_WARN("Failed to init audio! Audio will not work.");
|
||||
LOG_WARN("Failed to initialize audio! Audio will not work.");
|
||||
}
|
||||
|
||||
if (!init(state.io, state.base_path, state.pref_path, state.cfg.console)) {
|
||||
|
@ -78,7 +78,7 @@ void update_presence(const std::string &state, const std::string &details, bool
|
||||
}
|
||||
discord_state.core->ActivityManager().UpdateActivity(activity, [](discord::Result result) {
|
||||
if (result != discord::Result::Ok) {
|
||||
LOG_ERROR("Error updating discord rich presence, err_code: {}", static_cast<int>(result));
|
||||
LOG_ERROR("Error updating Discord Rich Presence, err_code: {}", static_cast<int>(result));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -105,7 +105,7 @@ void AudioState::set_backend(const std::string &adapter_name) {
|
||||
} else if (adapter_name == "Cubeb") {
|
||||
adapter = std::make_unique<CubebAudioAdapter>(*this);
|
||||
} else {
|
||||
LOG_ERROR("Unkown audio adapter {}", adapter_name);
|
||||
LOG_ERROR("Unknown audio adapter {}", adapter_name);
|
||||
return;
|
||||
}
|
||||
this->audio_backend = adapter_name;
|
||||
|
@ -72,7 +72,7 @@ bool Atrac9DecoderState::send(const uint8_t *data, uint32_t size) {
|
||||
|
||||
const int res = Atrac9Decode(decoder_handle, data, reinterpret_cast<short *>(result.data()), &decode_used);
|
||||
if (res != At9Status::ERR_SUCCESS) {
|
||||
LOG_ERROR("Decode failure with code {}!", res);
|
||||
LOG_ERROR("Decode failure with code {}", res);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -109,7 +109,7 @@ Atrac9DecoderState::Atrac9DecoderState(uint32_t config_data)
|
||||
const int err = Atrac9InitDecoder(decoder_handle, reinterpret_cast<uint8_t *>(&config_data));
|
||||
|
||||
if (err != At9Status::ERR_SUCCESS) {
|
||||
LOG_ERROR("Error initializing decoder!");
|
||||
LOG_ERROR("Error initializing decoder");
|
||||
}
|
||||
|
||||
Atrac9CodecInfo *info = new Atrac9CodecInfo;
|
||||
|
@ -76,7 +76,7 @@ bool load_compat_app_db(GuiState &gui, EmuEnvState &emuenv) {
|
||||
|
||||
// Check if title ID is valid
|
||||
if ((title_id.find("PCS") == std::string::npos) && (title_id != "NPXS10007")) {
|
||||
LOG_WARN("title ID {} is invalid. Please check GitHub issue {} and verify it!", title_id, issue_id);
|
||||
LOG_WARN("Title ID {} is invalid. Please check GitHub issue {} and verify it!", title_id, issue_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ bool load_compat_app_db(GuiState &gui, EmuEnvState &emuenv) {
|
||||
|
||||
// Check if app missing a status label
|
||||
if (state == UNKNOWN)
|
||||
LOG_WARN("App with title ID {} has an issue but no status label. Please check GitHub issue {} and request a status label to be added.", title_id, issue_id);
|
||||
LOG_WARN("App with Title ID {} has an issue but no status label. Please check GitHub issue {} and request a status label be added.", title_id, issue_id);
|
||||
|
||||
// Check if app already exists in compatibility database
|
||||
if (gui.compat.app_compat_db.contains(title_id))
|
||||
@ -129,7 +129,7 @@ bool update_compat_app_db(GuiState &gui, EmuEnvState &emuenv) {
|
||||
const auto updated_at = https::get_web_regex_result(latest_link, std::regex("Updated at: (\\d{2}-\\d{2}-\\d{4} \\d{2}:\\d{2}:\\d{2})"));
|
||||
if (updated_at.empty()) {
|
||||
gui.info_message.level = spdlog::level::err;
|
||||
gui.info_message.msg = "Failed to get current compatibility database updated at, check firewall/internet access, try again later.";
|
||||
gui.info_message.msg = "Failed to get current compatibility database, check firewall/internet access, try again later.";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ static fs::path check_path(const fs::path &output_path) {
|
||||
static ExitCode parse(Config &cfg, const fs::path &load_path, const fs::path &root_pref_path) {
|
||||
const auto loaded_path = check_path(load_path);
|
||||
if (loaded_path.empty() || !fs::exists(loaded_path)) {
|
||||
LOG_ERROR("Config file input path invalid (did you make sure to name the extension \".yml\"?)");
|
||||
LOG_ERROR("Config file input path invalid (did you name the extension \".yml\"?)");
|
||||
return FileNotFound;
|
||||
}
|
||||
|
||||
@ -232,7 +232,7 @@ ExitCode init_config(Config &cfg, int argc, char **argv, const Root &root_paths)
|
||||
}
|
||||
|
||||
if (cfg.console && (cfg.run_app_path || !cfg.content_path)) {
|
||||
LOG_ERROR("Console mode only supports vpk for now");
|
||||
LOG_ERROR("Command line version only supports .vpk for now.");
|
||||
return InitConfigFailed;
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ public:
|
||||
|
||||
std::optional<std::uint32_t> MemoryReadCode(Dynarmic::A32::VAddr addr) override {
|
||||
if (cpu->log_mem)
|
||||
LOG_TRACE("Instruction fetch at addr 0x{:X}", addr);
|
||||
LOG_TRACE("Instruction fetch at address 0x{:X}", addr);
|
||||
return MemoryRead32(addr);
|
||||
}
|
||||
|
||||
@ -273,21 +273,21 @@ public:
|
||||
case Dynarmic::A32::Exception::Yield:
|
||||
break;
|
||||
case Dynarmic::A32::Exception::UndefinedInstruction:
|
||||
LOG_WARN("Undefined instruction at addr 0x{:X}, inst 0x{:X} ({})", pc, MemoryReadCode(pc).value(), disassemble(*parent, pc, nullptr));
|
||||
LOG_WARN("Undefined instruction at address 0x{:X}, instruction 0x{:X} ({})", pc, MemoryReadCode(pc).value(), disassemble(*parent, pc, nullptr));
|
||||
InterpreterFallback(pc, 1);
|
||||
break;
|
||||
case Dynarmic::A32::Exception::UnpredictableInstruction:
|
||||
LOG_WARN("Unpredictable instruction at addr 0x{:X}, inst 0x{:X} ({})", pc, MemoryReadCode(pc).value(), disassemble(*parent, pc, nullptr));
|
||||
LOG_WARN("Unpredictable instruction at address 0x{:X}, instruction 0x{:X} ({})", pc, MemoryReadCode(pc).value(), disassemble(*parent, pc, nullptr));
|
||||
InterpreterFallback(pc, 1);
|
||||
break;
|
||||
case Dynarmic::A32::Exception::DecodeError: {
|
||||
LOG_WARN("Decode error at addr 0x{:X}, inst 0x{:X} ({})", pc, MemoryReadCode(pc).value(), disassemble(*parent, pc, nullptr));
|
||||
LOG_WARN("Decode error at address 0x{:X}, instruction 0x{:X} ({})", pc, MemoryReadCode(pc).value(), disassemble(*parent, pc, nullptr));
|
||||
InterpreterFallback(pc, 1);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
LOG_WARN("Unknown exception {} Raised at pc = 0x{:x}", static_cast<size_t>(exception), pc);
|
||||
LOG_TRACE("at addr 0x{:X}, inst 0x{:X} ({})", pc, MemoryReadCode(pc).value(), disassemble(*parent, pc, nullptr));
|
||||
LOG_TRACE("at address 0x{:X}, instruction 0x{:X} ({})", pc, MemoryReadCode(pc).value(), disassemble(*parent, pc, nullptr));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -453,7 +453,7 @@ static std::string cmd_continue(EmuEnvState &state, PacketCommand &command) {
|
||||
}
|
||||
|
||||
if (!step) {
|
||||
// resume the worlld
|
||||
// resume the world
|
||||
{
|
||||
auto lock = std::unique_lock(state.kernel.mutex);
|
||||
for (const auto &pair : state.kernel.threads) {
|
||||
@ -489,7 +489,7 @@ static std::string cmd_continue(EmuEnvState &state, PacketCommand &command) {
|
||||
}
|
||||
|
||||
auto thread = state.kernel.get_thread(state.gdb.inferior_thread);
|
||||
LOG_INFO("GDB Breakpoint triger (thread name: {}, thread_id: {})", thread->name, thread->id);
|
||||
LOG_INFO("GDB Breakpoint trigger (thread name: {}, thread_id: {})", thread->name, thread->id);
|
||||
LOG_INFO("PC: {} LR: {}", read_pc(*thread->cpu), read_lr(*thread->cpu));
|
||||
LOG_INFO("{}", thread->log_stack_traceback(state.kernel));
|
||||
|
||||
@ -840,4 +840,4 @@ void server_close(EmuEnvState &state) {
|
||||
state.gdb.server_die = true;
|
||||
if (state.gdb.server_thread && state.gdb.server_thread->get_id() != std::this_thread::get_id())
|
||||
state.gdb.server_thread->join();
|
||||
}
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ void draw_about_dialog(GuiState &gui, EmuEnvState &emuenv) {
|
||||
|
||||
ImGui::Text("%s", lang["github_website"].c_str());
|
||||
if (ImGui::Button("GitHub"))
|
||||
open_path("https://github.com/vita3k/vita3k");
|
||||
open_path("https://github.com/Vita3K/Vita3K");
|
||||
ImGui::Spacing();
|
||||
|
||||
ImGui::Text("%s", lang["vita3k_website"].c_str());
|
||||
|
@ -483,7 +483,7 @@ void draw_app_context_menu(GuiState &gui, EmuEnvState &emuenv, const std::string
|
||||
if (get_update_history(gui, emuenv, app_path))
|
||||
context_dialog = "history";
|
||||
else
|
||||
LOG_WARN("Patch note Error for title id: {} in path: {}", title_id, app_path);
|
||||
LOG_WARN("Patch note Error for Title ID {} in path {}", title_id, app_path);
|
||||
}
|
||||
}
|
||||
if (ImGui::MenuItem(lang["information"].c_str(), nullptr, &gui.vita_area.app_information)) {
|
||||
|
@ -154,7 +154,7 @@ struct LangState {
|
||||
{ "history_version", "Version {}" },
|
||||
{ "information", "Information" },
|
||||
{ "app_delete", "This application and all related data, including saved data, will be deleted." },
|
||||
{ "app_delete_note", "Deleting a application may take a while\ndepending on its size and your hardware." },
|
||||
{ "app_delete_note", "Deleting an application may take a while\ndepending on its size and your hardware." },
|
||||
{ "addcont_delete", "Do you want to delete this add-on data?" },
|
||||
{ "license_delete", "Do you want to delete this license?" },
|
||||
{ "save_delete", "Do you want to delete this saved data?" },
|
||||
|
Loading…
Reference in New Issue
Block a user