Compare commits
No commits in common. "main" and "1.2.3" have entirely different histories.
30
.gitignore
vendored
|
@ -1,26 +1,4 @@
|
|||
# Paths
|
||||
Games/
|
||||
Nwjs/
|
||||
Emu/
|
||||
|
||||
# Paths generated by fpPS4
|
||||
shader_dump/
|
||||
savedata/
|
||||
|
||||
# Launcher settings
|
||||
Settings.json
|
||||
|
||||
# Misc. Files
|
||||
*.tar.gz
|
||||
*.info
|
||||
*.nexe
|
||||
*.dump
|
||||
*.sprx
|
||||
*.exe
|
||||
*.dll
|
||||
*.pak
|
||||
*.zip
|
||||
*.pkg
|
||||
*.log
|
||||
*.dat
|
||||
*.sh
|
||||
Emu/*
|
||||
Nwjs/*
|
||||
!Nwjs/.gitkeep
|
||||
Settings.json
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
******************************************************************************
|
||||
fpPS4 Temmie's Launcher
|
||||
styles.css
|
||||
Styles.css
|
||||
|
||||
Main application stylesheet
|
||||
******************************************************************************
|
||||
|
@ -11,12 +11,10 @@ html, body {
|
|||
color: #fff;
|
||||
overflow: hidden;
|
||||
user-select: none;
|
||||
touch-action: none;
|
||||
font-family: monospace;
|
||||
scroll-behavior: smooth;
|
||||
background-color: #0f1e3e;
|
||||
text-shadow: 2px 2px 4px #000;
|
||||
background-image: linear-gradient(146deg, #090f1b, #162a50);
|
||||
}
|
||||
code {
|
||||
padding: 6px;
|
||||
|
@ -41,9 +39,6 @@ input[type='checkbox'] {
|
|||
margin-right: 8px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
input[type='color'] {
|
||||
cursor: pointer;
|
||||
}
|
||||
img {
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
|
@ -92,33 +87,33 @@ img {
|
|||
Divs
|
||||
*/
|
||||
.DIV_LIST {
|
||||
top: 0;
|
||||
top: 38px;
|
||||
left: 0px;
|
||||
z-index: 20;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
transition: 0.2s;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
background-color: #0000;
|
||||
height: calc(100% - 164px);
|
||||
transition-timing-function: cubic-bezier(0,1,0,1);
|
||||
background-color: #162a50;
|
||||
height: calc(100% - 202px);
|
||||
background-image: linear-gradient(146deg, #090f1b, #162a50);
|
||||
}
|
||||
.DIV_LOG {
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
z-index: 20;
|
||||
height: 164px;
|
||||
transition: 0.2s;
|
||||
position: absolute;
|
||||
background-color: #000;
|
||||
background-size: auto 50%;
|
||||
background-color: #010114c7;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('../img/logo.png');
|
||||
}
|
||||
.DIV_ACTIONS {
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
z-index: 30;
|
||||
width: 100%;
|
||||
height: 22px;
|
||||
padding: 8px;
|
||||
|
@ -128,30 +123,24 @@ img {
|
|||
align-items: center;
|
||||
align-content: center;
|
||||
justify-content: center;
|
||||
background-color: #0000;
|
||||
backdrop-filter: blur(10px);
|
||||
background-image: linear-gradient(45deg, #28467fc0, #1c325fc0);
|
||||
background-image: linear-gradient(45deg, #28467f, #1c325f);
|
||||
}
|
||||
.DIV_OPTIONS {
|
||||
top: 38px;
|
||||
right: 0px;
|
||||
z-index: 20;
|
||||
padding: 6px;
|
||||
width: 288px;
|
||||
width: 268px;
|
||||
display: none;
|
||||
transition: 0.1s;
|
||||
position: absolute;
|
||||
background-color: #0000;
|
||||
height: calc(100% - 150px);
|
||||
backdrop-filter: blur(10px);
|
||||
transition-timing-function: cubic-bezier(0,1,0,1);
|
||||
background-image: linear-gradient(0deg, #162a50b0, #2a4a86b0);
|
||||
background-image: linear-gradient(0deg, #162a50, #2a4a86);
|
||||
}
|
||||
.DIV_GAME_OPTIONS {
|
||||
width: 288px;
|
||||
width: 268px;
|
||||
bottom: 68px;
|
||||
overflow: auto;
|
||||
font-size: 14px;
|
||||
overflow: auto;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
height: calc(100% - 128px);
|
||||
|
@ -216,6 +205,7 @@ img {
|
|||
align-items: center;
|
||||
align-content: center;
|
||||
width: calc(100% - 12px);
|
||||
box-shadow: 0px 0px 4px #000;
|
||||
backdrop-filter: blur(4px) invert(0.1);
|
||||
background-image: linear-gradient(90deg, #3a4b6b82, #0000);
|
||||
}
|
||||
|
@ -227,9 +217,6 @@ img {
|
|||
backdrop-filter: sepia(0.5) blur(6px);
|
||||
background-image: linear-gradient(180deg, #97a7ff85, #6464a578);
|
||||
}
|
||||
.GAME_ENTRY_FIRST_INDEX {
|
||||
margin-top: 44px;
|
||||
}
|
||||
.GAME_ENTRY_COMPACT {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
|
@ -251,9 +238,8 @@ img {
|
|||
height: max-content;
|
||||
max-width: max-content;
|
||||
max-height: max-content;
|
||||
background-color: #0000;
|
||||
text-align: -webkit-right;
|
||||
backdrop-filter: blur(10px);
|
||||
background-color: #192e546e;
|
||||
}
|
||||
.GAME_ENTRY_GRID:hover {
|
||||
animation-duration: 4s;
|
||||
|
@ -420,10 +406,10 @@ img {
|
|||
cursor: help;
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
font-size: small;
|
||||
max-width: 114px;
|
||||
max-height: 42px;
|
||||
margin-left: 4px;
|
||||
font-size: small;
|
||||
flex-wrap: nowrap;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
|
@ -432,9 +418,7 @@ img {
|
|||
background-color: #000;
|
||||
justify-content: center;
|
||||
padding: 4px 0px 4px 0px;
|
||||
transition-duration: 0.4s;
|
||||
text-shadow: 1px 1px 2px #000;
|
||||
box-shadow: 0px 0px 0px #0000 inset;
|
||||
}
|
||||
.DIV_ICON_STATUS_OK {
|
||||
background-image: linear-gradient(180deg, #0f0, #0b0);
|
||||
|
@ -447,36 +431,6 @@ img {
|
|||
border-radius: 3px 8px 3px 8px;
|
||||
background-image: linear-gradient(180deg, #63fdf6, #28b1ab);
|
||||
}
|
||||
|
||||
/*
|
||||
Game compat status
|
||||
*/
|
||||
.DIV_COMPAT_STATUS_UNKNOWN {
|
||||
border-radius: 0px;
|
||||
background-image: linear-gradient(180deg, #aaa, #666);
|
||||
}
|
||||
.DIV_COMPAT_STATUS_BOOTS {
|
||||
border-radius: 10px 4px 10px 4px;
|
||||
background-image: linear-gradient(180deg, #f00, #a00);
|
||||
}
|
||||
.DIV_COMPAT_STATUS_MENUS {
|
||||
border-radius: 4px;
|
||||
background-image: linear-gradient(180deg, #45a6ff, #2157a5);
|
||||
}
|
||||
.DIV_COMPAT_STATUS_INGAME {
|
||||
border-radius: 8px 8px 4px 4px;
|
||||
background-image: linear-gradient(180deg, #fbe800, #9f8d0c);
|
||||
}
|
||||
.DIV_COMPAT_STATUS_NOTHING {
|
||||
border-radius: 4px;
|
||||
box-shadow: 0px 0px 10px #000 inset;
|
||||
background-image: linear-gradient(180deg, #000, #282828);
|
||||
}
|
||||
.DIV_COMPAT_STATUS_PLAYABLE {
|
||||
border-radius: 10px;
|
||||
background-image: linear-gradient(180deg, #0f0, #0b0);
|
||||
}
|
||||
|
||||
.DIV_noGameFound {
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
|
@ -489,7 +443,6 @@ img {
|
|||
font-style: italic;
|
||||
align-items: center;
|
||||
align-content: center;
|
||||
font-family: system-ui;
|
||||
justify-content: center;
|
||||
text-shadow: 0px 0px 10px #f00;
|
||||
background-image: linear-gradient(45deg, #f002, #0000);
|
||||
|
@ -569,10 +522,12 @@ img {
|
|||
cursor: pointer;
|
||||
border-radius: 6px;
|
||||
margin: 6px 10px 6px 6px;
|
||||
box-shadow: 0px 0px 10px #0006;
|
||||
}
|
||||
.IMG_APP_ICON {
|
||||
width: 256px;
|
||||
border-radius: 6px;
|
||||
box-shadow: 0px 0px 10px #000;
|
||||
}
|
||||
.IMG_GRID {
|
||||
width: 116px;
|
||||
|
@ -600,37 +555,28 @@ img {
|
|||
margin-right: 2px;
|
||||
}
|
||||
.BTN_displayMode {
|
||||
box-shadow: 0px 0px 4px #000 inset;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
min-width: 32px;
|
||||
border: initial;
|
||||
background-size: 68%;
|
||||
min-height: 32px;
|
||||
margin-left: 2px;
|
||||
margin-right: 2px;
|
||||
border-radius: 4px;
|
||||
background-size: 65%;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-color: #0000;
|
||||
}
|
||||
.BTN_displayMode:disabled {
|
||||
filter: invert(1);
|
||||
box-shadow: none;
|
||||
background-color: #000;
|
||||
}
|
||||
.BTN_displayMode_normal {
|
||||
background-image: url('../img/svg/list-filled.svg');
|
||||
margin-left: 8px;
|
||||
background-image: url('../img/svg/list-filled-svgrepo-com.svg');
|
||||
}
|
||||
.BTN_displayMode_compact {
|
||||
background-image: url('../img/svg/view-list.svg');
|
||||
background-image: url('../img/svg/view-list-svgrepo-com.svg');
|
||||
}
|
||||
.BTN_displayMode_grid {
|
||||
background-image: url('../img/svg/app-menu.svg');
|
||||
}
|
||||
.BTN_displayMode_holder {
|
||||
width: auto;
|
||||
height: 32px;
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
border-radius: 4px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 8px;
|
||||
background-image: url('../img/svg/app-menu-svgrepo-com.svg');
|
||||
}
|
||||
.INPUT_gameListSearch {
|
||||
width: 195px;
|
||||
|
@ -653,18 +599,16 @@ img {
|
|||
resize: none;
|
||||
border: none;
|
||||
cursor: text;
|
||||
padding: 6px;
|
||||
outline: none;
|
||||
background-color: #0000;
|
||||
padding: 6px;
|
||||
width: calc(100% - 12px);
|
||||
height: calc(100% - 12px);
|
||||
backdrop-filter: blur(10px);
|
||||
backdrop-filter: blur(1.4px);
|
||||
background-repeat: no-repeat;
|
||||
text-shadow: 2px 2px 2px #000;
|
||||
box-shadow: 0px 0px 6px #000 inset;
|
||||
background-image: linear-gradient(180deg, #05050ee8, #010114c7);
|
||||
}
|
||||
.BTN_RUN {
|
||||
color: #000;
|
||||
height: 50px;
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
|
@ -673,12 +617,9 @@ img {
|
|||
background-image: linear-gradient(180deg, #fff, #ccc);
|
||||
}
|
||||
.BTN_RUN:active {
|
||||
color: #888;
|
||||
box-shadow: 0px 0px 6px #000 inset;
|
||||
background-image: linear-gradient(0deg, #fff, #ccc);
|
||||
background-image: linear-gradient(0deg, #fff, #ccc);
|
||||
}
|
||||
.BTN_STOP {
|
||||
max-height: 28px;
|
||||
margin: 0px 4px 0px 4px;
|
||||
padding: 5px 30px 5px 30px;
|
||||
}
|
||||
|
@ -691,9 +632,7 @@ img {
|
|||
background-image: linear-gradient(180deg, #fff, #ccc);
|
||||
}
|
||||
.BTN_SAVE:active {
|
||||
color: #888;
|
||||
box-shadow: 0px 0px 6px #000 inset;
|
||||
background-image: linear-gradient(0deg, #fff, #ccc);
|
||||
background-image: linear-gradient(0deg, #fff, #ccc);
|
||||
}
|
||||
.BTN_selectPath {
|
||||
float: right;
|
||||
|
@ -721,8 +660,8 @@ img {
|
|||
min-width: 160px;
|
||||
margin-left: 4px;
|
||||
border-radius: 4px;
|
||||
font-family: monospace;
|
||||
background-color: #000;
|
||||
font-family: monospace;
|
||||
padding: 6px 0px 6px 6px;
|
||||
}
|
||||
|
||||
|
|
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 355 KiB After Width: | Height: | Size: 221 KiB |
BIN
App/img/banner.png
Normal file
After Width: | Height: | Size: 718 KiB |
13
App/img/svg/app-menu-svgrepo-com.svg
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
|
||||
<title>app-menu</title>
|
||||
<desc>Created with sketchtool.</desc>
|
||||
<g id="web-app" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="app-menu" fill="#000000">
|
||||
<path d="M16,16 L20,16 L20,20 L16,20 L16,16 Z M10,16 L14,16 L14,20 L10,20 L10,16 Z M4,16 L8,16 L8,20 L4,20 L4,16 Z M16,10 L20,10 L20,14 L16,14 L16,10 Z M10,10 L14,10 L14,14 L10,14 L10,10 Z M4,10 L8,10 L8,14 L4,14 L4,10 Z M16,4 L20,4 L20,8 L16,8 L16,4 Z M10,4 L14,4 L14,8 L10,8 L10,4 Z M4,4 L8,4 L8,8 L4,8 L4,4 Z" id="Shape">
|
||||
</path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 841 B |
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --><svg width="800px" height="800px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>app-menu</title><desc>Created with sketchtool.</desc><g id="web-app" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="app-menu" fill="#fff"><path d="M16,16 L20,16 L20,20 L16,20 L16,16 Z M10,16 L14,16 L14,20 L10,20 L10,16 Z M4,16 L8,16 L8,20 L4,20 L4,16 Z M16,10 L20,10 L20,14 L16,14 L16,10 Z M10,10 L14,10 L14,14 L10,14 L10,10 Z M4,10 L8,10 L8,14 L4,14 L4,10 Z M16,4 L20,4 L20,8 L16,8 L16,4 Z M10,4 L14,4 L14,8 L10,8 L10,4 Z M4,4 L8,4 L8,8 L4,8 L4,4 Z" id="Shape"></path></g></g></svg>
|
Before Width: | Height: | Size: 777 B |
6
App/img/svg/list-filled-svgrepo-com.svg
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>list-filled</title>
|
||||
<path d="M30 15.25h-17c-0.414 0-0.75 0.336-0.75 0.75s0.336 0.75 0.75 0.75v0h17c0.414 0 0.75-0.336 0.75-0.75s-0.336-0.75-0.75-0.75v0zM13 5.75h17c0.414 0 0.75-0.336 0.75-0.75s-0.336-0.75-0.75-0.75v0h-17c-0.414 0-0.75 0.336-0.75 0.75s0.336 0.75 0.75 0.75v0zM30 26.25h-17c-0.414 0-0.75 0.336-0.75 0.75s0.336 0.75 0.75 0.75v0h17c0.414 0 0.75-0.336 0.75-0.75s-0.336-0.75-0.75-0.75v0zM4 1.25h2c1.519 0 2.75 1.231 2.75 2.75v2c0 1.519-1.231 2.75-2.75 2.75h-2c-1.519 0-2.75-1.231-2.75-2.75v-2c0-1.519 1.231-2.75 2.75-2.75zM3.997 12.25h2c1.519 0 2.75 1.231 2.75 2.75v2c0 1.519-1.231 2.75-2.75 2.75h-2c-1.519 0-2.75-1.231-2.75-2.75v-2c0-1.519 1.231-2.75 2.75-2.75zM3.997 23.25h2c1.519 0 2.75 1.231 2.75 2.75v2c0 1.519-1.231 2.75-2.75 2.75h-2c-1.519 0-2.75-1.231-2.75-2.75v-2c0-1.519 1.231-2.75 2.75-2.75z"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 1 KiB |
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --><svg fill="#fff" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg"><title>list-filled</title><path d="M30 15.25h-17c-0.414 0-0.75 0.336-0.75 0.75s0.336 0.75 0.75 0.75v0h17c0.414 0 0.75-0.336 0.75-0.75s-0.336-0.75-0.75-0.75v0zM13 5.75h17c0.414 0 0.75-0.336 0.75-0.75s-0.336-0.75-0.75-0.75v0h-17c-0.414 0-0.75 0.336-0.75 0.75s0.336 0.75 0.75 0.75v0zM30 26.25h-17c-0.414 0-0.75 0.336-0.75 0.75s0.336 0.75 0.75 0.75v0h17c0.414 0 0.75-0.336 0.75-0.75s-0.336-0.75-0.75-0.75v0zM4 1.25h2c1.519 0 2.75 1.231 2.75 2.75v2c0 1.519-1.231 2.75-2.75 2.75h-2c-1.519 0-2.75-1.231-2.75-2.75v-2c0-1.519 1.231-2.75 2.75-2.75zM3.997 12.25h2c1.519 0 2.75 1.231 2.75 2.75v2c0 1.519-1.231 2.75-2.75 2.75h-2c-1.519 0-2.75-1.231-2.75-2.75v-2c0-1.519 1.231-2.75 2.75-2.75zM3.997 23.25h2c1.519 0 2.75 1.231 2.75 2.75v2c0 1.519-1.231 2.75-2.75 2.75h-2c-1.519 0-2.75-1.231-2.75-2.75v-2c0-1.519 1.231-2.75 2.75-2.75z"></path></svg>
|
Before Width: | Height: | Size: 1 KiB |
4
App/img/svg/view-list-svgrepo-com.svg
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none">
|
||||
<path stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16"/>
|
||||
</svg>
|
After Width: | Height: | Size: 354 B |
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --><svg width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none"><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16"/></svg>
|
Before Width: | Height: | Size: 346 B |
|
@ -29,7 +29,7 @@
|
|||
<div class="DIV_PROGRESSBAR_INTERNAL" id="DIV_PROGRESSBAR_UPDATE_FPPS4"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Launcher Settings -->
|
||||
<div class="DIV_SETTINGS_HOLDER" id="DIV_SETTINGS">
|
||||
|
@ -148,6 +148,7 @@
|
|||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
|
||||
<input type="checkbox" id="CHECKBOX_settingsGameSearchCaseSensitive">
|
||||
<label class="LABEL_checkbox" id="LABEL_SETTINGS_GAME_LIST_SEARCH_CASE_SENSITIVE" onclick="APP.tools.processCheckbox('CHECKBOX_settingsGameSearchCaseSensitive');">
|
||||
|
@ -168,17 +169,10 @@
|
|||
Show app / game metadata (or executable path) for every title in game list
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
|
||||
<input type="checkbox" id="CHECKBOX_enableCompatStatusCheck">
|
||||
<label class="LABEL_checkbox" id="LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK" onclick="APP.tools.processCheckbox('CHECKBOX_enableCompatStatusCheck');">
|
||||
Enable game compatibility check
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- fpPS4 running -->
|
||||
<!-- Emu running -->
|
||||
<div class="SEPARATOR_00"></div>
|
||||
<div class="DIV_settingsH2" id="DIV_SETTINGS_EMU_RUNNING">fpPS4 Running</div>
|
||||
<div class="DIV_settingsH2" id="DIV_SETTINGS_EMU_RUNNING">Emu Running</div>
|
||||
|
||||
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
|
||||
<label id="LABEL_SETTINGS_EMU_RUNNING_BACKGROUND_BLUR">Background Blur</label>:
|
||||
|
@ -248,7 +242,7 @@
|
|||
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
|
||||
<label id="LABEL_SETTINGS_UPDATER_SELECTED_CI">Current workflow</label>:
|
||||
<select id="SELECT_settingsUpdaterCurrentCI" class="SELECT_settings">
|
||||
<!-- Workflow list goes here -->
|
||||
<!-- workflow list goes here -->
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
@ -266,7 +260,7 @@
|
|||
<!-- Misc. -->
|
||||
<div class="SEPARATOR_00"></div>
|
||||
<div class="DIV_settingsH2" id="DIV_SETTINGS_MISC">Misc.</div>
|
||||
|
||||
|
||||
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
|
||||
<input type="checkbox" id="CHECKBOX_settingsEnableParamSfo">
|
||||
<label class="LABEL_checkbox" id="LABEL_SETTINGS_ENABLE_PARAMSFO_SUPPORT" onclick="APP.tools.processCheckbox('CHECKBOX_settingsEnableParamSfo');">
|
||||
|
@ -274,13 +268,6 @@
|
|||
</label>
|
||||
</div>
|
||||
|
||||
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
|
||||
<input type="checkbox" id="CHECKBOX_settingsEnableChangeGamepadLedColor">
|
||||
<label class="LABEL_checkbox" id="LABEL_SETTINGS_GAMEPAD_LED_COLOR" onclick="APP.tools.processCheckbox('CHECKBOX_settingsEnableChangeGamepadLedColor');">
|
||||
Enable change gamepad led color (requires <code>SDL2.dll</code>)
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="DIV_settingsEntry DIV_settingsEntryFlex">
|
||||
<input type="button" class="SELECT_settings" id="BTN_SETTINGS_DELETE_ALL_GAME_SETTINGS" value="Delete all game settings" onclick="APP.settings.resetAllGameSettings();">
|
||||
<input type="button" class="SELECT_settings" id="BTN_SETTINGS_RESTART_LAUNCHER" value="Restart launcher" onclick="chrome.runtime.reload();">
|
||||
|
@ -305,11 +292,9 @@
|
|||
<input type="text" class="INPUT_gameListSearch" id="INPUT_gameListSearch" placeholder="Search: Insert game name..." oninput="APP.gameList.search();">
|
||||
|
||||
<!-- Display modes -->
|
||||
<div class="BTN_displayMode_holder" id="BTN_displayMode_holder">
|
||||
<input type="button" onclick="APP.settings.setDisplayMode('normal');" class="BTN_displayMode BTN_displayMode_normal" id="BTN_displayMode_normal">
|
||||
<input type="button" onclick="APP.settings.setDisplayMode('compact');" class="BTN_displayMode BTN_displayMode_compact" id="BTN_displayMode_compact">
|
||||
<input type="button" onclick="APP.settings.setDisplayMode('grid');" class="BTN_displayMode BTN_displayMode_grid" id="BTN_displayMode_grid">
|
||||
</div>
|
||||
<input type="button" onclick="APP.settings.setDisplayMode('normal');" class="BTN_displayMode BTN_displayMode_normal" id="BTN_displayMode_normal">
|
||||
<input type="button" onclick="APP.settings.setDisplayMode('compact');" class="BTN_displayMode BTN_displayMode_compact" id="BTN_displayMode_compact">
|
||||
<input type="button" onclick="APP.settings.setDisplayMode('grid');" class="BTN_displayMode BTN_displayMode_grid" id="BTN_displayMode_grid">
|
||||
|
||||
<!-- Grid icon size -->
|
||||
<input type="range" min="92.93" max="512" step="0.01" value="116" id="RANGE_settingsGridIconSize" oninput="APP.design.renderSettings(!0);APP.design.renderGameList({displayLog: !1});">
|
||||
|
@ -324,9 +309,6 @@
|
|||
|
||||
</div>
|
||||
|
||||
<!-- Game list background image -->
|
||||
<div id="DIV_GAMELIST_BG" class="DIV_GAMELIST_BG"></div>
|
||||
|
||||
<!-- fpPS4 Options -->
|
||||
<div class="DIV_OPTIONS" id="DIV_OPTIONS">
|
||||
|
||||
|
@ -351,12 +333,7 @@
|
|||
|
||||
<!-- Dump Status -->
|
||||
<div class="DIV_labelSelectedGame">
|
||||
<label id="LABEL_FPPS4_OPTIONS_DUMP_STATUS">Dump status</label>: <div class="DIV_selectedGameStatus" id="DIV_selectedGameStatus_dump"></div>
|
||||
</div>
|
||||
|
||||
<!-- fpPS4 Compat Status -->
|
||||
<div class="DIV_labelSelectedGame" id="DIV_FPPS4_GAME_STATUS">
|
||||
<label id="LABEL_FPPS4_OPTIONS_GAME_STATUS">Compat status</label>: <div class="DIV_selectedGameStatus" id="DIV_selectedGameStatus_compat"></div>
|
||||
<label id="LABEL_FPPS4_OPTIONS_DUMP_STATUS">Dump status</label>: <div class="DIV_selectedGameStatus" id="DIV_selectedGameStatus"></div>
|
||||
</div>
|
||||
|
||||
<!-- Hack List -->
|
||||
|
@ -384,34 +361,11 @@
|
|||
|
||||
</div>
|
||||
|
||||
<!-- Misc. Options -->
|
||||
<div class="DIV_launcherOptions">
|
||||
<div class="DIV_launcherOptionsTitle" id="LABEL_FPPS4_OPTIONS_MISC">
|
||||
Misc. Options
|
||||
</div>
|
||||
|
||||
<!-- Select gamepad mode -->
|
||||
<label class="LABEL_checkbox" id="LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE">Select gamepad mode:</label>
|
||||
<select class="SELECT_settings" id="FPPS4_OPTIONS_SELECT_GAMEPAD_MODE" onchange="APP.gameList.saveGameSettings(!0);APP.gameList.checkSdl2();APP.design.update();">
|
||||
<option value="xinput">xinput</option>
|
||||
<option value="sdl2">sdl2</option>
|
||||
<option value="keyboard">Keyboard</option>
|
||||
</select>
|
||||
|
||||
<!-- (SDL2) Select gamepad led color -->
|
||||
<div id="DIV_sdlSelectGamepadColor" style="display: none;">
|
||||
<label id="LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR">Gamepad led color:</label>
|
||||
<input type="color" id="INPUT_cGameLedColor" onchange="APP.gameList.saveGameSettings(!0);APP.gameList.checkSdl2();APP.design.update();console.table(APP.gameList.cGameSettings);">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Launcher Options -->
|
||||
<div class="DIV_launcherOptions">
|
||||
<div class="DIV_launcherOptionsTitle" id="LABEL_FPPS4_OPTIONS_LAUNCHER_OPTIONS">
|
||||
Launcher Options
|
||||
</div>
|
||||
|
||||
<input type="button" class="BTN_launcherOptions" id="BTN_FPPS4_OPTIONS_OPEN_APP_LOCATION" value="Open App / Game location" onclick="APP.gameList.openGameLocation();">
|
||||
<input type="button" class="BTN_launcherOptions" id="BTN_FPPS4_OPTIONS_RESET_SETTINGS" value="Reset settings file" onclick="APP.gameList.resetGameSettings();">
|
||||
<input type="button" class="BTN_launcherOptions" id="BTN_launcherOptionsExportMetadata" value="Export metadata" onclick="APP.gameList.exportGameMetadata();" disabled="disabled">
|
||||
|
@ -428,6 +382,9 @@
|
|||
|
||||
<!-- Game List -->
|
||||
<div class="DIV_LIST" id="DIV_LIST">
|
||||
|
||||
<!-- Background Image -->
|
||||
<div id="DIV_GAMELIST_BG" class="DIV_GAMELIST_BG"></div>
|
||||
|
||||
<!-- List -->
|
||||
<div class="DIV_LIST_INTERNAL" id="DIV_LIST_INTERNAL">
|
||||
|
@ -458,11 +415,6 @@
|
|||
<!-- Hidden Stuff -->
|
||||
<div class="none" id="SCRIPT_LOADER">
|
||||
|
||||
<!-- Extra CSS -->
|
||||
<div class="none" id="DIV_EXTRA_CSS">
|
||||
<!-- Extra CSS will be placed here -->
|
||||
</div>
|
||||
|
||||
<!-- Folder loader -->
|
||||
<input type="file" id="APP_FILE_LOADER"/>
|
||||
<input type="file" id="APP_FILE_SAVE" nwsaveas/>
|
||||
|
|
|
@ -21,7 +21,7 @@ const TMS = Object.freeze(Object.seal({
|
|||
// Warn if something go wrong
|
||||
warn: function(warnText){
|
||||
if (this.logWarnings === !0){
|
||||
console.warn(`[TMS] ${warnText}`);
|
||||
console.warn('[TMS] ' + warnText);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
289
App/js/design.js
|
@ -32,17 +32,20 @@ temp_DESIGN = {
|
|||
|
||||
// Game list display modes
|
||||
gameListDisplayModes: ['normal', 'compact', 'grid'],
|
||||
|
||||
|
||||
// Render hack list
|
||||
renderHacklist: function(){
|
||||
|
||||
var htmlTemp = '';
|
||||
this.hackList.forEach(function(hackName){
|
||||
htmlTemp = `${htmlTemp}<input type="checkbox" id="CHECK_${hackName}"><label class="LABEL_checkbox" onclick="APP.tools.processCheckbox(\'CHECK_${hackName}\');">${APP.lang.getVariable('labelEnableHack')} ${hackName}</label><br>`;
|
||||
htmlTemp = htmlTemp + '<input type="checkbox" id="CHECK_' + hackName + '"><label class="LABEL_checkbox" onclick="APP.tools.processCheckbox(\'CHECK_' + hackName +
|
||||
'\');">' + APP.lang.getVariable('labelEnableHack') + ' ' + hackName + '</label><br>';
|
||||
});
|
||||
|
||||
// Append html and render gui
|
||||
// Append html
|
||||
document.getElementById('DIV_HACK_LIST').innerHTML = htmlTemp;
|
||||
|
||||
// Render GUI
|
||||
this.update();
|
||||
|
||||
},
|
||||
|
@ -74,12 +77,12 @@ temp_DESIGN = {
|
|||
|
||||
var optionsHtml = '';
|
||||
Object.keys(APP.lang.selected.select[domId]).forEach(function(option){
|
||||
optionsHtml = `${optionsHtml}<option value="${option}">${APP.lang.selected.select[domId][option]}</option>`;
|
||||
optionsHtml = optionsHtml + '<option value="' + option + '">' + APP.lang.selected.select[domId][option] + '</option>';
|
||||
});
|
||||
|
||||
// Append HTML
|
||||
document.getElementById(domId).innerHTML = optionsHtml;
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -104,22 +107,20 @@ temp_DESIGN = {
|
|||
// Render game list
|
||||
renderGameList: function(data){
|
||||
|
||||
// Create main vars
|
||||
var tempHtml = '',
|
||||
gList = APP.gameList.list;
|
||||
|
||||
// Check data var
|
||||
if (data === void 0 || typeof data !== 'object'){
|
||||
gList = APP.gameList.list,
|
||||
sQuery = document.getElementById('INPUT_gameListSearch').value;
|
||||
|
||||
if (data === void 0){
|
||||
data = {};
|
||||
}
|
||||
|
||||
// Check custom list
|
||||
if (data.customList !== void 0){
|
||||
gList = data.customList;
|
||||
}
|
||||
|
||||
// Process game list
|
||||
Object.keys(gList).forEach(function(cGame, cIndex){
|
||||
Object.keys(gList).forEach(function(cGame){
|
||||
|
||||
// Settings for display mode: Normal
|
||||
var appTitle = '',
|
||||
|
@ -133,41 +134,40 @@ temp_DESIGN = {
|
|||
classGameDetailsMode = 'GAME_DETAILS',
|
||||
settingsFile = gList[cGame].settingsFile,
|
||||
gridIconSize = APP.settings.data.gridIconSize,
|
||||
gameMetadata = `<br>${APP.lang.getVariable('path')}: ${gList[cGame].exe}`,
|
||||
bgPath = `url(\'file://${gList[cGame].bg.replace(RegExp('\'', 'gi'), '\\\'')}\')`;
|
||||
gameMetadata = '<br>' + APP.lang.getVariable('path') + ': ' + gList[cGame].exe,
|
||||
bgPath = 'url(\'' + gList[cGame].bg.replace(RegExp('\'', 'gi'), '\\\'') + '\')';
|
||||
|
||||
// Disable background image
|
||||
if (APP.settings.data.showBgOnEntry !== !0){
|
||||
bgPath = 'none';
|
||||
}
|
||||
|
||||
// Check if current entry is the first one
|
||||
if (cIndex === 0){
|
||||
classDisplayEntryMode = ' GAME_ENTRY_FIRST_INDEX';
|
||||
}
|
||||
// Background and Icon
|
||||
gameBgAndIcon = '<div class="GAME_ENTRY_BG" style="background-image: ' + bgPath + ';"></div><img class="IMG_GAME_ICON" src="' + gList[cGame].icon + '">';
|
||||
|
||||
// Set background, icon and check if path is available / active
|
||||
gameBgAndIcon = `<div class="GAME_ENTRY_BG" style="background-image: ${bgPath};"></div><img class="IMG_GAME_ICON" src="file://${gList[cGame].icon}">`;
|
||||
if (Object.keys(settingsFile).length !== 0 && settingsFile.usePatch === !0 && APP.fs.existsSync(`${settingsFile.patchLocation}/sce_sys/param.sfo`) === !0){
|
||||
// Check if patch is available and active
|
||||
if (Object.keys(settingsFile).length !== 0 && settingsFile.usePatch === !0 && APP.fs.existsSync(settingsFile.patchLocation + '/sce_sys/param.sfo') === !0){
|
||||
|
||||
// Get PARAM.SFO patch data
|
||||
patchParamSfo = APP.paramSfo.parse(settingsFile.patchLocation + '/sce_sys/param.sfo');
|
||||
|
||||
// Get PARAM.SFO patch data and check if PARAM.SFO from patch is loaded and isn't an DLC
|
||||
patchParamSfo = APP.paramSfo.parse(`${settingsFile.patchLocation}/sce_sys/param.sfo`);
|
||||
// Check if PARAM.SFO from patch is loaded and isn't an DLC
|
||||
if (Object.keys(patchParamSfo).keys !== 0 && patchParamSfo.CATEGORY !== 'ac'){
|
||||
appVersion = `<label class="LABEL_emuColor">${patchParamSfo.APP_VER}</label>`;
|
||||
appVersion = '<label class="LABEL_emuColor">' + patchParamSfo.APP_VER + '</label>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// If PARAM.SFO metadata exists, show serial and game version instead
|
||||
if (Object.keys(gList[cGame].paramSfo).length !== 0){
|
||||
|
||||
|
||||
// If patch isn't enabled or patch location does not exists but is enabled
|
||||
if (settingsFile.usePatch !== !0 || settingsFile.usePatch === !0 && APP.fs.existsSync(`${settingsFile.patchLocation}/sce_sys/param.sfo`) !== !0){
|
||||
if (settingsFile.usePatch !== !0 || settingsFile.usePatch === !0 && APP.fs.existsSync(settingsFile.patchLocation + '/sce_sys/param.sfo') !== !0){
|
||||
appVersion = gList[cGame].paramSfo.APP_VER;
|
||||
}
|
||||
|
||||
// Set game data
|
||||
gameMetadata = `<br>${gList[cGame].paramSfo.TITLE_ID} - ${APP.lang.getVariable('gameListVersion')} ${appVersion}`;
|
||||
gameMetadata = '<br>' + gList[cGame].paramSfo.TITLE_ID + ' - ' + APP.lang.getVariable('gameListVersion') + ' ' + appVersion;
|
||||
|
||||
}
|
||||
|
||||
|
@ -184,12 +184,12 @@ temp_DESIGN = {
|
|||
gameMetadata = '';
|
||||
gameBgAndIcon = '';
|
||||
appNameClass = 'LABEL_gameTitleCompact';
|
||||
classDisplayEntryMode = `${classDisplayEntryMode} GAME_ENTRY_COMPACT`;
|
||||
classDisplayEntryMode = ' GAME_ENTRY_COMPACT';
|
||||
classGameDetailsMode = 'GAME_DETAILS GAME_DETAILS_COMPACT';
|
||||
|
||||
// Check if PARAM.SFO is available
|
||||
if (Object.keys(gList[cGame].paramSfo).length !== 0){
|
||||
gameMetadata = `<div class="float-right">${gList[cGame].paramSfo.TITLE_ID} - ${APP.lang.getVariable('gameListVersion')} ${appVersion}</div>`;
|
||||
gameMetadata = '<div class="float-right">' + gList[cGame].paramSfo.TITLE_ID + ' - ' + APP.lang.getVariable('gameListVersion') + ' ' + appVersion + '</div>';
|
||||
}
|
||||
|
||||
// Check if is Homebrew
|
||||
|
@ -209,33 +209,42 @@ temp_DESIGN = {
|
|||
classGameDetailsMode = '';
|
||||
appTitle = gList[cGame].name;
|
||||
classDisplayEntryMode = ' GAME_ENTRY_GRID';
|
||||
gameMetadata = `<div class="GAME_DETAILS_GRID">${appVersion}</div>`;
|
||||
gameEntryStyle = `border-radius: ${APP.settings.data.gridBorderRadius}px;`;
|
||||
gameBgAndIcon = `<div class="none" style="background-image: ${bgPath};"></div><img class="IMG_GAME_ICON IMG_GRID" style="width: ${gridIconSize}px;" src="file://${gList[cGame].icon}">`;
|
||||
gameMetadata = '<div class="GAME_DETAILS_GRID">' + appVersion + '</div>';
|
||||
gameEntryStyle = 'border-radius: ' + APP.settings.data.gridBorderRadius + 'px;';
|
||||
gameBgAndIcon = '<div class="none" style="background-image: ' + bgPath + '";></div><img class="IMG_GAME_ICON IMG_GRID" style="width: ' + gridIconSize + 'px;" src="' + gList[cGame].icon + '">';
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Fix for non-grid mode and add entry
|
||||
// Fix for non-grid mode
|
||||
if (APP.settings.data.gameListMode !== 'grid'){
|
||||
gameName = `<label class="${appNameClass}">${gList[cGame].name}</label>`;
|
||||
gameName = '<label class="' + appNameClass + '">' + gList[cGame].name + '</label>';
|
||||
}
|
||||
tempHtml = `${tempHtml}<div class="GAME_ENTRY${classDisplayEntryMode}" title="${appTitle}" style="${gameEntryStyle}" onclick="APP.design.selectGame(\'${cGame}\');" id="GAME_ENTRY_${cGame}">${gameBgAndIcon}<div class="${classGameDetailsMode}">${gameName + gameMetadata}</div></div>`;
|
||||
|
||||
/*
|
||||
Add entry
|
||||
*/
|
||||
tempHtml = tempHtml + '<div class="GAME_ENTRY' + classDisplayEntryMode + '" title="' + appTitle + '" style="' + gameEntryStyle + '" onclick="APP.design.selectGame(\'' + cGame + '\');" id="GAME_ENTRY_' + cGame + '">' +
|
||||
gameBgAndIcon + '<div class="' + classGameDetailsMode + '">' + gameName + gameMetadata + '</div></div>';
|
||||
});
|
||||
|
||||
// Insert HTML and log status
|
||||
// Insert HTML
|
||||
document.getElementById('DIV_LIST_INTERNAL').innerHTML = tempHtml;
|
||||
|
||||
// Log status
|
||||
if (data.displayLog !== !1){
|
||||
APP.log(APP.lang.getVariable('gameListLoadSuccessful', [Object.keys(gList).length]));
|
||||
}
|
||||
|
||||
// Clear BG image
|
||||
TMS.css('DIV_GAMELIST_BG', { 'background-image': 'none' });
|
||||
TMS.css('DIV_GAME_DETAILS', { 'display': 'none' });
|
||||
TMS.css('DIV_GAMELIST_BG', {'background-image': 'none'});
|
||||
|
||||
// Focus search field and update GUI
|
||||
TMS.css('DIV_GAME_DETAILS', {'display': 'none'});
|
||||
|
||||
// Focus search field
|
||||
TMS.focus('INPUT_gameListSearch');
|
||||
|
||||
// Update GUI
|
||||
this.update();
|
||||
|
||||
},
|
||||
|
@ -250,13 +259,14 @@ temp_DESIGN = {
|
|||
updatesettingsFile = !1,
|
||||
gData = APP.gameList.list[gameName],
|
||||
folderName = gData.folderName,
|
||||
settingsFile = `${APP.settings.data.gamePath}/${folderName}/launcherSettings.json`;
|
||||
exportButtonStatus = 'disabled',
|
||||
settingsFile = APP.settings.data.gamePath + '/' + folderName + '/launcherSettings.json';
|
||||
|
||||
if (gData !== void 0){
|
||||
|
||||
// Select game and update GUI
|
||||
APP.gameList.selectedGame = gameName;
|
||||
APP.gameList.checkGameStatus();
|
||||
APP.gameList.checkDumpStatus();
|
||||
|
||||
// Check if game config exists
|
||||
if (APP.fs.existsSync(settingsFile) === !1){
|
||||
|
@ -275,22 +285,20 @@ temp_DESIGN = {
|
|||
patchLocation: '',
|
||||
path: settingsFile,
|
||||
importedModules: [],
|
||||
gamepadMode: 'xinput',
|
||||
gPadLedColor: '5232E6',
|
||||
isHomebrew: gData.isHomebrew
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// Load settings file
|
||||
const gSettings = JSON.parse(APP.fs.readFileSync(settingsFile, 'utf-8'));
|
||||
const gSettings = JSON.parse(APP.fs.readFileSync(settingsFile, 'utf8'));
|
||||
APP.gameList.cGameSettings = gSettings;
|
||||
|
||||
// Check if settings file has all available hacks - if so, set flag to update settings file
|
||||
this.hackList.forEach(function(cHack){
|
||||
if (gSettings.hacks[cHack] === void 0){
|
||||
updatesettingsFile = !0;
|
||||
document.getElementById(`CHECK_${cHack}`).checked = !1;
|
||||
document.getElementById('CHECK_' + cHack).checked = !1;
|
||||
}
|
||||
});
|
||||
if (updatesettingsFile === !0){
|
||||
|
@ -299,7 +307,7 @@ temp_DESIGN = {
|
|||
|
||||
// Enable / disable selected hacks on settings file
|
||||
Object.keys(gSettings.hacks).forEach(function(hackName){
|
||||
document.getElementById(`CHECK_${hackName}`).checked = JSON.parse(gSettings.hacks[hackName]);
|
||||
document.getElementById('CHECK_' + hackName).checked = JSON.parse(gSettings.hacks[hackName]);
|
||||
});
|
||||
|
||||
// Load patch data
|
||||
|
@ -310,7 +318,7 @@ temp_DESIGN = {
|
|||
try {
|
||||
|
||||
// Get PARAM.SFO data
|
||||
var paramSfoMetadata = APP.paramSfo.parse(`${gSettings.patchLocation}/sce_sys/param.sfo`),
|
||||
var paramSfoMetadata = APP.paramSfo.parse(gSettings.patchLocation + '/sce_sys/param.sfo'),
|
||||
patchVersion = paramSfoMetadata.VERSION;
|
||||
|
||||
// If App version is available, show it instead
|
||||
|
@ -318,9 +326,11 @@ temp_DESIGN = {
|
|||
patchVersion = paramSfoMetadata.APP_VER;
|
||||
}
|
||||
|
||||
// Update GUI and set patch loaded flag
|
||||
// Update GUI
|
||||
document.getElementById('LABEL_launcherOptionsPatchVersion').innerHTML = patchVersion;
|
||||
document.getElementById('LABEL_launcherOptionsPatchType').innerHTML = APP.paramSfo.database.DB_CATEGORY[paramSfoMetadata.CATEGORY];
|
||||
|
||||
// Set patch loaded flag
|
||||
APP.design.gamePatchLoaded = !0;
|
||||
|
||||
} catch (err) {
|
||||
|
@ -332,15 +342,9 @@ temp_DESIGN = {
|
|||
|
||||
}
|
||||
|
||||
// Load gamepad mode and led color
|
||||
if (gSettings.gamepadMode === void 0){
|
||||
gSettings.gamepadMode = 'xinput';
|
||||
}
|
||||
document.getElementById('INPUT_cGameLedColor').value = `#${gSettings.gPadLedColor}`;
|
||||
document.getElementById('FPPS4_OPTIONS_SELECT_GAMEPAD_MODE').value = gSettings.gamepadMode;
|
||||
|
||||
// Update GUI
|
||||
APP.design.update();
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
@ -351,26 +355,25 @@ temp_DESIGN = {
|
|||
// Update background image
|
||||
const sGame = APP.gameList.list[APP.gameList.selectedGame];
|
||||
if (sGame !== '' && sGame !== void 0){
|
||||
TMS.css('DIV_GAMELIST_BG', { 'background-image': `url(\"file://${sGame.bg}\")` });
|
||||
TMS.css('DIV_GAMELIST_BG', {'background-image': 'url("' + sGame.bg + '")'});
|
||||
}
|
||||
|
||||
// Check if emu is present before allowing to run
|
||||
if (APP.fs.existsSync(APP.settings.data.emuPath) === !0 && APP.gameList.selectedGame !== ''){
|
||||
|
||||
// Create main vars
|
||||
var btnDisabled = '',
|
||||
btnKill = 'disabled',
|
||||
emuRunPath = 'block',
|
||||
bgBlur = APP.settings.data.bgListBlur,
|
||||
showGuiMetadata = {'display': 'none'},
|
||||
bgOpacity = APP.settings.data.bgListOpacity,
|
||||
logCss = {'display' :'block', 'width': 'calc(100% - 300px)'},
|
||||
logCss = {'display' :'block', 'width': 'calc(100% - 280px)'},
|
||||
optionsCss = {'height': 'calc(100% - 50px)', 'display': 'block'},
|
||||
listCss = {'width': 'calc(100% - 300px)', 'height': 'calc(100% - 164px)'};
|
||||
listCss = {'width': 'calc(100% - 280px)', 'height': 'calc(100% - 202px)'};
|
||||
|
||||
// If emu is running
|
||||
if (APP.emuManager.emuRunning === !0){
|
||||
|
||||
|
||||
btnKill = '';
|
||||
btnDisabled = 'disabled';
|
||||
bgBlur = APP.settings.data.bgEmuBlur;
|
||||
|
@ -392,13 +395,11 @@ temp_DESIGN = {
|
|||
TMS.css('DIV_LIST', listCss);
|
||||
TMS.css('DIV_OPTIONS', optionsCss);
|
||||
TMS.css('DIV_GAME_DETAILS', showGuiMetadata);
|
||||
TMS.css('DIV_GAME_DETAILS_currentExec', { 'display': emuRunPath });
|
||||
TMS.css('DIV_GAMELIST_BG', {'filter': `blur(${bgBlur}px) opacity(${bgOpacity})`});
|
||||
|
||||
TMS.css('DIV_GAME_DETAILS_currentExec', {'display': emuRunPath});
|
||||
TMS.css('DIV_GAMELIST_BG', {'filter': 'blur(' + bgBlur + 'px) opacity(' + bgOpacity + ')'});
|
||||
|
||||
// Update Buttons
|
||||
if (APP.os.platform() === 'win32'){
|
||||
document.getElementById('BTN_KILL').disabled = btnKill;
|
||||
}
|
||||
document.getElementById('BTN_KILL').disabled = btnKill;
|
||||
document.getElementById('BTN_RUN').disabled = btnDisabled;
|
||||
document.getElementById('BTN_REFRESH').disabled = btnDisabled;
|
||||
document.getElementById('BTN_SETTINGS').disabled = btnDisabled;
|
||||
|
@ -438,36 +439,33 @@ temp_DESIGN = {
|
|||
// If selected game exists
|
||||
if (cGame !== void 0){
|
||||
|
||||
// Set game name and check if param.sfo exists for current title
|
||||
gName = `<div class="LABEL_gameTitleOptions">${cGame.name}</div>`;
|
||||
if (Object.keys(cGame.paramSfo).length !== 0){
|
||||
// Set game name
|
||||
gName = '<div class="LABEL_gameTitleOptions">' + cGame.name + '</div>';
|
||||
|
||||
// If PARAM.SFO exists for selected game
|
||||
if (Object.keys(cGame.paramSfo).length !== 0){
|
||||
|
||||
// Enable GUI
|
||||
exportButtonStatus = '';
|
||||
displayGameVersion = 'block';
|
||||
|
||||
// Set data
|
||||
cGameVersion = cGame.paramSfo.APP_VER;
|
||||
gName = `<div class="LABEL_gameTitleOptions">${cGame.name}</div><br><label class="user-can-select">${cGame.paramSfo.TITLE_ID}</label>`;
|
||||
|
||||
gName = '<div class="LABEL_gameTitleOptions">' + cGame.name + '</div><br><label class="user-can-select">' + cGame.paramSfo.TITLE_ID + '</label>';
|
||||
|
||||
}
|
||||
|
||||
// (SDL2) Display led color
|
||||
var displayLedColorGui = { 'display': 'none' };
|
||||
if (APP.gameList.cGameSettings.gamepadMode === 'sdl2' && APP.settings.data.sdlEnableGamepadLed === !0){
|
||||
displayLedColorGui.display = 'block';
|
||||
}
|
||||
TMS.css('DIV_sdlSelectGamepadColor', displayLedColorGui);
|
||||
|
||||
// If app / game patch is enabled, show metadata
|
||||
if (APP.gameList.cGameSettings.usePatch === !0){
|
||||
displayPatchContainer = 'block';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Enable / disable export metadata and show / hide patch
|
||||
|
||||
// Enable / disable export metadata
|
||||
document.getElementById('BTN_launcherOptionsExportMetadata').disabled = exportButtonStatus;
|
||||
|
||||
// Show / hide patch
|
||||
TMS.css('DIV_launcherOptionsPatchVersion', {'display': displayPatchContainer});
|
||||
|
||||
// Show / hide patch details
|
||||
|
@ -476,10 +474,14 @@ temp_DESIGN = {
|
|||
}
|
||||
TMS.css('DIV_launcherOptionsPatchVersionMetadata', {'display': displayPatchData});
|
||||
|
||||
// Render current game name, version and settings
|
||||
// Render current game name
|
||||
document.getElementById('DIV_labelSelectedGame').innerHTML = gName;
|
||||
|
||||
// Render current game version
|
||||
document.getElementById('LABEL_FPPS4_OPTIONS_APP_VER').innerHTML = cGameVersion;
|
||||
TMS.css('DIV_FPPS4_OPTIONS_APP_VERSION', {'display': displayGameVersion});
|
||||
|
||||
// Render Settings
|
||||
this.renderSettings();
|
||||
|
||||
},
|
||||
|
@ -487,61 +489,56 @@ temp_DESIGN = {
|
|||
// Change game list to display mode
|
||||
toggleDisplayMode: function(gameData){
|
||||
|
||||
// Check if game data exists
|
||||
if (gameData !== void 0){
|
||||
|
||||
// Declare default var
|
||||
|
||||
var gameVersion = '',
|
||||
patchParamSfo = {},
|
||||
disableGridIconSize = '',
|
||||
gameDetails = { 'display': 'flex' },
|
||||
displayListMode = { 'display': 'flex' },
|
||||
gameDetails = {'display': 'flex'},
|
||||
usePatch = APP.gameList.cGameSettings.usePatch,
|
||||
patchLocation = APP.gameList.cGameSettings.patchLocation,
|
||||
gameMetadata = `${APP.lang.getVariable('path')}: <label class="user-can-select">${gameData.appPath}</label>`,
|
||||
listInternal = {
|
||||
'transition': '0.4s',
|
||||
'filter': `blur(${APP.settings.data.bgEmuBlur}px) opacity(${APP.settings.data.bgEmuOpacity})`
|
||||
};
|
||||
|
||||
gameMetadata = APP.lang.getVariable('path') + ': <label class="user-can-select">' + gameData.appPath + '</label>',
|
||||
listInternal = {'transition': '0.4s', 'filter': 'blur(' + APP.settings.data.bgEmuBlur +'px) opacity(' + APP.settings.data.bgEmuOpacity + ')'};
|
||||
|
||||
// If emu isn't running
|
||||
if (APP.emuManager.emuRunning === !1){
|
||||
|
||||
// Update CSS
|
||||
gameDetails = { 'display': 'none' };
|
||||
listInternal = {
|
||||
'transition': 'none',
|
||||
'filter': `blur(${APP.settings.data.bgListBlur}px) opacity(${APP.settings.data.bgListOpacity})`
|
||||
};
|
||||
|
||||
gameDetails = {'display': 'none'};
|
||||
listInternal = {'transition': 'none', 'filter': 'blur(' + APP.settings.data.bgListBlur +'px) opacity(' + APP.settings.data.bgListOpacity + ')'};
|
||||
|
||||
// Restore app title
|
||||
document.title = APP.title;
|
||||
|
||||
APP.design.renderGameList();
|
||||
APP.design.updateLauncherSettingsGUI();
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
// Disable grid size, update app title and hide game metadata
|
||||
// Disable grid size
|
||||
disableGridIconSize = 'disabled';
|
||||
displayListMode.display = 'none';
|
||||
TMS.css('DIV_LIST', { 'top': '0px', 'height': '100%' });
|
||||
document.title = `${APP.title} - ${APP.lang.getVariable('logWindowTitle')} [ ${APP.gameList.selectedGame} ]`;
|
||||
|
||||
// Update app title
|
||||
document.title = APP.title + ' - ' + APP.lang.getVariable('logWindowTitle') + ' [ ' + APP.gameList.selectedGame + ' ]';
|
||||
|
||||
// Hide game metadata
|
||||
if (APP.settings.data.showGuiMetadata === !1){
|
||||
gameDetails.display = 'none';
|
||||
}
|
||||
|
||||
// Clear search input and disable display mode buttons
|
||||
// Clear search input
|
||||
document.getElementById('INPUT_gameListSearch').value = '';
|
||||
|
||||
// Disable display mode buttons
|
||||
APP.design.gameListDisplayModes.forEach(function(cMode){
|
||||
document.getElementById(`BTN_displayMode_${cMode}`).disabled = 'disabled';
|
||||
document.getElementById('BTN_displayMode_' + cMode).disabled = 'disabled';
|
||||
});
|
||||
|
||||
// Check if PARAM.SFO patch exists
|
||||
if (APP.fs.existsSync(patchLocation) === !0){
|
||||
patchParamSfo = APP.paramSfo.parse(`${patchLocation}/sce_sys/param.sfo`);
|
||||
patchParamSfo = APP.paramSfo.parse(patchLocation + '/sce_sys/param.sfo');
|
||||
}
|
||||
if (Object.keys(patchParamSfo).length !== 0 && usePatch === !0){
|
||||
gameVersion = `<label class="LABEL_emuColor">${patchParamSfo.APP_VER}</label>`;
|
||||
gameVersion = '<label class="LABEL_emuColor">' + patchParamSfo.APP_VER + '</label>';
|
||||
}
|
||||
|
||||
// If PARAM.SFO metadata exists, display serial and game version instead
|
||||
|
@ -553,30 +550,29 @@ temp_DESIGN = {
|
|||
}
|
||||
|
||||
// Set new game data
|
||||
gameMetadata = `${gameData.paramSfo.TITLE_ID} - ${APP.lang.getVariable('gameListVersion')} ${gameVersion}`;
|
||||
gameMetadata = gameData.paramSfo.TITLE_ID + ' - ' + APP.lang.getVariable('gameListVersion') + ' ' + gameVersion;
|
||||
}
|
||||
|
||||
|
||||
// Clear game list
|
||||
document.getElementById('DIV_LIST_INTERNAL').innerHTML = '';
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Fix undefined path
|
||||
if (gameData.appIcon === void 0){
|
||||
gameData.appIcon = `file://${APP.settings.data.nwPath}/App/img/404.png`;
|
||||
gameData.appIcon = APP.settings.data.nwPath + '/App/img/404.png';
|
||||
}
|
||||
|
||||
// Set game metadata
|
||||
document.getElementById('IMG_APP_ICON').src = `file://${gameData.appIcon}`;
|
||||
document.getElementById('IMG_APP_ICON').src = gameData.appIcon;
|
||||
document.getElementById('DIV_GAME_DETAILS_currentExec').innerHTML = gameMetadata;
|
||||
document.getElementById('LABEL_GAME_DETAILS_STATUS').innerHTML = gameData.appStatus;
|
||||
document.getElementById('LABEL_GAME_DETAILS_APP_NAME').innerHTML = gameData.appName;
|
||||
document.getElementById('RANGE_settingsGridIconSize').disabled = disableGridIconSize;
|
||||
|
||||
|
||||
// Set CSS
|
||||
TMS.css('DIV_GAMELIST_BG', listInternal);
|
||||
TMS.css('DIV_GAME_DETAILS', gameDetails);
|
||||
TMS.css('BTN_displayMode_holder', displayListMode);
|
||||
|
||||
}
|
||||
|
||||
|
@ -597,8 +593,10 @@ temp_DESIGN = {
|
|||
hideList = ['DIV_SETTINGS'];
|
||||
showList = [];
|
||||
|
||||
// Render game list and update GUI
|
||||
// Render game list
|
||||
APP.design.renderGameList();
|
||||
|
||||
// Update GUI
|
||||
APP.design.update();
|
||||
|
||||
}
|
||||
|
@ -630,18 +628,20 @@ temp_DESIGN = {
|
|||
APP.design.saveSettings(requestSave);
|
||||
}
|
||||
|
||||
// Create shortcut const and get lang files
|
||||
// Shortcut
|
||||
const cSettings = APP.settings.data;
|
||||
var langSelectHtml = '<option value="english">English (Default)</option>',
|
||||
langList = APP.fs.readdirSync(`${APP.settings.data.nwPath}/Lang`);
|
||||
|
||||
// Process file list
|
||||
// Get lang files
|
||||
var langSelectHtml = '<option value="english">English (Default)</option>',
|
||||
langList = APP.fs.readdirSync(APP.settings.data.nwPath + '/Lang');
|
||||
|
||||
langList.forEach(function(cEntry){
|
||||
|
||||
// Check if file extension is json. If so, include on lang list
|
||||
if (APP.path.parse(cEntry).ext.toLowerCase() === '.json'){
|
||||
const getLangInfo = JSON.parse(APP.fs.readFileSync(`${APP.settings.data.nwPath}/Lang/${cEntry}`, 'utf-8'));
|
||||
langSelectHtml = `${langSelectHtml}<option value="${APP.path.parse(cEntry).name}">${getLangInfo.lang}</option>`;
|
||||
|
||||
const getLangInfo = JSON.parse(APP.fs.readFileSync(APP.settings.data.nwPath + '/Lang/' + cEntry, 'utf8'));
|
||||
langSelectHtml = langSelectHtml + '<option value="' + APP.path.parse(cEntry).name + '">' + getLangInfo.lang + '</option>';
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -672,10 +672,8 @@ temp_DESIGN = {
|
|||
document.getElementById('CHECKBOX_settingsShowGameMetadata').checked = JSON.parse(cSettings.showGuiMetadata);
|
||||
document.getElementById('CHECKBOX_settingsEnableFpps4Updates').checked = JSON.parse(cSettings.enableEmuUpdates);
|
||||
document.getElementById('CHECKBOX_settingsStartEmuFullscreen').checked = JSON.parse(cSettings.enableEmuFullscreen);
|
||||
document.getElementById('CHECKBOX_enableCompatStatusCheck').checked = JSON.parse(cSettings.enableCompatStatusCheck);
|
||||
document.getElementById('CHECKBOX_settingsGameSearchCaseSensitive').checked = JSON.parse(cSettings.searchCaseSensitive);
|
||||
document.getElementById('CHECKBOX_settingsExternalWindowPrompt').checked = JSON.parse(cSettings.logExternalWindowPrompt);
|
||||
document.getElementById('CHECKBOX_settingsEnableChangeGamepadLedColor').checked = JSON.parse(cSettings.sdlEnableGamepadLed);
|
||||
|
||||
// Debug
|
||||
document.getElementById('CHECKBOX_settingsExperimentalIntLog').checked = JSON.parse(cSettings.debugTestLog);
|
||||
|
@ -700,12 +698,9 @@ temp_DESIGN = {
|
|||
cSettings.gridBorderRadius = 15;
|
||||
}
|
||||
|
||||
// Check if needs to disable options if current os isn't windows
|
||||
if (APP.os.platform() !== 'win32'){
|
||||
document.getElementById('CHECKBOX_settingsExternalWindowPrompt').disabled = !0;
|
||||
}
|
||||
|
||||
// Update settings GUI
|
||||
this.updateLauncherSettingsGUI();
|
||||
|
||||
},
|
||||
|
||||
// Update settings GUI without loading / save data
|
||||
|
@ -713,12 +708,10 @@ temp_DESIGN = {
|
|||
|
||||
// Variables
|
||||
var guiZoomScale = APP.settings.data.guiZoomScale,
|
||||
cDisplayMode = APP.settings.data.gameListMode,
|
||||
gListMode = { 'top': '0px', 'height': 'calc(100% - 164px)' };
|
||||
extraCss = '<style>div.DIV_LIST_INTERNAL::-webkit-scrollbar-track { margin: 50px 0px 14px 0px; }</style>';
|
||||
|
||||
// Switch options
|
||||
switch (cDisplayMode){
|
||||
cDisplayMode = APP.settings.data.gameListMode;
|
||||
|
||||
// Grid options
|
||||
switch (cDisplayMode) {
|
||||
|
||||
case 'normal':
|
||||
document.getElementById('RANGE_settingsGridIconSize').disabled = 'disabled';
|
||||
|
@ -730,21 +723,19 @@ temp_DESIGN = {
|
|||
break;
|
||||
|
||||
case 'grid':
|
||||
extraCss = '';
|
||||
gListMode = { 'top': '38px', 'height': 'calc(100% - 202px)' };
|
||||
TMS.css('DIV_settingsShowBgOnGameEntry', {'display': 'none'});
|
||||
document.getElementById('RANGE_settingsGridIconSize').disabled = '';
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Update display modes and update zoom scale
|
||||
TMS.css('DIV_LIST', gListMode);
|
||||
document.getElementById('DIV_EXTRA_CSS').innerHTML = extraCss;
|
||||
// Reset display modes
|
||||
this.gameListDisplayModes.forEach(function(cMode){
|
||||
document.getElementById(`BTN_displayMode_${cMode}`).disabled = '';
|
||||
document.getElementById('BTN_displayMode_' + cMode).disabled = '';
|
||||
});
|
||||
document.getElementById(`BTN_displayMode_${cDisplayMode}`).disabled = 'disabled';
|
||||
document.getElementById('BTN_displayMode_' + cDisplayMode).disabled = 'disabled';
|
||||
|
||||
// Update zoom scale
|
||||
document.body.style.zoom = guiZoomScale;
|
||||
|
||||
},
|
||||
|
@ -766,10 +757,8 @@ temp_DESIGN = {
|
|||
APP.settings.data.showGuiMetadata = JSON.parse(document.getElementById('CHECKBOX_settingsShowGameMetadata').checked);
|
||||
APP.settings.data.enableEmuUpdates = JSON.parse(document.getElementById('CHECKBOX_settingsEnableFpps4Updates').checked);
|
||||
APP.settings.data.enableEmuFullscreen = JSON.parse(document.getElementById('CHECKBOX_settingsStartEmuFullscreen').checked);
|
||||
APP.settings.data.enableCompatStatusCheck = JSON.parse(document.getElementById('CHECKBOX_enableCompatStatusCheck').checked);
|
||||
APP.settings.data.searchCaseSensitive = JSON.parse(document.getElementById('CHECKBOX_settingsGameSearchCaseSensitive').checked);
|
||||
APP.settings.data.logExternalWindowPrompt = JSON.parse(document.getElementById('CHECKBOX_settingsExternalWindowPrompt').checked);
|
||||
APP.settings.data.sdlEnableGamepadLed = JSON.parse(document.getElementById('CHECKBOX_settingsEnableChangeGamepadLedColor').checked);
|
||||
|
||||
// Debug
|
||||
APP.settings.data.debugTestLog = JSON.parse(document.getElementById('CHECKBOX_settingsExperimentalIntLog').checked);
|
||||
|
@ -798,8 +787,10 @@ temp_DESIGN = {
|
|||
End
|
||||
*/
|
||||
|
||||
// Save settings and close settings
|
||||
// Save settings
|
||||
APP.settings.save();
|
||||
|
||||
// GUI: Close settings
|
||||
if (skipCloseSettings !== !0){
|
||||
APP.design.toggleSettings(!0);
|
||||
}
|
||||
|
@ -830,15 +821,17 @@ temp_DESIGN = {
|
|||
|
||||
}
|
||||
|
||||
// Reset progressbar status abd update display mode
|
||||
// Reset progressbar status
|
||||
TMS.css('DIV_PROGRESSBAR_UPDATE_FPPS4', {'width': '0%'});
|
||||
|
||||
// Update display mode
|
||||
TMS.css('DIV_FPPS4_UPDATER', cssData);
|
||||
|
||||
},
|
||||
|
||||
// Update status
|
||||
updateProgressbarStatus: function(percentage, status){
|
||||
TMS.css('DIV_PROGRESSBAR_UPDATE_FPPS4', {'width': `${percentage}%`});
|
||||
TMS.css('DIV_PROGRESSBAR_UPDATE_FPPS4', {'width': percentage + '%'});
|
||||
document.getElementById('LABEL_FPPS4_UPDATER_STATUS').innerHTML = status;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,56 +19,51 @@ temp_EMUMANAGER = {
|
|||
// Run emu
|
||||
runGame: function(){
|
||||
|
||||
// Get selected game details and check if user selected a game
|
||||
// Get selected game details
|
||||
const mainGameData = APP.gameList.list[APP.gameList.selectedGame];
|
||||
|
||||
// If user selected a game
|
||||
if (mainGameData !== void 0){
|
||||
|
||||
// Reset Error List and clear log on emu running (if needed)
|
||||
// Reset Error List
|
||||
APP.emuManager.emuErrorList = [];
|
||||
|
||||
// Options: Clear log on emu starts
|
||||
if (APP.settings.data.clearLogOnEmuLoad === !0 && APP.emuManager.emuRunCounter !== 0){
|
||||
APP.clearLog(!0);
|
||||
}
|
||||
|
||||
// If (by some reason) main emu still running, close it and set main variables
|
||||
// If (by some reason) main emu still running, close it!
|
||||
this.killEmu(!0);
|
||||
var ebootPath = mainGameData.exe,
|
||||
|
||||
// Set main variables
|
||||
var ebootPath = APP.gameList.list[APP.gameList.selectedGame].exe,
|
||||
emuArgs = ['-e', ebootPath],
|
||||
hList = APP.design.hackList;
|
||||
|
||||
|
||||
// Check if patches are available
|
||||
if (APP.gameList.cGameSettings.usePatch === !0 && APP.design.gamePatchLoaded === !0){
|
||||
emuArgs.push('-p');
|
||||
emuArgs.push(`\"${APP.gameList.cGameSettings.patchLocation}\"`);
|
||||
emuArgs.push("\"" + APP.gameList.cGameSettings.patchLocation + '\"');
|
||||
}
|
||||
|
||||
// Get enabled hacks
|
||||
hList.forEach(function(hackName){
|
||||
if (document.getElementById(`CHECK_${hackName}`).checked === !0){
|
||||
if (document.getElementById('CHECK_' + hackName).checked === !0){
|
||||
emuArgs.push('-h');
|
||||
emuArgs.push(hackName);
|
||||
}
|
||||
});
|
||||
|
||||
// Push gamepad mode
|
||||
const padMode = document.getElementById('FPPS4_OPTIONS_SELECT_GAMEPAD_MODE').value;
|
||||
if (padMode === 'sdl2' && APP.gameList.checkSdl2() === !1){
|
||||
emuArgs.push('-pad "keyboard"');
|
||||
} else {
|
||||
emuArgs.push(`-pad "${padMode}"`);
|
||||
}
|
||||
|
||||
// If current gameppad mode is SDL2 and change led bar color is enabled, push led args
|
||||
if (padMode === 'sdl2' && APP.settings.data.sdlEnableGamepadLed === !0){
|
||||
emuArgs.push(`-led $${APP.gameList.cGameSettings.gPadLedColor}`);
|
||||
}
|
||||
|
||||
// Add fullscreen flag if it's enabled
|
||||
if (APP.settings.data.enableEmuFullscreen === !0){
|
||||
emuArgs.push('-w');
|
||||
}
|
||||
|
||||
// Log emu location and args and run fpPS4
|
||||
// Log emu location and args
|
||||
APP.log(APP.lang.getVariable('runEmuArgs', [emuArgs.toString().replace(RegExp(',', 'gi'), ' '), APP.settings.data.emuPath]));
|
||||
|
||||
// Run fpPS4
|
||||
APP.runfpPS4(APP.settings.data.emuPath, emuArgs);
|
||||
|
||||
// Update main GUI
|
||||
|
@ -90,7 +85,7 @@ temp_EMUMANAGER = {
|
|||
|
||||
// Stop fpPS4
|
||||
killEmu: function(){
|
||||
|
||||
|
||||
// Update status
|
||||
if (this.emuRunning === !0){
|
||||
document.getElementById('LABEL_GAME_DETAILS_STATUS').innerHTML = APP.lang.getVariable('killEmuStatus');
|
||||
|
|
|
@ -12,7 +12,7 @@ temp_FILEMANAGER = {
|
|||
// Select path
|
||||
selectPath: function(postAction){
|
||||
|
||||
if (postAction !== void 0 && typeof postAction === 'function'){
|
||||
if (postAction !== void 0){
|
||||
|
||||
document.getElementById('APP_FOLDER_LOADER').onchange = function(){
|
||||
|
||||
|
@ -35,7 +35,7 @@ temp_FILEMANAGER = {
|
|||
// Select file
|
||||
selectFile: function(ext, postAction){
|
||||
|
||||
if (ext !== void 0 && postAction !== void 0 && typeof postAction === 'function'){
|
||||
if (ext !== void 0 && postAction !== void 0){
|
||||
|
||||
if (ext === ''){
|
||||
ext = '*.*';
|
||||
|
@ -75,7 +75,7 @@ temp_FILEMANAGER = {
|
|||
try {
|
||||
|
||||
APP.fs.writeFileSync(location, content, mode);
|
||||
if (postAction !== void 0 && typeof postAction === 'function'){
|
||||
if (postAction !== void 0){
|
||||
postAction(APP.tools.fixPath(location));
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,6 @@ temp_FILEMANAGER = {
|
|||
|
||||
}
|
||||
|
||||
// Open save dialog
|
||||
TMS.triggerClick('APP_FILE_SAVE');
|
||||
|
||||
},
|
||||
|
@ -100,18 +99,8 @@ temp_FILEMANAGER = {
|
|||
// Open game folder
|
||||
openDir: function(path){
|
||||
|
||||
// Switch platform
|
||||
switch (APP.os.platform()){
|
||||
|
||||
case 'win32':
|
||||
APP.childProcess.exec(`start "" "${path}"`);
|
||||
break;
|
||||
|
||||
case 'linux':
|
||||
APP.childProcess.exec(`browse "${path}"`);
|
||||
break;
|
||||
|
||||
}
|
||||
// Spawn explorer
|
||||
APP.childProcess.exec('start "" "' + path + '"');
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
fpPS4 Temmie's Launcher
|
||||
gamelist.js
|
||||
|
||||
This file contains all functions / variables related to gamelist
|
||||
This file contains all functions / variables related to creating and managing
|
||||
gamelist
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
|
@ -18,50 +19,6 @@ temp_GAMELIST = {
|
|||
// Selected game settings
|
||||
cGameSettings: {},
|
||||
|
||||
// Current compat list
|
||||
cCompatList: [],
|
||||
|
||||
// Create compat list
|
||||
createCompatList: function(){
|
||||
|
||||
// Requisites to create compat list
|
||||
const proceedCheck = [
|
||||
APP.webConnection === !0,
|
||||
Object.keys(APP.gameList.list).length !== 0,
|
||||
APP.settings.data.enableCompatStatusCheck === !0
|
||||
];
|
||||
|
||||
// Check if can create list
|
||||
if (proceedCheck.indexOf(!1) === -1){
|
||||
|
||||
// Reset the current compat list
|
||||
APP.gameList.cCompatList = [];
|
||||
|
||||
// fetch database
|
||||
fetch(`https://api.fpps4.net/database.json`)
|
||||
.then(function(resp){
|
||||
return resp.json();
|
||||
})
|
||||
.then(function(respData){
|
||||
|
||||
// If response data exists, update current compat list
|
||||
if (respData !== void 0){
|
||||
|
||||
// renames some variables and discards unneeded ones
|
||||
APP.gameList.cCompatList = respData.map(({title, code, status, labels}) => ({
|
||||
title: title,
|
||||
id: code,
|
||||
status: status,
|
||||
labels: labels // maybe you can do something cool with this ;)
|
||||
}));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// Make game settings
|
||||
createGameSettings: function(data){
|
||||
|
||||
|
@ -72,26 +29,21 @@ temp_GAMELIST = {
|
|||
hacks: data.hacks,
|
||||
usePatch: data.usePatch,
|
||||
isHomebrew: data.isHomebrew,
|
||||
gamepadMode: data.gamepadMode,
|
||||
gPadLedColor: data.gPadLedColor,
|
||||
patchLocation: data.patchLocation
|
||||
};
|
||||
|
||||
// Check if title location exists
|
||||
if (APP.fs.existsSync(APP.path.parse(data.path).dir) === !0){
|
||||
|
||||
// Write file
|
||||
try {
|
||||
APP.fs.writeFileSync(data.path, JSON.stringify(gameSettings), 'utf-8');
|
||||
logMessage = APP.lang.getVariable('createdSettingsFile', [data.name]);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
logMessage = APP.lang.getVariable('errorCreateSettingsFile', [data.name, data.path, err]);
|
||||
patchLocation: data.patchLocation,
|
||||
importedModules: data.importedModules
|
||||
}
|
||||
|
||||
} else {
|
||||
logMessage = APP.lang.getVariable('errorListUnableLocateGamePath', [data.name, data.path]);
|
||||
APP.gameList.load();
|
||||
// Write file
|
||||
try {
|
||||
|
||||
APP.fs.writeFileSync(data.path, JSON.stringify(gameSettings), 'utf8');
|
||||
logMessage = APP.lang.getVariable('createdSettingsFile', [data.name]);
|
||||
|
||||
} catch (err) {
|
||||
|
||||
console.error(err);
|
||||
logMessage = APP.lang.getVariable('errorCreateSettingsFile', [data.name, data.path, err]);
|
||||
|
||||
}
|
||||
|
||||
// Log result
|
||||
|
@ -107,7 +59,7 @@ temp_GAMELIST = {
|
|||
logMessage = '',
|
||||
tempData = APP.gameList.cGameSettings,
|
||||
prevSettings = JSON.stringify(APP.gameList.cGameSettings),
|
||||
fPath = `${APP.path.parse(this.list[this.selectedGame].exe).dir}/launcherSettings.json`;
|
||||
fPath = APP.path.parse(this.list[this.selectedGame].exe).dir + '/launcherSettings.json';
|
||||
|
||||
/*
|
||||
Update settings
|
||||
|
@ -115,13 +67,11 @@ temp_GAMELIST = {
|
|||
|
||||
// Update hack data
|
||||
APP.design.hackList.forEach(function(hName){
|
||||
cHacks[hName] = JSON.parse(document.getElementById(`CHECK_${hName}`).checked);
|
||||
cHacks[hName] = JSON.parse(document.getElementById('CHECK_' + hName).checked);
|
||||
});
|
||||
tempData.hacks = cHacks;
|
||||
|
||||
// Update patch data, gamepad mode and led color
|
||||
tempData.gPadLedColor = document.getElementById('INPUT_cGameLedColor').value.slice(1);
|
||||
tempData.gamepadMode = document.getElementById('FPPS4_OPTIONS_SELECT_GAMEPAD_MODE').value;
|
||||
// Update patch data
|
||||
tempData.usePatch = JSON.parse(document.getElementById('CHECKBOX_optionsEnablePatch').checked);
|
||||
|
||||
/*
|
||||
|
@ -131,11 +81,15 @@ temp_GAMELIST = {
|
|||
|
||||
// Write file
|
||||
try {
|
||||
APP.fs.writeFileSync(fPath, JSON.stringify(tempData), 'utf-8');
|
||||
|
||||
APP.fs.writeFileSync(fPath, JSON.stringify(tempData), 'utf8');
|
||||
logMessage = APP.lang.getVariable('updateGameSettings', [APP.gameList.selectedGame]);
|
||||
|
||||
} catch (err) {
|
||||
|
||||
console.error(err);
|
||||
logMessage = APP.lang.getVariable('updateGameSettingsError', [APP.gameList.selectedGame, fPath, err]);
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -156,8 +110,7 @@ temp_GAMELIST = {
|
|||
toggleGamePatch: function(){
|
||||
|
||||
// Get current game id
|
||||
const
|
||||
cGame = this.selectedGame,
|
||||
const cGame = this.selectedGame,
|
||||
listTop = document.getElementById('DIV_LIST_INTERNAL').scrollTop;
|
||||
|
||||
// Update GUI
|
||||
|
@ -166,56 +119,41 @@ temp_GAMELIST = {
|
|||
APP.design.update();
|
||||
this.load();
|
||||
|
||||
// Select current game and update scroll
|
||||
// Select current game
|
||||
APP.design.selectGame(cGame);
|
||||
|
||||
// Update scroll
|
||||
document.getElementById('DIV_LIST_INTERNAL').scrollTop = listTop;
|
||||
|
||||
},
|
||||
|
||||
// Check for SDL2.dll in emu folder
|
||||
checkSdl2: function(){
|
||||
|
||||
// Check if gamepad mode is sdl2
|
||||
if (document.getElementById('FPPS4_OPTIONS_SELECT_GAMEPAD_MODE').value === 'sdl2'){
|
||||
|
||||
// Get path for sdl2.dll and check if exists. If not, give an alert when its not found.
|
||||
const
|
||||
sdl2Path = `${APP.tools.fixPath(nw.__dirname)}/Emu/SDL2.dll`,
|
||||
dllExists = APP.fs.existsSync(sdl2Path);
|
||||
if (!dllExists){
|
||||
window.alert(APP.lang.getVariable("Sdl2NotFound"));
|
||||
}
|
||||
|
||||
return dllExists;
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// Load game patch
|
||||
loadGamePatch: function(){
|
||||
|
||||
if (this.selectedGame !== ''){
|
||||
|
||||
// Create main vars
|
||||
var logMessage = '',
|
||||
cGame = this.selectedGame;
|
||||
|
||||
|
||||
// Read path
|
||||
APP.fileManager.selectPath(function(pLocation){
|
||||
|
||||
// Check if exists PARAM.SFO
|
||||
if (APP.fs.existsSync(`${pLocation}/sce_sys/param.sfo`) === !0){
|
||||
if (APP.fs.existsSync(pLocation + '/sce_sys/param.sfo') === !0){
|
||||
|
||||
// Read PARAM.SFO and check if TITLE_ID matches current game
|
||||
const getParamSfo = APP.paramSfo.parse(`${pLocation}/sce_sys/param.sfo`);
|
||||
// Read PARAM.SFO
|
||||
const getParamSfo = APP.paramSfo.parse(pLocation + '/sce_sys/param.sfo');
|
||||
|
||||
// Check if TITLE_ID matches current game
|
||||
if (getParamSfo.TITLE_ID === cGame && getParamSfo.CATEGORY !== 'ac'){
|
||||
|
||||
// Set variables and log message
|
||||
// Set variables
|
||||
APP.gameList.cGameSettings.patchLocation = pLocation;
|
||||
APP.gameList.saveGameSettings(!0);
|
||||
APP.gameList.load();
|
||||
APP.design.selectGame(cGame);
|
||||
|
||||
// Set log message
|
||||
logMessage = APP.lang.getVariable('patchLoadedSucessfully', [getParamSfo.TITLE, APP.paramSfo.database.DB_CATEGORY[getParamSfo.CATEGORY]]);
|
||||
|
||||
} else {
|
||||
|
@ -247,34 +185,23 @@ temp_GAMELIST = {
|
|||
// Check if path exists
|
||||
if (APP.fs.existsSync(APP.settings.data.gamePath) === !0){
|
||||
|
||||
// Reset selected game, reset search box, reset game list and read game list path
|
||||
APP.gameList.list = {};
|
||||
// Reset selected game
|
||||
this.selectedGame = '';
|
||||
|
||||
// Reset search box
|
||||
document.getElementById('INPUT_gameListSearch').value = '';
|
||||
|
||||
// Reset game list
|
||||
APP.gameList.list = {};
|
||||
|
||||
// Get game list
|
||||
const gList = APP.fs.readdirSync(APP.settings.data.gamePath);
|
||||
|
||||
// Check if game list isn't empty
|
||||
if (gList.length > 0){
|
||||
|
||||
// Process game list
|
||||
gList.forEach(function(gPath){
|
||||
|
||||
// Create skip homebrew list
|
||||
const commonHbList = [
|
||||
'CUSA00000',
|
||||
'CUSA11111',
|
||||
'CUSA22222',
|
||||
'CUSA33333',
|
||||
'CUSA44444',
|
||||
'CUSA55555',
|
||||
'CUSA66666',
|
||||
'CUSA77777',
|
||||
'CUSA88888',
|
||||
'CUSA99999',
|
||||
'CUSA36666'
|
||||
];
|
||||
|
||||
// Create main vars
|
||||
|
||||
var appBg,
|
||||
appIcon,
|
||||
addGame = !0,
|
||||
|
@ -283,100 +210,89 @@ temp_GAMELIST = {
|
|||
appName = gPath,
|
||||
isHomebrew = !1,
|
||||
settingsFile = {},
|
||||
pathBase = `${APP.settings.data.gamePath}/${gPath}/`,
|
||||
executableName = `${pathBase}eboot.bin`,
|
||||
paramSfoPath = `${pathBase}sce_sys/param.sfo`,
|
||||
playGoPath = `${pathBase}sce_sys/playgo-chunk.dat`,
|
||||
playGoAvailable = APP.fs.existsSync(playGoPath),
|
||||
paramSfoAvailable = APP.fs.existsSync(paramSfoPath),
|
||||
iconList = ['sce_sys/icon0.png', 'sce_sys/icon1.png'],
|
||||
backgroundList = ['sce_sys/pic1.png', 'sce_sys/pic0.png'];
|
||||
backgroundList = ['sce_sys/pic1.png', 'sce_sys/pic0.png'],
|
||||
pathBase = APP.settings.data.gamePath + '/' + gPath + '/',
|
||||
executableName = pathBase + 'eboot.bin',
|
||||
paramSfoPath = pathBase + 'sce_sys/param.sfo',
|
||||
playGoPath = pathBase + 'sce_sys/playgo-chunk.dat',
|
||||
playGoAvailable = APP.fs.existsSync(playGoPath),
|
||||
paramSfoAvailable = APP.fs.existsSync(paramSfoPath);
|
||||
|
||||
// If eboot.bin doesn't exists, look for any .elf file
|
||||
if (APP.fs.existsSync(executableName) !== !0){
|
||||
|
||||
// Check if can skip entry
|
||||
if (gPath.slice(0, 1) !== '!'){
|
||||
|
||||
// If eboot.bin doesn't exists, look for any .elf file
|
||||
if (APP.fs.existsSync(executableName) !== !0){
|
||||
|
||||
// Seek .elf files on root dir
|
||||
var fList = APP.fs.readdirSync(pathBase),
|
||||
execName = fList.filter(function(fName){
|
||||
if (fName.toLowerCase().indexOf('.elf') !== -1){
|
||||
isHomebrew = !0;
|
||||
return fName;
|
||||
}
|
||||
})[0];
|
||||
|
||||
// Set executable name - if not found (undefined), skip entry!
|
||||
executableName = pathBase + execName;
|
||||
if (execName === void 0){
|
||||
addGame = !1;
|
||||
}
|
||||
// Seek .elf files on root dir
|
||||
var fList = APP.fs.readdirSync(pathBase),
|
||||
execName = fList.filter(function(fName){
|
||||
if (fName.toLowerCase().indexOf('.elf') !== -1){
|
||||
isHomebrew = !0;
|
||||
return fName;
|
||||
}
|
||||
})[0];
|
||||
|
||||
// Set executable name - if not found (undefined), skip entry!
|
||||
executableName = pathBase + execName;
|
||||
if (execName === void 0){
|
||||
addGame = !1;
|
||||
}
|
||||
|
||||
// Seek App Icon
|
||||
for (var i = 0; i < iconList.length; i++){
|
||||
if (APP.fs.existsSync(pathBase + iconList[i]) === !0){
|
||||
appIcon = pathBase + iconList[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Seek App Icon
|
||||
for (var i = 0; i < iconList.length; i++){
|
||||
if (APP.fs.existsSync(pathBase + iconList[i]) === !0){
|
||||
appIcon = pathBase + iconList[i];
|
||||
break;
|
||||
}
|
||||
|
||||
// Seek App Background
|
||||
for (var i = 0; i < backgroundList.length; i++){
|
||||
if (APP.fs.existsSync(pathBase + backgroundList[i]) === !0){
|
||||
appBg = pathBase + backgroundList[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Seek App Background
|
||||
for (var i = 0; i < backgroundList.length; i++){
|
||||
if (APP.fs.existsSync(pathBase + backgroundList[i]) === !0){
|
||||
appBg = pathBase + backgroundList[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if Icon and Background exists - if not, use 404
|
||||
if (APP.fs.existsSync(appIcon) === !1){
|
||||
appIcon = `${APP.settings.data.nwPath}/App/img/404.png`;
|
||||
}
|
||||
if (APP.fs.existsSync(appBg) === !1){
|
||||
appBg = `${APP.settings.data.nwPath}/App/img/404_BG.png`;
|
||||
}
|
||||
// Check if Icon and Background exists - if not, use 404
|
||||
if (APP.fs.existsSync(appIcon) === !1){
|
||||
appIcon = APP.settings.data.nwPath + '/app/img/404.png';
|
||||
}
|
||||
if (APP.fs.existsSync(appBg) === !1){
|
||||
appBg = APP.settings.data.nwPath + '/app/img/404_BG.png';
|
||||
}
|
||||
|
||||
// Warn if playgo-chunk.dat isn't available
|
||||
if (isHomebrew === !1 && playGoAvailable !== !0){
|
||||
APP.log(APP.lang.getVariable('gameListLoadWarnPlayGo', [appName]));
|
||||
}
|
||||
// Warn if playgo-chunk.dat isn't available
|
||||
if (isHomebrew === !1 && playGoAvailable !== !0){
|
||||
APP.log(APP.lang.getVariable('gameListLoadWarnPlayGo', [appName]));
|
||||
}
|
||||
|
||||
// Warn if PARAM.SFO isn't available
|
||||
if (isHomebrew === !1 && paramSfoAvailable !== !0){
|
||||
APP.log(APP.lang.getVariable('gameListLoadWarnParamSfo', [appName]));
|
||||
}
|
||||
// Warn if PARAM.SFO isn't available
|
||||
if (isHomebrew === !1 && paramSfoAvailable !== !0){
|
||||
APP.log(APP.lang.getVariable('gameListLoadWarnParamSfo', [appName]));
|
||||
}
|
||||
|
||||
// If PARAM.SFO is present (and enabled), get metadata
|
||||
if (APP.settings.data.enableParamSfo === !0 && paramSfoAvailable === !0){
|
||||
// If PARAM.SFO is present (and enabled), get metadata
|
||||
if (APP.settings.data.enableParamSfo === !0 && paramSfoAvailable === !0){
|
||||
|
||||
// Set PARAM.SFO variables
|
||||
paramSfo = APP.paramSfo.parse(paramSfoPath);
|
||||
|
||||
// Set PARAM.SFO variables and game entry
|
||||
paramSfo = APP.paramSfo.parse(paramSfoPath);
|
||||
appId = paramSfo.TITLE_ID;
|
||||
appName = paramSfo.TITLE;
|
||||
// Set game entry
|
||||
appName = paramSfo.TITLE;
|
||||
appId = paramSfo.TITLE_ID;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Check if current game matches CUSA pattern. if not, set as homebrew
|
||||
if (appId.indexOf('CUSA') === -1 || commonHbList.indexOf(appId) !== -1){
|
||||
isHomebrew = !0;
|
||||
}
|
||||
|
||||
// Check if settings file exists for current game
|
||||
if (APP.fs.existsSync(`${pathBase}/launcherSettings.json`) === !0){
|
||||
settingsFile = JSON.parse(APP.fs.readFileSync(`${pathBase}/launcherSettings.json`));
|
||||
}
|
||||
|
||||
} else {
|
||||
addGame = !1;
|
||||
// Check if settings file exists for current game
|
||||
if (APP.fs.existsSync(pathBase + '/launcherSettings.json') === !0){
|
||||
settingsFile = JSON.parse(APP.fs.readFileSync(pathBase + '/launcherSettings.json'));
|
||||
}
|
||||
|
||||
// If executable exists, set data
|
||||
if (addGame === !0){
|
||||
|
||||
// Create metadata
|
||||
const metadata = {
|
||||
bg: appBg,
|
||||
name: appName,
|
||||
|
@ -396,7 +312,7 @@ temp_GAMELIST = {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
} else {
|
||||
|
@ -407,7 +323,6 @@ temp_GAMELIST = {
|
|||
}
|
||||
|
||||
// Render game list
|
||||
APP.gameList.createCompatList();
|
||||
APP.design.renderGameList();
|
||||
|
||||
} else {
|
||||
|
@ -419,10 +334,9 @@ temp_GAMELIST = {
|
|||
|
||||
},
|
||||
|
||||
// Process search list
|
||||
// Process Search List
|
||||
search: function(){
|
||||
|
||||
// Create main search vars
|
||||
var gameListArray = Object.keys(APP.gameList.list),
|
||||
searchQuery = document.getElementById('INPUT_gameListSearch').value;
|
||||
|
||||
|
@ -434,8 +348,10 @@ temp_GAMELIST = {
|
|||
APP.design.update();
|
||||
}
|
||||
|
||||
// Create vars and process search query if current search mode is title id
|
||||
// Process search query
|
||||
var tempList, listRender = {};
|
||||
|
||||
// Case game search mode is TITLE_ID
|
||||
if (APP.settings.data.gameSearchMode === 'titleId'){
|
||||
|
||||
tempList = gameListArray.filter(function(cItem){
|
||||
|
@ -449,12 +365,12 @@ temp_GAMELIST = {
|
|||
// If game search mode is APP_NAME
|
||||
if (APP.settings.data.gameSearchMode === 'appName'){
|
||||
|
||||
// Reset temp list and process game list
|
||||
tempList = [];
|
||||
|
||||
gameListArray.forEach(function(cTitle){
|
||||
|
||||
// Get title name and check if current search is case-sensitive
|
||||
var titleName = APP.gameList.list[cTitle].name;
|
||||
|
||||
if (APP.settings.data.searchCaseSensitive === !1){
|
||||
titleName = APP.gameList.list[cTitle].name.toLowerCase();
|
||||
searchQuery = searchQuery.toLowerCase();
|
||||
|
@ -477,97 +393,46 @@ temp_GAMELIST = {
|
|||
if (Object.keys(listRender).length !== 0){
|
||||
APP.design.renderGameList({customList: listRender, displayLog: !1});
|
||||
} else {
|
||||
document.getElementById('DIV_LIST_INTERNAL').innerHTML = `<div class="DIV_noGameFound">${APP.lang.getVariable('gameListSearch404')} \"${searchQuery}\"</div>`;
|
||||
document.getElementById('DIV_LIST_INTERNAL').innerHTML = '<div class="DIV_noGameFound">' + APP.lang.getVariable('gameListSearch404') + ' \"' + searchQuery + '\"</div>';
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// Render normal game list
|
||||
APP.gameList.load();
|
||||
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// Check game status
|
||||
checkGameStatus: function(){
|
||||
// Check dump status
|
||||
checkDumpStatus: function(){
|
||||
|
||||
// Declare main consts
|
||||
const
|
||||
fileList = [ 'param.sfo' ],
|
||||
cGame = this.list[this.selectedGame],
|
||||
cGameId = structuredClone(APP.gameList.selectedGame),
|
||||
gPath = `${APP.settings.data.gamePath}/${cGame.folderName}`,
|
||||
cDumpStatusList = [ 'DIV_ICON_STATUS_OK', 'DIV_ICON_STATUS_WARN', 'DIV_ICON_STATUS_HB' ],
|
||||
cGameComapStatusList = [ 'BOOTS', 'MENUS', 'INGAME', 'UNKNOWN', 'NOTHING', 'PLAYABLE', 'HOMEBREW' ];
|
||||
|
||||
// Declare main vars
|
||||
var cGameStatus = 'OK',
|
||||
cGameComapStatus = 'UNKNOWN',
|
||||
displayGameCompatHolderCss = { 'display': 'none' };
|
||||
cGame = this.list[this.selectedGame],
|
||||
fileList = [
|
||||
'param.sfo'
|
||||
],
|
||||
cGameStatusList = ['DIV_ICON_STATUS_OK', 'DIV_ICON_STATUS_WARN', 'DIV_ICON_STATUS_HB'],
|
||||
gPath = APP.settings.data.gamePath + '/' + cGame.folderName;
|
||||
|
||||
// Process check for single files (like param.sfo)
|
||||
fileList.forEach(function(cFile){
|
||||
if (APP.fs.existsSync(`${gPath}/sce_sys/${cFile}`) !== !0){
|
||||
if (APP.fs.existsSync(gPath + '/sce_sys/' + cFile) !== !0){
|
||||
cGameStatus = 'WARN';
|
||||
}
|
||||
});
|
||||
|
||||
// Check if playgo-chunk.dat exists
|
||||
if (APP.fs.existsSync(`${gPath}/sce_sys/playgo-chunk.dat`) !== !0){
|
||||
|
||||
// Set current game status to warn and check if playgo-chunk.dat is inside app folder
|
||||
if (APP.fs.existsSync(gPath + '/sce_sys/playgo-chunk.dat') !== !0){
|
||||
cGameStatus = 'WARN';
|
||||
if (APP.fs.existsSync(`${gPath}/sce_sys/app/playgo-chunk.dat`) === !0){
|
||||
APP.fs.copyFileSync(`${gPath}/sce_sys/app/playgo-chunk.dat`, `${gPath}/sce_sys/playgo-chunk.dat`);
|
||||
APP.log(APP.lang.getVariable('checkDumpPlayGoOnApp', [cGame.name]));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Set current compat CSS / status
|
||||
const updateCompat = function(){
|
||||
|
||||
// Remove all other conditions and set current one
|
||||
TMS.css('DIV_FPPS4_GAME_STATUS', displayGameCompatHolderCss);
|
||||
cGameComapStatusList.forEach(function(cStatus){
|
||||
TMS.removeClass('DIV_selectedGameStatus_compat', `DIV_COMPAT_STATUS_${cStatus}`);
|
||||
});
|
||||
TMS.addClass('DIV_selectedGameStatus_compat', `DIV_COMPAT_STATUS_${cGameComapStatus}`);
|
||||
document.getElementById('DIV_selectedGameStatus_compat').innerHTML = APP.lang.getVariable(`cGameCompatStatus_${cGameComapStatus}`);
|
||||
|
||||
}
|
||||
|
||||
// Check if can display game compat status
|
||||
if (APP.webConnection === !0 && APP.settings.data.enableCompatStatusCheck === !0){
|
||||
|
||||
// Update display CSS
|
||||
var searchQuery = structuredClone(cGameId);
|
||||
displayGameCompatHolderCss = { 'display': 'flex' };
|
||||
|
||||
// If current title is a homebrew, search for game name
|
||||
if (cGame.isHomebrew === !0){
|
||||
searchQuery = cGame.name;
|
||||
// Check if playgo-chunk.dat is inside app folder
|
||||
if (APP.fs.existsSync(gPath + '/sce_sys/app/playgo-chunk.dat') === !0){
|
||||
APP.fs.copyFileSync(gPath + '/sce_sys/app/playgo-chunk.dat', gPath + '/sce_sys/playgo-chunk.dat');
|
||||
APP.log(APP.lang.getVariable('checkDumpPlayGoOnApp', [this.list[this.selectedGame].name]));
|
||||
}
|
||||
|
||||
// get the current issues matching either the id or title
|
||||
let foundIssues = APP.gameList.cCompatList.filter( issue => issue.id.toUpperCase() === searchQuery.toUpperCase() || issue.title.toUpperCase() === searchQuery.toUpperCase() );
|
||||
|
||||
// Check if the current title isn't on the compat list
|
||||
if (foundIssues.length <= 0) {
|
||||
|
||||
cGameComapStatus = 'UNKNOWN';
|
||||
APP.log(APP.lang.getVariable('warnUnableFindGameCompatDb', [APP.gameList.list[searchQuery].name, searchQuery]));
|
||||
updateCompat();
|
||||
|
||||
} else {
|
||||
// Get data from current database and update compat mode
|
||||
cGameComapStatus = foundIssues[0].status.toUpperCase();
|
||||
updateCompat();
|
||||
}
|
||||
|
||||
} else {
|
||||
updateCompat();
|
||||
|
||||
}
|
||||
|
||||
// Check if is homebrew (.elf)
|
||||
|
@ -576,20 +441,19 @@ temp_GAMELIST = {
|
|||
}
|
||||
|
||||
// Set app / game dump status
|
||||
cDumpStatusList.forEach(function(cList){
|
||||
TMS.removeClass('DIV_selectedGameStatus_dump', cList);
|
||||
cGameStatusList.forEach(function(cList){
|
||||
TMS.removeClass('DIV_selectedGameStatus', cList);
|
||||
});
|
||||
TMS.addClass('DIV_selectedGameStatus_dump', `DIV_ICON_STATUS_${cGameStatus}`);
|
||||
document.getElementById('DIV_selectedGameStatus_dump').innerHTML = APP.lang.getVariable(`dumpStatus_${cGameStatus}`);
|
||||
TMS.addClass('DIV_selectedGameStatus', 'DIV_ICON_STATUS_' + cGameStatus);
|
||||
document.getElementById('DIV_selectedGameStatus').innerHTML = APP.lang.getVariable('dumpStatus_' + cGameStatus);
|
||||
|
||||
},
|
||||
|
||||
// Open selected game location
|
||||
openGameLocation: function(){
|
||||
|
||||
// Check if there's game selected
|
||||
if (this.selectedGame !== ''){
|
||||
APP.fileManager.openDir(`${APP.settings.data.gamePath}/${this.list[this.selectedGame].folderName}`);
|
||||
APP.fileManager.openDir(APP.settings.data.gamePath + '/' + this.list[this.selectedGame].folderName);
|
||||
}
|
||||
|
||||
},
|
||||
|
@ -599,7 +463,7 @@ temp_GAMELIST = {
|
|||
|
||||
if (this.selectedGame !== '' && Object.keys(this.list[this.selectedGame].paramSfo).length !== 0){
|
||||
|
||||
APP.fileManager.saveFile(`${this.selectedGame}_metadata`, '.json', 'utf8', JSON.stringify(this.list[this.selectedGame].paramSfo), function(cPath){
|
||||
APP.fileManager.saveFile(this.selectedGame + '_metadata', '.json', 'utf8', JSON.stringify(this.list[this.selectedGame].paramSfo), function(cPath){
|
||||
window.alert(APP.lang.getVariable('saveSucessfullPath', [cPath]));
|
||||
APP.log(APP.lang.getVariable('saveSucessfullPath', [cPath]));
|
||||
});
|
||||
|
@ -611,10 +475,8 @@ temp_GAMELIST = {
|
|||
// Reset current game settings
|
||||
resetGameSettings: function(){
|
||||
|
||||
// Create main vars
|
||||
const
|
||||
cGame = this.selectedGame,
|
||||
fName = `${APP.settings.data.gamePath}/${this.list[cGame].folderName}/launcherSettings.json`,
|
||||
const cGame = this.selectedGame,
|
||||
fName = APP.settings.data.gamePath + '/' + this.list[cGame].folderName + '/launcherSettings.json',
|
||||
conf = window.confirm(APP.lang.getVariable('settingsConfirmRemoveGameSettings', [this.list[cGame].name]));
|
||||
|
||||
if (this.selectedGame !== '' && APP.fs.existsSync(fName) === !0 && conf === !0){
|
||||
|
@ -622,24 +484,95 @@ temp_GAMELIST = {
|
|||
// Remove file
|
||||
try {
|
||||
|
||||
// Remove settings file and reload data
|
||||
// Remove settings file
|
||||
APP.fs.unlinkSync(fName);
|
||||
|
||||
// Reload data
|
||||
setTimeout(function(){
|
||||
APP.gameList.selectedGame = '';
|
||||
APP.gameList.load();
|
||||
APP.design.selectGame(cGame);
|
||||
TMS.scrollCenter(`GAME_ENTRY_${cGame}`);
|
||||
TMS.scrollCenter('GAME_ENTRY_' + cGame);
|
||||
}, 50);
|
||||
|
||||
} catch (err) {
|
||||
|
||||
APP.log(APP.lang.getVariable('settingsRemoveGameSettingsError', [cGame, err]));
|
||||
console.error(err);
|
||||
APP.log(APP.lang.getVariable('settingsRemoveGameSettingsError', [cGame, err]));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// Process remove modules
|
||||
removeAllModules: function(){
|
||||
|
||||
// Check if this process already happened
|
||||
if (APP.settings.data.removedLibModules === !1){
|
||||
|
||||
try {
|
||||
|
||||
const gList = Object.keys(APP.gameList.list);
|
||||
gList.forEach(function(gName){
|
||||
|
||||
APP.design.selectGame(gName);
|
||||
APP.gameList.removeImportedModules();
|
||||
|
||||
});
|
||||
|
||||
// Update settings
|
||||
APP.settings.data.removedLibModules = !0;
|
||||
APP.settings.save();
|
||||
|
||||
// Log
|
||||
APP.log(APP.lang.getVariable('removedLibModules'));
|
||||
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// Removed Imported modules
|
||||
removeImportedModules: function(){
|
||||
|
||||
if (this.selectedGame !== '' && this.cGameSettings.importedModules.length > 0){
|
||||
|
||||
var cMessage = '',
|
||||
gName = this.selectedGame,
|
||||
mList = this.cGameSettings.importedModules,
|
||||
mDir = APP.settings.data.gamePath + '/' + APP.gameList.list[gName].folderName + '/sce_module/';
|
||||
|
||||
// Try removing modules
|
||||
mList.forEach(function(mName){
|
||||
|
||||
try {
|
||||
|
||||
APP.fs.unlinkSync(mDir + mName);
|
||||
mList.splice(mList.indexOf(mName), 1);
|
||||
cMessage = APP.lang.getVariable('removeLibModule', [gName, mName]);
|
||||
|
||||
} catch (err) {
|
||||
|
||||
console.error(err);
|
||||
cMessage = APP.lang.getVariable('removeModuleError', [err]);
|
||||
|
||||
}
|
||||
|
||||
// Log status
|
||||
APP.log(cMessage);
|
||||
|
||||
});
|
||||
|
||||
// Update settings file
|
||||
this.saveGameSettings(!0);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -18,7 +18,6 @@ temp_LANGUAGE = {
|
|||
this.selected = this.english;
|
||||
}
|
||||
|
||||
// Declare main var
|
||||
var lPatch = [],
|
||||
res = this.selected.variables[name];
|
||||
|
||||
|
@ -32,10 +31,11 @@ temp_LANGUAGE = {
|
|||
lPatch = list;
|
||||
}
|
||||
|
||||
// Apply variables and return string
|
||||
// Apply variables
|
||||
lPatch.forEach(function(fix, entry){
|
||||
res = res.replace(`%VARIABLE_${entry}%`, fix);
|
||||
res = res.replace('%VARIABLE_' + entry + '%', fix);
|
||||
});
|
||||
|
||||
return res;
|
||||
|
||||
},
|
||||
|
@ -48,86 +48,74 @@ temp_LANGUAGE = {
|
|||
english: {
|
||||
|
||||
"lang": "English (Default)",
|
||||
|
||||
|
||||
"variables": {
|
||||
|
||||
"labelEnableHack": "Enable",
|
||||
"emuStatusRunning": "Running",
|
||||
"logWindowTitle": "Running fpPS4",
|
||||
"killEmuStatus": "Main process closed - close the fpPS4 log window to go back",
|
||||
"killEmuStatus": "Main process closed - close fpPS4 log window to go back",
|
||||
"logCleared": "INFO - Previous log was cleared!",
|
||||
"about": "fpPS4 Temmie\'s Launcher - Version: %VARIABLE_0%\n\nCreated by TheMitoSan [Previously known as TemmieHeartz]\n(https://twitter.com/themitosan)\n\nfpPS4 is created by red-prig\n(https://github.com/red-prig/fpPS4)\n\nPlugin memoryjs is created by Rob--\n(https://github.com/rob--/memoryjs)\n\nPlugin node-stream-zip is created by antelle\n(https://github.com/antelle/node-stream-zip)\n\nSVG icons were obtained from https://www.svgrepo.com/",
|
||||
"mainLog": 'fpPS4 Temmie\'s Launcher - Version: %VARIABLE_0%\nRunning on nw.js version %VARIABLE_1% [%VARIABLE_2%]',
|
||||
"mainLog": 'fpPS4 Temmie\'s Launcher - Version: %VARIABLE_0%\nRunning on nw.js (node-webkit) version %VARIABLE_1% [%VARIABLE_2%]',
|
||||
"settingsErrorCreatePath": "ERROR - Unable to create path!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
"settingsErrorfpPS4NotFound": "ERROR - Unable to locate the main fpPS4 executable!\nMake sure to select it in Settings or insert it in the \"Emu\" folder and click OK.",
|
||||
"settingsErrorfpPS4NotFound": "ERROR - Unable to locate main fpPS4 executable!\nMake sure to select it in Settings or insert it in \"Emu\" folder and click OK.",
|
||||
"settingsConfirmRemoveAllGameSettings": "WARNING - This option will remove all saved settings from your game list.\nDo you want to continue?",
|
||||
"settingsRemovedGameSettings": "INFO - ( %VARIABLE_0% ) Settings file was removed successfully!",
|
||||
"settingsConfirmRemoveGameSettings": "WARNING - This action will delete all saved settings for %VARIABLE_0%\n\nDo you want to continue?",
|
||||
"settingsRemoveGameSettingsError": 'ERROR - ( %VARIABLE_0% ) Unable to delete settings file!\nReason: %VARIABLE_1%',
|
||||
"settingsRemoveGameSettings404": 'WARNING - ( %VARIABLE_0% ) Unable to find the settings file for this app / game!',
|
||||
"settingsRemoveGameSettings404": 'WARNING - ( %VARIABLE_0% ) Unable to find settings file for this app / game!',
|
||||
"infoProcessComplete": "INFO - Process complete!\nCheck the log for more details",
|
||||
"infoSettingsUpdated": "INFO - Settings file was updated successfully!",
|
||||
"settingsLoadError": "ERROR - Unable to load the settings file!\n %VARIABLE_0%",
|
||||
"settingsSaveError": "ERROR - Unable to save the settings file!\n %VARIABLE_0%",
|
||||
"settingsLoadError": "ERROR - Unable to load settings file!\n %VARIABLE_0%",
|
||||
"settingsSaveError": "ERROR - Unable to save settings file!\n %VARIABLE_0%",
|
||||
"runEmuArgs": "\nINFO - Running fpPS4 with args: %VARIABLE_0%\nEmu location: %VARIABLE_1%",
|
||||
"closeEmuStatus": "INFO - %VARIABLE_0% was closed, returning code %VARIABLE_1%",
|
||||
"removedLibModules": "INFO - All the previously imported modules using this launcher were removed since it can be harmful to your game dumps.",
|
||||
"removedLibModules": "INFO - All previous imported modules using this launcher were removed since it can be harmful to your game dumps.",
|
||||
"removeLibModule": "INFO - ( %VARIABLE_0% ) Removing module: %VARIABLE_1%",
|
||||
"removeModuleError": "ERROR - Unable to remove modules!\nReason: %VARIABLE_0%",
|
||||
"updateGameSettings": "INFO - ( %VARIABLE_0% ) Settings file was updated successfully!",
|
||||
"updateGameSettingsError": "ERROR - Unable to update the settings file for %VARIABLE_0% at %VARIABLE_1%!\nReason: %VARIABLE_2%",
|
||||
"skipUpdateGameSettings": "INFO - ( %VARIABLE_0% ) Skipped updating the settings file since it has no changes!",
|
||||
"errorSaveFile": "ERROR - Unable to save the file!\nReason: %VARIABLE_0%",
|
||||
"updateGameSettingsError": "ERROR - Unable to update settings file for %VARIABLE_0% at %VARIABLE_1%!\nReason: %VARIABLE_2%",
|
||||
"skipUpdateGameSettings": "INFO - ( %VARIABLE_0% ) Skip updating settings file since it has no changes!",
|
||||
"errorSaveFile": "ERROR - Unable to save file!\nReason: %VARIABLE_0%",
|
||||
"saveSucessfullPath": "INFO - Save successful!\nPath: %VARIABLE_0%",
|
||||
"createdSettingsFile": "INFO - Settings file was created successfully for %VARIABLE_0%",
|
||||
"errorCreateSettingsFile": "ERROR - Unable to create the settings file for %VARIABLE_0% at %VARIABLE_1%!\nReason: %VARIABLE_2%",
|
||||
"errorCreateSettingsFile": "ERROR - Unable to create settings file for %VARIABLE_0% at %VARIABLE_1%!\nReason: %VARIABLE_2%",
|
||||
"patchLoadedSucessfully": "INFO - Patch loaded successfully!\nName: %VARIABLE_0%\nType: %VARIABLE_1%",
|
||||
"patchLoadErrorMismatch": "ERROR - This isn\'t a patch or it isn't made for this app / game!\nPatch ID: %VARIABLE_0%\nSelected app / game: %VARIABLE_1%",
|
||||
"patchLoadErrorParamSfo404": "ERROR - Unable to find the PARAM.SFO for this patch!",
|
||||
"gameListLoadWarnPlayGo": "WARNING - Unable to locate the playgo-chunk.dat for %VARIABLE_0%!\nIf this isn\'t a homebrew, check if this app / game was dumped properly.",
|
||||
"gameListLoadWarnParamSfo": "WARNING - Unable to locate the PARAM.SFO for %VARIABLE_0%!\nIf this isn\'t a homebrew, check if this app / game was dumped properly.",
|
||||
"gameListDoubleIdError": "WARNING - Unable to add %VARIABLE_0% to game list because another app / game with the same title ID already exists! ( %VARIABLE_1% )",
|
||||
"patchLoadErrorMismatch": "ERROR - This isn\'t a patch or it does not match for this app / game!\nPatch ID: %VARIABLE_0%\nSelected app / game: %VARIABLE_1%",
|
||||
"patchLoadErrorParamSfo404": "ERROR - Unable to find PARAM.SFO for this patch!",
|
||||
"gameListLoadWarnPlayGo": "WARNING - Unable to locate playgo-chunk.dat for %VARIABLE_0%!\nIf this isn\'t a homebrew, check if this app / game was dumped properly.",
|
||||
"gameListLoadWarnParamSfo": "WARNING - Unable to locate PARAM.SFO for %VARIABLE_0%!\nIf this isn\'t a homebrew, check if this app / game was dumped properly.",
|
||||
"gameListDoubleIdError": "WARNING - Unable to add %VARIABLE_0% to game list because another app / game with the same title ID exists! ( %VARIABLE_1% )",
|
||||
"gameListNoGameFound": "INFO - No apps / games were detected on current path ( %VARIABLE_0% )",
|
||||
"gameListSearch404": "Unable to find",
|
||||
"checkDumpPlayGoOnApp": "INFO - ( %VARIABLE_0% ) playgo-chunk.dat was found inside sce_sys/app - a new copy was created in sce_sys.",
|
||||
"gameListLoadSuccessful": "INFO - Game list was loaded successfully! ( %VARIABLE_0% entries found )",
|
||||
"gameListVersion": "Version",
|
||||
"selectGameLoadPatchErrorParamSfo": "ERROR - Unable to read the PARAM.SFO from this patch!\n%VARIABLE_0%",
|
||||
"selectGameLoadPatchErrorParamSfo": "ERROR - Unable to read PARAM.SFO from this patch!\n%VARIABLE_0%",
|
||||
"path": "Path",
|
||||
"gamelistGamePath404": "ERROR - Unable to find the selected app / game path!\n%VARIABLE_0%",
|
||||
"gamelistGamePath404": "ERROR - Unable to find selected app / game path!\n%VARIABLE_0%",
|
||||
"updateEmuFetchActionsError": "ERROR - Unable to fetch GitHub actions data!",
|
||||
"updateEmuIsLatestVersion": "INFO - You are already using the latest fpPS4 version available!\nCommit ID (SHA): %VARIABLE_0%",
|
||||
"updateEmuShaAvailable": "INFO - A new fpPS4 update is available!\n\nLocal version: %VARIABLE_0%\nUpstream version: %VARIABLE_1%\n\nDo you want to update?",
|
||||
"updateEmuShaUnavailable": "INFO - This Launcher detected that you didn\'t updated fpPS4 yet (or the fpPS4 executable was not found!)\n\nYou can fix this by running the fpPS4 updater process.\nDo you want to proceed?",
|
||||
"updateEmuDownloadFailed": "ERROR - Unable to download the fpPS4 update!\nResponse status: %VARIABLE_0% - OK: %VARIABLE_1%",
|
||||
"updateEmuIsLatestVersion": "INFO - You are using the latest fpPS4 version available!\nCommit ID (SHA): %VARIABLE_0%",
|
||||
"updateEmuShaAvailable": "INFO - A new update is available!\n\nLocal version: %VARIABLE_0%\nNew version: %VARIABLE_1%\n\nDo you want to update?",
|
||||
"updateEmuShaUnavailable": "INFO - This Launcher detected that you didn\'t updated fpPS4 yet (or fpPS4 executable was not found!)\n\nYou can fix this by running fpPS4 updater process.\nDo you want to proceed?",
|
||||
"updateEmuDownloadFailed": "ERROR - Unable to download fpPS4 update!\nResponse status: %VARIABLE_0% - OK: %VARIABLE_1%",
|
||||
"updateEmuProcessComplete": "INFO - Update complete! - New fpPS4 version (Commit ID / SHA): %VARIABLE_0%",
|
||||
"updateEmu-1-4": "Downloading fpPS4 update (<label class=\"LABEL_monospace\">%VARIABLE_0%</label>)",
|
||||
"updateEmu-2-4": "Extracting update",
|
||||
"updateEmu-3-4": "Removing leftover files",
|
||||
"updateEmu-4-4": "Update complete!",
|
||||
"settingsLogEmuSha": "INFO - fpPS4 version: %VARIABLE_0%",
|
||||
"settingsLogEmuSha": "INFO - fpPS4 version: (%VARIABLE_0%)",
|
||||
"dumpStatus_OK": "Fine",
|
||||
"dumpStatus_WARN": "Missing files",
|
||||
"dumpStatus_HB": "Homebrew",
|
||||
"updateEmuWorkflow404": "ERROR - (Updater) Unable to load the workflow list from the fpPS4 GitHub!",
|
||||
"updater_noWorkflowListAvailable": "No workflow list available",
|
||||
"Sdl2NotFound": "SDL2.dll is not found in the Emu folder, please install it to use SDL2.",
|
||||
"errorListUnableLocateGamePath": "ERROR - Unable to locate \"%VARIABLE_0%\" settings path! In order to prevent issues, the game list will be reloaded.\nPath: %VARIABLE_1%",
|
||||
"updateEmuSettingsWorkflow404": "ERROR - (Updater) Unable to find (%VARIABLE_0%) on the fpPS4 workflow list! %VARIABLE_1% will be used as a fallback.",
|
||||
"nonWindowsOsWarn": "WARN - You are running fpPS4 Temmie's Launcher on a non-windows operating system!\n\nIn order to run fpPS4, you will need Wine installed on your OS.\n\nBe aware that running fpPS4 through tools like Wine can result in more glitches and a degraded performance / experience.",
|
||||
"cGameCompatStatus_BOOTS": "Boots",
|
||||
"cGameCompatStatus_MENUS": "Menus",
|
||||
"cGameCompatStatus_INGAME": "In-Game",
|
||||
"cGameCompatStatus_UNKNOWN": "Unknown",
|
||||
"cGameCompatStatus_NOTHING": "Nothing",
|
||||
"cGameCompatStatus_PLAYABLE": "Playable",
|
||||
"warnUnableFindGameCompatDb": "WARN - Unable to find the compatibility status for \"%VARIABLE_0%\" (%VARIABLE_1%) on the fpPS4 database!",
|
||||
"warnUserOffline": "WARN - You are offline! Some features (like the game compatibility status and the fpPS4 updater) will not be available until you reconnect to the internet."
|
||||
"updateEmuWorkflow404": "ERROR - (Updater) Unable to locate selected CI workflow from fpPS4 GitHub!",
|
||||
"updater_noWorkflowListAvailable": "No workflow list available"
|
||||
|
||||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "Green: All files are present\nYellow: Some files are missing - check the log for more details\nCyan: Executable is a .elf file",
|
||||
"DIV_selectedGameStatus_compat": "Playable: You can play this title from start to finish.\nIn-game: You can play parts / segments of this title, but you can't finish it.\nMenus: This title boots into the main menu, but you can't play the main game.\nBoots: This title starts loading the game, but fails at some point.\nNothing: This title doesn't do anything.\nUnknown: There is no data about this title on the fpPS4 database."
|
||||
"DIV_selectedGameStatus": "Green: All files are present\nYellow: Some files are missing - check log for more details\nCyan: Executable is a .elf file"
|
||||
}
|
||||
|
||||
},
|
||||
|
|
207
App/js/main.js
|
@ -6,35 +6,33 @@
|
|||
This file contains all modules and required functions to initialize
|
||||
launcher.
|
||||
******************************************************************************
|
||||
|
||||
IMPORTANT:
|
||||
|
||||
It seems that doesn't matter how much we fight, there is still having
|
||||
people out there that always will try to cease our light. As long they
|
||||
still out there, we will preserve ourselves.
|
||||
|
||||
You don't need to worry - everything still works as usual.
|
||||
Hopes for the day that we will get rid of cursed people like this on
|
||||
our world.
|
||||
|
||||
Do you want colors back? Maybe you should try again when all world
|
||||
go rainbow mode™. I'm pretty sure you know what I mean ;)
|
||||
|
||||
By the way: Mental Illness? S*ck My @ss!
|
||||
|
||||
TheMitoSan / TemmieHeartz <3
|
||||
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
const APP = {
|
||||
|
||||
// Load nwjs / node.js modules
|
||||
loadModules: function(){
|
||||
|
||||
try{
|
||||
|
||||
// Require global modules
|
||||
APP.fs = require('fs');
|
||||
APP.os = require('os');
|
||||
APP.win = nw.Window.get();
|
||||
APP.path = require('path');
|
||||
APP.https = require('https');
|
||||
APP.childProcess = require('child_process');
|
||||
APP.packageJson = require('../package.json');
|
||||
APP.streamZip = require('App/node_modules/node-stream-zip');
|
||||
|
||||
// If current OS is windows, load memoryjs
|
||||
if (APP.os.platform() === 'win32'){
|
||||
APP.memoryjs = require('App/node_modules/memoryjs');
|
||||
}
|
||||
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
window.alert(`ERROR - Unable to load node modules!\n${e}`);
|
||||
}
|
||||
|
||||
var c;try{APP.fs=require("fs"),APP.win=nw.Window.get(),APP.path=require("path"),APP.https=require("https"),APP.childProcess=require("child_process"),c=5,APP.packageJson=require("../package.json"),APP.memoryjs=require("App/node_modules/memoryjs"),APP.streamZip=require("App/node_modules/node-stream-zip")}catch(e){console.error(e),window.alert("ERROR - Unable to load node modules!\n"+e)}
|
||||
if (new Date().getMonth()===c){TMS.removeDOM("stylesheet");TMS.append("SCRIPT_LOADER",`<style type="text/css">${atob(APP.settings.magic)}</style>`);};
|
||||
},
|
||||
|
||||
// App version
|
||||
|
@ -42,9 +40,6 @@ const APP = {
|
|||
version: '',
|
||||
appVersion: void 0,
|
||||
|
||||
// Internet connection
|
||||
webConnection: !1,
|
||||
|
||||
// Import app modules
|
||||
tools: temp_TOOLS,
|
||||
lang: temp_LANGUAGE,
|
||||
|
@ -62,10 +57,9 @@ const APP = {
|
|||
|
||||
if (text !== '' && text !== void 0){
|
||||
|
||||
// Delclare main vars
|
||||
var canLog = !0,
|
||||
previousLog = APP.logData,
|
||||
newLog = `${previousLog}\n${text}`;
|
||||
newLog = previousLog + '\n' + text;
|
||||
|
||||
// Fix log with white line
|
||||
if (previousLog == ''){
|
||||
|
@ -83,10 +77,14 @@ const APP = {
|
|||
// Check if can append log
|
||||
if (canLog === !0){
|
||||
|
||||
// Set current line, append log and scroll log view
|
||||
// Set current line
|
||||
APP.logLine = text;
|
||||
|
||||
// Append log
|
||||
document.getElementById('APP_LOG').value = newLog;
|
||||
APP.logData = newLog;
|
||||
|
||||
// Scroll log
|
||||
document.getElementById('APP_LOG').scrollTop = document.getElementById('APP_LOG').scrollHeight;
|
||||
|
||||
}
|
||||
|
@ -98,16 +96,20 @@ const APP = {
|
|||
// Clear Log
|
||||
clearLog: function(){
|
||||
|
||||
// Get current date
|
||||
var d = new Date(),
|
||||
logName = 'Log_' + d.toDateString().replace(RegExp(' ', 'gi'), '_') + '_' + d.getHours() + '_' + d.getMinutes() + '_' + d.getSeconds() + '.log';
|
||||
|
||||
// Reset log
|
||||
APP.logData = APP.appVersion;
|
||||
document.getElementById('APP_LOG').value = APP.appVersion;
|
||||
document.getElementById('APP_LOG').value = `${APP.appVersion}`;
|
||||
APP.log(APP.lang.getVariable('logCleared'));
|
||||
|
||||
},
|
||||
|
||||
// DEBUG: Process fpPS4 output data
|
||||
processStdOutput: function(data, type){
|
||||
|
||||
|
||||
const logSplit = data.split('\n');
|
||||
logSplit.forEach(function(logLine){
|
||||
|
||||
|
@ -135,44 +137,35 @@ const APP = {
|
|||
if (APP.settings.data.debugTestLog === !1){
|
||||
|
||||
// Window state
|
||||
var winMode,
|
||||
pressAnyKey = '',
|
||||
emuExecPath = APP.path.parse(APP.settings.data.emuPath).base,
|
||||
cmdWinTitle = `"${APP.lang.getVariable('logWindowTitle')} - ${APP.gameList.selectedGame}"`;
|
||||
|
||||
// Switch cmd window mode
|
||||
var winMode, pressAnyKey = '';
|
||||
switch (APP.settings.data.logExternalWindowStartMode){
|
||||
|
||||
|
||||
case 'normal':
|
||||
winMode = '';
|
||||
break;
|
||||
|
||||
|
||||
case 'max':
|
||||
winMode = '/MAX';
|
||||
break;
|
||||
|
||||
|
||||
case 'min':
|
||||
winMode = '/MIN';
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Ask user to press any key
|
||||
if (APP.settings.data.logExternalWindowPrompt === !0){
|
||||
pressAnyKey = '^& pause';
|
||||
}
|
||||
|
||||
|
||||
// Transform args into string
|
||||
var gPath = `"${args[args.indexOf('-e') + 1]}"`,
|
||||
var gPath = '"' + args[args.indexOf('-e') + 1] + '"',
|
||||
parseArgs = args.toString().replace(RegExp(',', 'gi'), ' ').replace(args[args.indexOf('-e') + 1], gPath),
|
||||
execLine = `start ${cmdWinTitle} ${winMode} cmd /C ${emuExecPath} ${parseArgs} ${pressAnyKey}`;
|
||||
|
||||
// Check if needs to change exec line and run process
|
||||
if (APP.os.platform() !== 'win32'){
|
||||
execLine = `wine wineconsole "Z:${APP.settings.data.emuPath}" ${parseArgs}`
|
||||
}
|
||||
execLine = 'start "' + APP.lang.getVariable('logWindowTitle') + ' - ' + APP.gameList.selectedGame + '" ' + winMode + ' cmd /C ' + APP.path.parse(APP.settings.data.emuPath).base + ' ' + parseArgs + ' ' + pressAnyKey;
|
||||
|
||||
APP.execProcess = APP.childProcess.exec(execLine);
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
/*
|
||||
|
@ -183,10 +176,12 @@ const APP = {
|
|||
|
||||
}
|
||||
|
||||
// Set emu running and stream as string (UTF-8)
|
||||
// Set emu running
|
||||
APP.emuManager.emuRunning = !0;
|
||||
APP.execProcess.stdout.setEncoding('utf-8');
|
||||
APP.execProcess.stderr.setEncoding('utf-8');
|
||||
|
||||
// Set stream as string (UTF-8)
|
||||
APP.execProcess.stdout.setEncoding('utf8');
|
||||
APP.execProcess.stderr.setEncoding('utf8');
|
||||
|
||||
// Log on stdout and stderr
|
||||
APP.execProcess.stdout.on('data', function(data){
|
||||
|
@ -209,20 +204,22 @@ const APP = {
|
|||
appStatus: 'idle'
|
||||
});
|
||||
|
||||
// Log exit code and save log if APP.settings.data.saveLogOnEmuClose is true
|
||||
// Log exit code
|
||||
APP.log(APP.lang.getVariable('closeEmuStatus', [APP.path.parse(exe).base, code]));
|
||||
|
||||
// Save log if APP.settings.data.saveLogOnEmuClose is true
|
||||
if (APP.settings.data.saveLogOnEmuClose === !0){
|
||||
APP.clearLog();
|
||||
}
|
||||
|
||||
// Scroll game list to last selected game
|
||||
if (APP.gameList.selectedGame !== ''){
|
||||
TMS.css(`GAME_ENTRY_${APP.gameList.selectedGame}`, {'animation': '0.8s hintGameFocus'});
|
||||
TMS.css('GAME_ENTRY_' + APP.gameList.selectedGame, {'animation': '0.8s hintGameFocus'});
|
||||
TMS.focus('INPUT_gameListSearch', 100);
|
||||
|
||||
setTimeout(function(){
|
||||
APP.design.selectGame(APP.gameList.selectedGame);
|
||||
TMS.scrollCenter(`GAME_ENTRY_${APP.gameList.selectedGame}`);
|
||||
TMS.scrollCenter('GAME_ENTRY_' + APP.gameList.selectedGame);
|
||||
}, 100);
|
||||
|
||||
}
|
||||
|
@ -239,62 +236,23 @@ const APP = {
|
|||
// MemoryJS - Get Process Info
|
||||
getProcessInfo: function(processName, postAction){
|
||||
|
||||
// Check if current os is windows
|
||||
if (APP.os.platform() === 'win32'){
|
||||
// Get process list
|
||||
var res, pList = this.memoryjs.getProcesses();
|
||||
|
||||
// Get process list and start seek
|
||||
var res, pList = this.memoryjs.getProcesses();
|
||||
Object.keys(pList).forEach(function(pName){
|
||||
// Seek process
|
||||
Object.keys(pList).forEach(function(pName){
|
||||
|
||||
if (pList[pName].szExeFile.toLowerCase() === processName.toLowerCase()){
|
||||
res = pList[pName];
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// If found and post-action function is present, execute it!
|
||||
if (postAction !== void 0 && res !== void 0){
|
||||
postAction(res);
|
||||
if (pList[pName].szExeFile.toLowerCase() === processName.toLowerCase()){
|
||||
res = pList[pName];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// Check current operating system
|
||||
checkCurrentOs: function(){
|
||||
|
||||
// Check if needs to display warn
|
||||
if (APP.os.platform() !== 'win32' && APP.settings.data.nonWindowsOsWarn === !1){
|
||||
window.alert(APP.lang.getVariable('nonWindowsOsWarn'));
|
||||
APP.log(APP.lang.getVariable('nonWindowsOsWarn'));
|
||||
APP.settings.data.nonWindowsOsWarn = !0;
|
||||
APP.settings.save();
|
||||
APP.emuManager.update.check({forceUpdate: !0, silent: !0});
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// Check current user internet connection
|
||||
startOnlineCheck: function(){
|
||||
|
||||
// Create update connection function
|
||||
const updateConnectionStatus = function(){
|
||||
APP.webConnection = navigator.onLine;
|
||||
};
|
||||
|
||||
// Set current connection status and crerate event listeners
|
||||
APP.webConnection = navigator.onLine;
|
||||
window.addEventListener('online', function(){
|
||||
updateConnectionStatus();
|
||||
document.getElementById('BTN_UPDATE_FPPS4').disabled = !1;
|
||||
});
|
||||
window.addEventListener('offline', function(){
|
||||
updateConnectionStatus();
|
||||
APP.log(APP.lang.getVariable('warnUserOffline'));
|
||||
document.getElementById('BTN_UPDATE_FPPS4').disabled = !0;
|
||||
});
|
||||
|
||||
// If found and post-action function is present, execute it!
|
||||
if (postAction !== void 0 && res !== void 0){
|
||||
postAction(res);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
// About screen
|
||||
|
@ -325,44 +283,55 @@ window.onload = function(){
|
|||
|
||||
try {
|
||||
|
||||
// Load nwjs / node.js modules and start loding settings ( 1 / 2 )
|
||||
// Load nwjs / node.js modules
|
||||
APP.loadModules();
|
||||
|
||||
// Load settings ( 1 / 2 )
|
||||
APP.settings.load();
|
||||
APP.settings.loadLang();
|
||||
|
||||
// App title
|
||||
APP.version = APP.packageJson.version;
|
||||
APP.title = `${APP.packageJson.name} - Ver. ${APP.version} [${process.versions['nw-flavor'].toUpperCase()}]`;
|
||||
APP.title = APP.packageJson.name + ' - Ver. ' + APP.version + ' [' + process.versions['nw-flavor'].toUpperCase() + ']';
|
||||
document.title = APP.title;
|
||||
|
||||
// App Log
|
||||
APP.appVersion = APP.lang.getVariable('mainLog', [APP.version, process.versions.nw, process.versions['nw-flavor'].toUpperCase()]);
|
||||
APP.log(APP.appVersion);
|
||||
|
||||
// Start connection check, load remaining settings, kill fpPS4 process if is active and check currert OS
|
||||
|
||||
// Load settings ( 2 / 2 )
|
||||
APP.settings.checkPaths();
|
||||
APP.design.renderSettings();
|
||||
APP.emuManager.killEmu(!0);
|
||||
APP.startOnlineCheck();
|
||||
APP.checkCurrentOs();
|
||||
|
||||
// Rener hack list, gamepad modes and focus input search field
|
||||
// Kill fpPS4 process if is active
|
||||
APP.emuManager.killEmu(!0);
|
||||
|
||||
// Rener hack list
|
||||
APP.design.renderHacklist();
|
||||
|
||||
// Focus search field
|
||||
TMS.focus('INPUT_gameListSearch');
|
||||
|
||||
// Load game list, Get all available workflows from updater and check if fpPS4 have any update (silently)
|
||||
// Load game list
|
||||
APP.gameList.load();
|
||||
|
||||
// Remove all previous imported modules
|
||||
APP.gameList.removeAllModules();
|
||||
|
||||
// Updater: Get all available workflows
|
||||
APP.emuManager.update.getWorkflows();
|
||||
|
||||
// Check if fpPS4 have any update (silenty)
|
||||
if (APP.emuManager.update.skipLoadingCheck === !1){
|
||||
APP.emuManager.update.check({ silent: !0 });
|
||||
APP.emuManager.update.check({silent: !0});
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
|
||||
// Log error
|
||||
console.error(err);
|
||||
window.alert(`ERROR - Unable to start main application!\n\nReason:\n${err}\n\nTo know more, hit F12 and go to console tab to see more details.`);
|
||||
window.alert('ERROR - Unable to start main application!\n\nReason:\n' + err + '\n\nTo know more, hit F12 and go to console tab to see more details.');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
This file is responsible for holding all funcions / database for reading
|
||||
PARAM.SFO files!
|
||||
|
||||
Many thanks to Control eXecute (@notzecoxao) for this challenge!
|
||||
Many thanks to Control eXecute (@notzecoxao) for this sassy-challenge!
|
||||
|
||||
Article used as reference:
|
||||
https://www.psdevwiki.com/ps4/Param.sfo
|
||||
|
@ -14,7 +14,7 @@
|
|||
*/
|
||||
|
||||
temp_PARAMSFO_PARSER = {
|
||||
|
||||
|
||||
// PARAM.SFO Key Database
|
||||
database: temp_PARAMSFO_DATABASE,
|
||||
|
||||
|
@ -35,7 +35,7 @@ temp_PARAMSFO_PARSER = {
|
|||
|
||||
// Read file as hex (String)
|
||||
const sfoHex = APP.fs.readFileSync(fLocation, 'hex');
|
||||
|
||||
|
||||
var sfoMetadata = {},
|
||||
|
||||
// SFO Header
|
||||
|
@ -46,7 +46,7 @@ temp_PARAMSFO_PARSER = {
|
|||
keyTableStart: APP.tools.parseEndian(sfoHex.slice(16, 24)), // (0x04) Key table start offset
|
||||
dataTableStart: APP.tools.parseEndian(sfoHex.slice(24, 32)), // (0x04) Data table start offset
|
||||
totalIndexEntries: APP.tools.parseEndian(sfoHex.slice(32, 40)) // (0x04) Total entries in index table
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -72,8 +72,9 @@ temp_PARAMSFO_PARSER = {
|
|||
// Get key table data info
|
||||
listAttrArray.forEach(function(cAttr){
|
||||
|
||||
// Slice current data and set current read mode
|
||||
// Slice Current Data
|
||||
const cReadingMode = hexStartLocation.slice(readerLocation, parseInt(readerLocation + 32));
|
||||
|
||||
readMode[cAttr] = {
|
||||
|
||||
keyTableOffset: cReadingMode.slice(0, 4), // Key table offset
|
||||
|
@ -81,7 +82,7 @@ temp_PARAMSFO_PARSER = {
|
|||
paramLength: cReadingMode.slice(8, 16), // Parameter length
|
||||
paramMaxLength: cReadingMode.slice(16, 24), // Parameter Max Length
|
||||
dataOffset: cReadingMode.slice(24, 32) // Data Offset
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Update position for next location
|
||||
|
@ -90,9 +91,9 @@ temp_PARAMSFO_PARSER = {
|
|||
});
|
||||
|
||||
/*
|
||||
Set metadata info
|
||||
Set Metadata Info
|
||||
*/
|
||||
|
||||
|
||||
// Set location to data table start create first slice
|
||||
var pointerLocation = 0,
|
||||
dataTableSlice = sfoHex.slice(parseInt(sfoHeader.dataTableStart, 16) * 2);
|
||||
|
@ -103,8 +104,9 @@ temp_PARAMSFO_PARSER = {
|
|||
// Get hex file starting from current location
|
||||
var keyData = '',
|
||||
convertUft8 = !1,
|
||||
cSlice = dataTableSlice.slice(pointerLocation),
|
||||
stopLocation = parseInt(pointerLocation + 8); // Default: int32
|
||||
|
||||
|
||||
/*
|
||||
Check param length
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
*/
|
||||
|
||||
temp_SETTINGS = {
|
||||
|
||||
|
||||
// Settings list
|
||||
data: {
|
||||
|
||||
|
@ -23,6 +23,9 @@ temp_SETTINGS = {
|
|||
// Language
|
||||
appLanguage: 'english',
|
||||
|
||||
// Remove previous imported modules
|
||||
removedLibModules: !1,
|
||||
|
||||
// Paths
|
||||
nwPath: '',
|
||||
emuPath: '',
|
||||
|
@ -31,10 +34,7 @@ temp_SETTINGS = {
|
|||
// Run fpPS4 on fullscreen
|
||||
enableEmuFullscreen: !1,
|
||||
|
||||
// Enable / disable change led color
|
||||
sdlEnableGamepadLed: !0,
|
||||
|
||||
// Enable / disable PARAM.SFO support
|
||||
// Enable / Disable PARAM.SFO support
|
||||
enableParamSfo: !0,
|
||||
|
||||
// Log External window
|
||||
|
@ -73,21 +73,13 @@ temp_SETTINGS = {
|
|||
gridIconSize: 116,
|
||||
gridBorderRadius: 8,
|
||||
|
||||
// Enable compat status check
|
||||
enableCompatStatusCheck: !0,
|
||||
|
||||
/*
|
||||
fpPS4 Update
|
||||
*/
|
||||
latestCommitSha: '',
|
||||
enableEmuUpdates: !0,
|
||||
fpps4selectedCI: 'CI',
|
||||
fpps4BranchName: 'trunk',
|
||||
fpps4selectedCI: 'Main CI',
|
||||
|
||||
/*
|
||||
Warning messages
|
||||
*/
|
||||
nonWindowsOsWarn: !1,
|
||||
|
||||
/*
|
||||
Debug
|
||||
|
@ -102,7 +94,7 @@ temp_SETTINGS = {
|
|||
// Get launcher main dir before settings load
|
||||
var updateSettings = !1,
|
||||
nwPath = APP.tools.fixPath(nw.__dirname),
|
||||
settingsPath = `${nwPath}/Settings.json`;
|
||||
settingsPath = nwPath + '/Settings.json';
|
||||
|
||||
// Create save
|
||||
if (APP.fs.existsSync(settingsPath) === !1){
|
||||
|
@ -111,8 +103,10 @@ temp_SETTINGS = {
|
|||
|
||||
try {
|
||||
|
||||
// Read settings file and check for obsolete keys
|
||||
// Read settings file
|
||||
var loadSettings = JSON.parse(APP.fs.readFileSync(settingsPath, 'utf8'));
|
||||
|
||||
// Check for obsolete settings
|
||||
Object.keys(loadSettings).forEach(function(cSettings){
|
||||
|
||||
if (APP.settings.data[cSettings] === void 0){
|
||||
|
@ -132,8 +126,10 @@ temp_SETTINGS = {
|
|||
|
||||
});
|
||||
|
||||
// Load settings and check if needs to update settings file
|
||||
// Load settings
|
||||
this.data = loadSettings;
|
||||
|
||||
// Check if need to update settings file
|
||||
if (updateSettings === !0){
|
||||
APP.log(APP.lang.getVariable('infoSettingsUpdated'));
|
||||
APP.settings.save();
|
||||
|
@ -152,13 +148,15 @@ temp_SETTINGS = {
|
|||
|
||||
// Save settings
|
||||
save: function(){
|
||||
|
||||
// Get launcher main dir before settings load and include current launcher version on settings
|
||||
|
||||
// Get launcher main dir before settings load
|
||||
const nwPath = APP.tools.fixPath(nw.__dirname);
|
||||
|
||||
// Include current launcher version on settings
|
||||
this.data.launcherVersion = APP.packageJson.version;
|
||||
|
||||
try {
|
||||
APP.fs.writeFileSync(`${nwPath}/Settings.json`, JSON.stringify(this.data), 'utf-8');
|
||||
APP.fs.writeFileSync(nwPath + '/Settings.json', JSON.stringify(this.data), 'utf8');
|
||||
} catch (err) {
|
||||
console.error(APP.lang.getVariable('settingsSaveError', [err]));
|
||||
}
|
||||
|
@ -172,20 +170,20 @@ temp_SETTINGS = {
|
|||
|
||||
// Get lang data
|
||||
var cLang = this.data.appLanguage,
|
||||
fileLocation = `${APP.settings.data.nwPath}/Lang/${cLang}.json`;
|
||||
fileLocation = APP.settings.data.nwPath + '/Lang/' + cLang + '.json';
|
||||
|
||||
// Check if lang file exists and if lang isn't english
|
||||
if (cLang !== 'english' && APP.fs.existsSync(fileLocation) === !0){
|
||||
|
||||
// Get selected lang
|
||||
var getLangFile = APP.fs.readFileSync(fileLocation, 'utf-8');
|
||||
var getLangFile = APP.fs.readFileSync(fileLocation, 'utf8');
|
||||
APP.lang.selected = JSON.parse(getLangFile);
|
||||
|
||||
} else {
|
||||
|
||||
// Set english as default lang
|
||||
APP.lang.selected = APP.lang.english;
|
||||
|
||||
APP.lang.selected = APP.lang.english;
|
||||
|
||||
}
|
||||
|
||||
// Update GUI
|
||||
|
@ -202,7 +200,6 @@ temp_SETTINGS = {
|
|||
// Check paths
|
||||
checkPaths: function(){
|
||||
|
||||
// Create main vars
|
||||
var logMessage = '',
|
||||
mainPath = this.data.nwPath,
|
||||
pathList = ['/Emu', '/Games', '/Lang'];
|
||||
|
@ -217,19 +214,19 @@ temp_SETTINGS = {
|
|||
} catch (err) {
|
||||
APP.log(APP.lang.getVariable(settingsErrorCreatePath, [mainPath + cPath, err]));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Set Games / Emu paths and check if both exists
|
||||
if (this.data.gamePath === '' && APP.fs.existsSync(this.data.gamePath) === !1){
|
||||
APP.settings.data.gamePath = `${mainPath}/Games`;
|
||||
APP.settings.data.gamePath = mainPath + '/Games';
|
||||
}
|
||||
|
||||
// fpPS4 path
|
||||
if (this.data.emuPath === '' || APP.fs.existsSync(this.data.emuPath) === !1){
|
||||
APP.settings.data.emuPath = `${mainPath}/Emu/fpPS4.exe`;
|
||||
APP.settings.data.emuPath = mainPath + '/Emu/fpPS4.exe';
|
||||
}
|
||||
|
||||
// If fpPS4 is not found, reset latest commit sha and request update
|
||||
|
@ -237,6 +234,7 @@ temp_SETTINGS = {
|
|||
|
||||
// Set flag to skip update check on window.onload
|
||||
APP.emuManager.update.skipLoadingCheck = !0;
|
||||
|
||||
this.data.latestCommitSha = '';
|
||||
APP.emuManager.update.check();
|
||||
|
||||
|
@ -246,6 +244,8 @@ temp_SETTINGS = {
|
|||
if (this.data.latestCommitSha !== ''){
|
||||
APP.log(APP.lang.getVariable('settingsLogEmuSha', [APP.settings.data.latestCommitSha.slice(0, 7)]));
|
||||
}
|
||||
|
||||
// Log message
|
||||
APP.log(logMessage);
|
||||
|
||||
},
|
||||
|
@ -276,11 +276,13 @@ temp_SETTINGS = {
|
|||
|
||||
// Set display mode from buttons
|
||||
setDisplayMode: function(cMode){
|
||||
|
||||
|
||||
if (cMode !== void 0){
|
||||
|
||||
// Update display mode and clear previous search
|
||||
|
||||
// Update display mode
|
||||
this.data.gameListMode = cMode;
|
||||
|
||||
// Clear previous search
|
||||
document.getElementById('INPUT_gameListSearch').value = '';
|
||||
|
||||
// Render GUI
|
||||
|
@ -312,11 +314,11 @@ temp_SETTINGS = {
|
|||
gList.forEach(function(cGame){
|
||||
|
||||
// Check if settings file exists
|
||||
if (APP.fs.existsSync(`${APP.path.parse(APP.gameList.list[cGame].exe).dir}/launcherSettings.json`) === !0){
|
||||
if (APP.fs.existsSync(APP.path.parse(APP.gameList.list[cGame].exe).dir + '/launcherSettings.json') === !0){
|
||||
|
||||
try {
|
||||
|
||||
APP.fs.unlinkSync(`${APP.path.parse(APP.gameList.list[cGame].exe).dir}/launcherSettings.json`);
|
||||
APP.fs.unlinkSync(APP.path.parse(APP.gameList.list[cGame].exe).dir + '/launcherSettings.json');
|
||||
cMessage = APP.lang.getVariable('settingsRemovedGameSettings', [APP.gameList.list[cGame].name]);
|
||||
|
||||
} catch (err) {
|
||||
|
|
|
@ -11,7 +11,7 @@ temp_TOOLS = {
|
|||
|
||||
// Solve Hex
|
||||
solveHex: function(hex){
|
||||
|
||||
|
||||
if (hex !== void 0){
|
||||
return hex.toLowerCase().replace(RegExp(' ', 'gi'), '');
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ temp_TOOLS = {
|
|||
|
||||
var textValue = '';
|
||||
if (hex !== void 0 && hex !== ''){
|
||||
textValue = decodeURIComponent(`%${hex.match(/.{2,2}/g).join('%')}`);
|
||||
textValue = decodeURIComponent('%' + hex.match(/.{2,2}/g).join('%'));
|
||||
}
|
||||
|
||||
return textValue;
|
||||
|
@ -55,7 +55,7 @@ temp_TOOLS = {
|
|||
if (current !== void 0 && maximum !== void 0){
|
||||
res = Math.floor((current / maximum) * 100);
|
||||
}
|
||||
|
||||
|
||||
return res;
|
||||
|
||||
},
|
||||
|
|
|
@ -13,21 +13,16 @@ temp_EMU_UPDATE = {
|
|||
// Skip main loading call
|
||||
skipLoadingCheck: !1,
|
||||
|
||||
// Log fetch error
|
||||
logFetchError: function(msg){
|
||||
const errMsg = APP.lang.getVariable(msg);
|
||||
document.getElementById('BTN_UPDATE_FPPS4').disabled = '';
|
||||
console.error(errMsg);
|
||||
APP.log(errMsg);
|
||||
},
|
||||
|
||||
// Fetch data from url
|
||||
fetchData: async function(url, callback){
|
||||
|
||||
// If url was provided
|
||||
if (url !== void 0 && APP.webConnection === !0 && typeof callback === 'function'){
|
||||
if (url !== void 0 && navigator.onLine === !0 && typeof callback === 'function'){
|
||||
|
||||
// Get error message and fetch data
|
||||
// Get error message
|
||||
const errMsg = APP.lang.getVariable('updateEmuFetchActionsError');
|
||||
|
||||
// Fetch data
|
||||
fetch(url).then(function(resp){
|
||||
|
||||
// Check if fetch status is ok
|
||||
|
@ -38,12 +33,14 @@ temp_EMU_UPDATE = {
|
|||
});
|
||||
|
||||
} else {
|
||||
APP.emuManager.update.logFetchError('updateEmuFetchActionsError');
|
||||
|
||||
// If launcher can't get data, log error and reset button
|
||||
document.getElementById('BTN_UPDATE_FPPS4').disabled = '';
|
||||
console.error(errMsg);
|
||||
APP.log(errMsg);
|
||||
|
||||
}
|
||||
|
||||
}, function(err){
|
||||
APP.emuManager.update.logFetchError('updateEmuFetchActionsError');
|
||||
console.error(err);
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -56,21 +53,24 @@ temp_EMU_UPDATE = {
|
|||
// Process workflows
|
||||
const processWorkflows = function(data){
|
||||
|
||||
// Create variables and check if data was provided
|
||||
var htmlTemp = `<option disabled>${APP.lang.getVariable('updater_noWorkflowListAvailable')}</option>`;
|
||||
// Variables
|
||||
var htmlTemp = '<option disabled>' + APP.lang.getVariable('updater_noWorkflowListAvailable') + '</option>';
|
||||
|
||||
// Check if data is provided
|
||||
if (data !== void 0){
|
||||
|
||||
// Reset html temp and process workflow list
|
||||
// Reset html temp
|
||||
htmlTemp = '';
|
||||
|
||||
// Process workflow list
|
||||
data.workflows.forEach(function(cData){
|
||||
htmlTemp = `${htmlTemp}<option value="${cData.name}">${cData.name}</option>`;
|
||||
htmlTemp = htmlTemp + '<option value="' + cData.name + '">' + cData.name + '</option>';
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// Append HTML
|
||||
document.getElementById('SELECT_settingsUpdaterCurrentCI').innerHTML = htmlTemp;
|
||||
document.getElementById('SELECT_settingsUpdaterCurrentCI').value = APP.settings.data.fpps4selectedCI;
|
||||
|
||||
}
|
||||
|
||||
|
@ -85,12 +85,13 @@ temp_EMU_UPDATE = {
|
|||
});
|
||||
|
||||
} else {
|
||||
APP.emuManager.update.logFetchError('updateEmuFetchActionsError');
|
||||
|
||||
// If launcher can't get data, log error and reset button
|
||||
console.error(errMsg);
|
||||
APP.log(errMsg);
|
||||
|
||||
}
|
||||
|
||||
}, function(err){
|
||||
APP.emuManager.update.logFetchError('updateEmuFetchActionsError');
|
||||
console.error(err);
|
||||
});
|
||||
|
||||
},
|
||||
|
@ -120,45 +121,42 @@ temp_EMU_UPDATE = {
|
|||
// If Emu updates is available, has internet and fpPS4 isn't running
|
||||
if (APP.settings.data.enableEmuUpdates === !0 && navigator.onLine === !0 && APP.emuManager.emuRunning === !1){
|
||||
|
||||
// Disable check for updates emu and fetch workflow list
|
||||
// Disable check for updates emu
|
||||
document.getElementById('BTN_UPDATE_FPPS4').disabled = 'disabled';
|
||||
|
||||
// Fetch worflow list
|
||||
fetchData(workflowLink, function(data){
|
||||
|
||||
// Set json and declare variables
|
||||
// Set json
|
||||
options['wList'] = data;
|
||||
|
||||
// Variables
|
||||
var sWorkflow,
|
||||
wList = options.wList.workflows;
|
||||
|
||||
// Fix empty ci
|
||||
if (APP.settings.data.fpps4selectedCI === ''){
|
||||
APP.settings.data.fpps4selectedCI = 'Main CI';
|
||||
// Seek selected ci
|
||||
for (var i = 0; i < wList.length; i++){
|
||||
if (wList[i].name === APP.settings.data.fpps4selectedCI){
|
||||
sWorkflow = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if workflow list has items
|
||||
if (wList.length !== 0){
|
||||
// Get workflow runs
|
||||
if (sWorkflow !== void 0){
|
||||
|
||||
// Seek selected ci
|
||||
for (var i = 0; i < wList.length; i++){
|
||||
if (wList[i].name === APP.settings.data.fpps4selectedCI){
|
||||
sWorkflow = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if workflow was found. If not, use first available!
|
||||
if (sWorkflow === void 0){
|
||||
sWorkflow = 0;
|
||||
APP.log(APP.lang.getVariable('updateEmuSettingsWorkflow404', [APP.settings.data.fpps4selectedCI, wList[sWorkflow]]));
|
||||
}
|
||||
fetchData(`${workflowLink}/${wList[sWorkflow].id}/runs`, function(data){
|
||||
fetchData(workflowLink + '/' + wList[sWorkflow].id + '/runs', function(data){
|
||||
options['runs'] = data;
|
||||
APP.emuManager.update.processActions(options);
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
// If not found, log it
|
||||
const errMsg = APP.lang.getVariable('updateEmuWorkflow404');
|
||||
console.error(errMsg);
|
||||
APP.log(errMsg);
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -179,18 +177,23 @@ temp_EMU_UPDATE = {
|
|||
artifactData,
|
||||
canPrompt = !0,
|
||||
canUpdate = !1,
|
||||
latestCommit = '',
|
||||
msgMode = 'confirm',
|
||||
settingsData = APP.settings.data;
|
||||
|
||||
// Seek for latest success run
|
||||
for (var i = 0; i < options.runs.workflow_runs.length; i++){
|
||||
|
||||
// Get current run data, check if status is completed (with a success build) and if is from same branch
|
||||
// Get current run data
|
||||
const cRun = options.runs.workflow_runs[i];
|
||||
|
||||
// Check if status is completed (with a success build) and it is from same branch
|
||||
if (cRun.status === 'completed' && cRun.conclusion === 'success' && cRun.head_branch === settingsData.fpps4BranchName){
|
||||
|
||||
// Set canUpdate on and run info
|
||||
// Set can update on
|
||||
canUpdate = !0;
|
||||
|
||||
// Set run info
|
||||
artifactData = {
|
||||
artifact: cRun.id,
|
||||
sha: cRun.head_sha
|
||||
|
@ -220,7 +223,7 @@ temp_EMU_UPDATE = {
|
|||
if (options.silent === !0){
|
||||
canPrompt = !1;
|
||||
}
|
||||
|
||||
|
||||
// User already have latest version
|
||||
if (settingsData.latestCommitSha === artifactData.sha && APP.fs.existsSync(settingsData.emuPath) === !0){
|
||||
|
||||
|
@ -262,24 +265,27 @@ temp_EMU_UPDATE = {
|
|||
// If (by some reason) fpPS4 is running - close it!
|
||||
APP.emuManager.killEmu();
|
||||
|
||||
// Display GUI and start download
|
||||
// Display GUI
|
||||
APP.design.toggleEmuUpdateGUI('show');
|
||||
APP.design.updateProgressbarStatus(25, APP.lang.getVariable('updateEmu-1-4', [actionsData.sha.slice(0, 7)]));
|
||||
fetch(`https://nightly.link/red-prig/fpPS4/actions/runs/${actionsData.artifact}/fpPS4.zip`).then(function(resp){
|
||||
|
||||
// Start download
|
||||
fetch('https://nightly.link/red-prig/fpPS4/actions/runs/' + actionsData.artifact + '/fpPS4.zip').then(function(resp){
|
||||
|
||||
if (resp.ok === !0){
|
||||
|
||||
APP.https.get(resp.url, function(data){
|
||||
|
||||
const
|
||||
fPath = `${APP.settings.data.nwPath}/Emu/fpPS4.zip`,
|
||||
const fPath = APP.settings.data.nwPath + '/Emu/fpPS4.zip',
|
||||
writeStream = APP.fs.createWriteStream(fPath);
|
||||
|
||||
data.pipe(writeStream);
|
||||
writeStream.on('finish', function(){
|
||||
|
||||
// Close writestream and extract emu executable
|
||||
// Close writestream
|
||||
writeStream.close();
|
||||
|
||||
// Extract emu executable
|
||||
APP.emuManager.update.extractZip({
|
||||
actions: actionsData,
|
||||
path: fPath
|
||||
|
@ -303,17 +309,21 @@ temp_EMU_UPDATE = {
|
|||
// Extract zip
|
||||
extractZip: function(data){
|
||||
|
||||
// Update status, open and extract zip file
|
||||
// Update status
|
||||
APP.design.updateProgressbarStatus(50, APP.lang.getVariable('updateEmu-2-4'));
|
||||
|
||||
// Open and extract zip file
|
||||
const updateFile = new APP.streamZip.async({ file: data.path });
|
||||
updateFile.extract(null, `${APP.path.parse(data.path).dir}/`, function(err){
|
||||
updateFile.extract(null, APP.path.parse(data.path).dir + '/', function(err){
|
||||
if (err){
|
||||
console.error(err);
|
||||
}
|
||||
}).then(function(){
|
||||
|
||||
// Close zip and finish process
|
||||
// Close zip
|
||||
updateFile.close();
|
||||
|
||||
// Finish process
|
||||
APP.emuManager.update.finish(data);
|
||||
|
||||
});
|
||||
|
@ -323,23 +333,30 @@ temp_EMU_UPDATE = {
|
|||
// Finish process
|
||||
finish: function(data){
|
||||
|
||||
// Update status, remove download file and update settings
|
||||
// Update status
|
||||
APP.design.updateProgressbarStatus(75, APP.lang.getVariable('updateEmu-3-4'));
|
||||
APP.fs.unlinkSync(data.path);
|
||||
APP.settings.data.latestCommitSha = data.actions.sha;
|
||||
APP.settings.data.emuPath = `${APP.path.parse(data.path).dir}/fpPS4.exe`;
|
||||
|
||||
// Save settings and update progressbar
|
||||
// Remove download file
|
||||
APP.fs.unlinkSync(data.path);
|
||||
|
||||
// Update settings
|
||||
APP.settings.data.latestCommitSha = data.actions.sha;
|
||||
APP.settings.data.emuPath = APP.path.parse(data.path).dir + '/fpPS4.exe';
|
||||
|
||||
// Save settings
|
||||
APP.settings.save();
|
||||
|
||||
// Display success message
|
||||
const processCompleteMsg = APP.lang.getVariable('updateEmuProcessComplete', [data.actions.sha.slice(0, 7)]);
|
||||
APP.design.updateProgressbarStatus(100, APP.lang.getVariable('updateEmu-4-4'));
|
||||
|
||||
// Timing out just to update GUI
|
||||
setTimeout(function(){
|
||||
|
||||
// Display message and hide update gui
|
||||
APP.log(processCompleteMsg);
|
||||
window.alert(processCompleteMsg);
|
||||
|
||||
// Hide update gui
|
||||
APP.design.toggleEmuUpdateGUI('hide');
|
||||
|
||||
}, 410);
|
||||
|
|
184
Lang/Ar-ar.json
|
@ -1,184 +0,0 @@
|
|||
{
|
||||
|
||||
"lang": "العربية (Ar-ar)",
|
||||
|
||||
"variables": {
|
||||
"labelEnableHack": "تفعيل",
|
||||
"emuStatusRunning": "قيد التشغيل",
|
||||
"logWindowTitle": "قيد التشغيل fpPS4",
|
||||
"killEmuStatus": "العملية الرئيسية اغلقت - اغلق النافذة للرجوع",
|
||||
"logCleared": " معلومة - السجل السابق تم حذفه",
|
||||
"about": "fpPS4 Temmie's Launcher - اصدار: %VARIABLE_0%\\n\\تم انشائه بواسطة TheMitoSan\\n(https://twitter.com/themitosan)\\n\\nfpPS4 تم انشائه بواسطة red-prig\\n(https://github.com/red-prig/fpPS4)\\n\\nplug-in memoryjs تم انشائه بواسطة Rob--\\n(https://github.com/rob--/memoryjs)\\n\\nplug-in node-stream-zip تم انشائه بواسطة antelle \\n(https://github.com/antelle/node-stream-zip)\\n\\n تم الحصول عليها من خلال SVGايقونات ال https://www.svgrepo.com/",
|
||||
"mainLog": "fpPS4 Temmie's Launcher - اصدار: %VARIABLE_0%\nيعمل بواسطة nw.js (node-webkit) اصدار %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "خطأ - لايمكن انشاء مسار!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
"settingsErrorfpPS4NotFound": "خطأ - لا يمكن العثور على ملف التشغيل fpPS4\nتأكد من اختيار الملف من الاعدادات او وضعه في \"Emu\" ملف و اضغط ok.",
|
||||
"settingsConfirmRemoveAllGameSettings": "تحذير - هذا الخيار سيقوم بحذف جميع الاعدادات المخزنة من قائمة الالعاب\nهل تود في الاستمرار؟",
|
||||
"settingsConfirmRemoveGameSettings": "تحذير - هذا الخيار سيقوم بحذف جميع الاعدادت ل %VARIABLE_0%\\n\\هل تود بالاستمرار؟",
|
||||
"settingsRemovedGameSettings": "معلومة - ( %VARIABLE_0% ) تمت ازالة ملف الاعدادات بنجاح",
|
||||
"settingsRemoveGameSettingsError": "خطأ - ( %VARIABLE_0% ) لا يمكن ازالة ملف الاعدادات\nالسبب: %VARIABLE_1%",
|
||||
"settingsRemoveGameSettings404": "تحذير - ( %VARIABLE_0% ) لايمكن العثور على ملف الاعدادات لهذا التطبيق",
|
||||
"infoProcessComplete": "معلومة - تمت العملية بنجاح\nانظر للسجل للمزيد من المعلومات",
|
||||
"infoSettingsUpdated": "معلومة - تم تحديث ملف الاعدادات بنجاح",
|
||||
"settingsLoadError": "خطأ - لايمكن تشغيل ملف الاعدادات\n %VARIABLE_0%",
|
||||
"settingsSaveError": "خطأ - لا يمكن تخزين ملف الاعدادات\n %VARIABLE_0%",
|
||||
"runEmuArgs": "معلومة - تشغيل fpPS4 بargs: %VARIABLE_0%\nموقع المحاكي: %VARIABLE_1%",
|
||||
"closeEmuStatus": "معلومة - %VARIABLE_0% تم اغلاقه, ارجاع كود %VARIABLE_1%",
|
||||
"removedLibModules": "معلومة - جميع الوحدات السابقة المستخرجة باستخدام هذا المشغل تمت ازالتها لانها قد تؤثر على لعبتك المستخرجة",
|
||||
"removeLibModule": "معلومة - ( %VARIABLE_0% ) ازالة الوحدة: %VARIABLE_1%",
|
||||
"removeModuleError": "خطأ - لا يمكن ازالة الوحدات\nMotivo: %VARIABLE_0%",
|
||||
"updateGameSettings": "معلومة - ( %VARIABLE_0% ) تم تحديث ملف الاعدادات بنجاح",
|
||||
"updateGameSettingsError": "خطأ - تعذر تحديث الاعدادت ل %VARIABLE_0% in %VARIABLE_1%!\nالسبب: %VARIABLE_2%",
|
||||
"skipUpdateGameSettings": "معلومة - ( %VARIABLE_0% ) تخطي تحديث ملف الاعدادات لعدم وجود تغيير",
|
||||
"errorSaveFile": "خطأ - تعذر تخزين الملف\nالسبب: %VARIABLE_0%",
|
||||
"saveSucessfullPath": "معلومة - تم التخزين بنجاح\nمسار: %VARIABLE_0%",
|
||||
"createdSettingsFile": "معلومة - ( %VARIABLE_0% ) تم انشاء ملف الاعدادات بنجاح",
|
||||
"errorCreateSettingsFile": "خطأ - لا يمكن انشاء ملف الاعدادات ل %VARIABLE_0% in %VARIABLE_1%!\nالسبب: %VARIABLE_2%",
|
||||
"patchLoadedSucessfully": "معلومة - تم تحميل التحديث بنجاح\nاسم: %VARIABLE_0%\nنوع: %VARIABLE_1%",
|
||||
"patchLoadErrorMismatch": "خطأ - هذا ليس تحديث او لا يتطابق مع هذا البرنامج/لعبة\nمعرف التحديث: %VARIABLE_0%\nالتطبيق - اللعبة المختارة: %VARIABLE_1%",
|
||||
"patchLoadErrorParamSfo404": "خطأ - لايمكن العثور على PARAM.SFO لهذا التحديث",
|
||||
"gameListLoadWarnPlayGo": "تحذير - لايمكن العثور على playgo-chunk.dat ل %VARIABLE_0%!\nاذا لم يكن التطبيق home brew تاكد من انه تم استخراجه بطريقة صحيحة",
|
||||
"gameListLoadWarnParamSfo": "تحذير - لايمكن العثور على %VARIABLE_0% PARAM.SFO!\nاذا لم يكن التطبيق home brew تاكد من انه تم استخراجه بطريقة صحيحة",
|
||||
"gameListDoubleIdError": "تحذير - لا يمكن اضافة %VARIABLE_0% الى قائمة الالعاب لوجود تطبيق اخر بنفس الرقم التسلسلي (%VARIABILE_1%)",
|
||||
"gameListNoGameFound": "معلومة - لم يتم العثور على العاب او تطبيقات على المسار المختار ( %VARIABLE_0% )",
|
||||
"gameListSearch404": "لا يمكن العثور",
|
||||
"checkDumpPlayGoOnApp": "معلومة - ( %VARIABLE_0% ) playgo-chunk.dat تم العثور عليه داخل sce_sys/app - تم انشاء نسخة جديدة في sce_sys.",
|
||||
"gameListLoadSuccessful": "معلومة - تم تحميل قائمة الاعاب بنجاح ( %VARIABLE_0% العاب موجودة )",
|
||||
"gameListVersion": "اصدار",
|
||||
"selectGameLoadPatchErrorParamSfo": "خطأ - لا يمكن قرائة PARAM.SFO من هذا التحديث\n%VARIABLE_0%",
|
||||
"path": "مسار",
|
||||
"gamelistGamePath404": "خطأ - لايمكن العثور على مسار التطبيقات او الالعاب\n%VARIABLE_0%",
|
||||
"updateEmuFetchActionsError": "Github خطأ - لا يمكن جلب معلومات اجرائات ",
|
||||
"updateEmuIsLatestVersion": "معلومة - انت تستعمل احدث اصدار من fpPS4\nID commit (SHA): %VARIABLE_0%",
|
||||
"updateEmuShaAvailable": "معلومة - يوجد تحديث جديد\n\nالاصدار الموجود: %VARIABLE_0%\nالاصدار الجديد: %VARIABLE_1%\n\nهل تود بالتحديث؟",
|
||||
"updateEmuShaUnavailable": "معلومة - المشغل اكتشف انك لم تقم بتحديث fpPS4\n(او ان ملف تشغيل fpPS4 لم يكن موجود)\n\nيمكنك اصلاح هذا الخطأ من خلال fpPS4 updater\n\nهل تود بالاستمرار؟",
|
||||
"updateEmuDownloadFailed": "خطأ - لا يمكن تنزيل تحديث fpPS4\nحالة الاستجابة: %VARIABLE_0% - OK: %VARIABLE_1%",
|
||||
"updateEmuProcessComplete": "معلومة - تم التحديث بنجاح\nتحديث جديد (ID commit / SHA): %VARIABLE_0%",
|
||||
"updateEmu-1-4": "تنزيل تحديث fpPS4 (<label class=\"LABEL_monospace\">%VARIABLE_0%</label>)",
|
||||
"updateEmu-2-4": "استخراج التحديث",
|
||||
"updateEmu-3-4": "ازالة بواقي الملفات",
|
||||
"updateEmu-4-4": "تم التحديث بنجاح",
|
||||
"settingsLogEmuSha": "معلومة - اصدار fpPS4: (%VARIABLE_0%)",
|
||||
"dumpStatus_OK": "جيد",
|
||||
"dumpStatus_WARN": "ملفات مفقودة",
|
||||
"dumpStatus_HB": "Homebrew",
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": "لم يتم العثور على قائمة workflow",
|
||||
"Sdl2NotFound": "",
|
||||
"errorListUnableLocateGamePath": "",
|
||||
"updateEmuSettingsWorkflow404": "",
|
||||
"nonWindowsOsWarn": "",
|
||||
"cGameCompatStatus_BOOTS": "",
|
||||
"cGameCompatStatus_MENUS": "",
|
||||
"cGameCompatStatus_INGAME": "",
|
||||
"cGameCompatStatus_UNKNOWN": "",
|
||||
"cGameCompatStatus_NOTHING": "",
|
||||
"cGameCompatStatus_PLAYABLE": "",
|
||||
"warnUnableFindGameCompatDb": "",
|
||||
"warnUserOffline": ""
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
"INPUT_gameListSearch": {"placeholder": "البحث: اسم اللعبة", "value": ""}
|
||||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "اخضر: جميع الملفات موجودة\nاصفر: بعض الملفات مفقودة تأكد من السجل للمزيد من المعلومات\nسماوي: الملف من صيغة .elf",
|
||||
"DIV_selectedGameStatus_compat": ""
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
||||
"DIV_SETTINGS_TITLE": "الاعدادات",
|
||||
"DIV_SETTINGS_LANGUAGE": "اللغة",
|
||||
"LABEL_SETTINGS_CURRENT_LANGUAGE": "اللغة المختارة",
|
||||
"LABEL_SETTINGS_LANGUAGE_RESTART": "يجب اعادة تشغيل المشغل لتطبيق التغييرات",
|
||||
"DIV_SETTINGS_PATHS": "الملفات المحلية",
|
||||
"LABEL_SETTINGS_APP_GAMES_PATH": "موقع التطبيقات - العاب",
|
||||
"LABEL_SETTINGS_FPPS4_PATH": "موقع fpPS4",
|
||||
"DIV_SETTINGS_GAME_LIST": "قائمة الالعاب - التطبيقات",
|
||||
"LABEL_SETTINGS_GRID_BORDER_RADIUS": "مدى دائرية اطارات الالعاب",
|
||||
"LABEL_SETTINGS_GAME_SEARCH_MODE": "طريقة البحث",
|
||||
"LABEL_SETTINGS_GAME_LIST_BACKGROUND_BLUR": "تمويه الخلفية",
|
||||
"LABEL_SETTINGS_GAME_LIST_BACKGROUND_OPACITY": "عتمة الخلفية",
|
||||
"LABEL_SETTINGS_GAME_LIST_SEARCH_CASE_SENSITIVE": "تفعيل البحث الحساس (case-sensitive)",
|
||||
"LABEL_SETTINGS_GAME_LIST_NORMAL_SHOW_BG": "اظهار الخلفية لكل الالعاب و التطبيقات في القائمة",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GAME_ENTRY": "اظهار الملفات الوصفية او الموقع تحت كل لعبة وتطبيق في القائمة",
|
||||
"DIV_SETTINGS_EMU_RUNNING": "ملفات المحاكي",
|
||||
"LABEL_SETTINGS_EMU_RUNNING_BACKGROUND_BLUR": "تمويه الخلفية",
|
||||
"LABEL_SETTINGS_EMU_RUNNING_BACKGROUND_OPACITY": "عتمة الخلفية",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_EMU_RUNNING": "اظهار الملفات الوصفية او الموقع تحت كل لعبة وتطبيق في القائمة",
|
||||
"DIV_SETTINGS_LOG_OPTIONS": "اعدادات السجل",
|
||||
"LABEL_SETTINGS_LOG_START_WINDOW_STATE": "بدء نافذة السجل",
|
||||
"LABEL_SETTINGS_PROMPT_KEY_FPPS4_CLOSES": "طلب من المستخدام الضعط على اي زر عند اغلاق المحاكي",
|
||||
"DIV_SETTINGS_MISC": "الاعدادات الاخرى",
|
||||
"LABEL_SETTINGS_ENABLE_PARAMSFO_SUPPORT": "دعم ملفات <code>PARAM.SFO</code> (اضغط على حذف الاعدادات من جميع الالعاب و التطبيقات و اعد تشغيل المحاكي)",
|
||||
"LABEL_SETTINGS_REMOVE_PROJECT_GP4_FILES": "ازالة <code>Project.gp4</code> من اي لعبة عند تحميل القائمة",
|
||||
"LABEL_FPPS4_OPTIONS": "اعدادات <label class=\"LABEL_emuColor\">fp</label>PS4",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "حال الاستخراجة",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "تفعيل التحديثات",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "اصدار",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "نوع",
|
||||
"LABEL_EMU_RUNNING_STATUS": "الحالة",
|
||||
"LABEL_FPPS4_OPTIONS_APP_VERSION": "اصدار",
|
||||
"LABEL_FPPS4_OPTIONS_LAUNCHER_OPTIONS": "اعدادات المشغل",
|
||||
"LABEL_FPPS4_OPTIONS_HACKS": "هاكات",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GUI": "اظهار الايقونة وواجهة المستخدم الرسومية خلال عمل المحاكي",
|
||||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">تجريبي</label> تسجيل نتائج fpPS4 (<code>stdout</code> و <code>stderr</code>) في السجل الداخلي (F12 اضغط--> Console)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "محدث fpPS4",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "تفعيل محدث fpPS4",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "الحصول على التحديثات من branch",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": "الحالة",
|
||||
"DIV_SETTINGS_GENERAL": "عام",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "تكبير الواجهة",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "تحذير: لا ينصح بتغيير هذا الاعداد اذا كانت شاشتك وضوحها اقل من <code>1920x1080</code>",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "تشغيل المحاكي في نظام ملء الشاشة",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": ""
|
||||
|
||||
},
|
||||
|
||||
"select": {
|
||||
|
||||
"SELECT_settingsSearchMode": {
|
||||
"appName": "الأسم",
|
||||
"titleId": "الرقم التسلسلي"
|
||||
},
|
||||
"SELECT_settingsStartExternalWindow": {
|
||||
"normal": "طبيعي",
|
||||
"max": "مكبر",
|
||||
"min": "مصغر"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "xinput",
|
||||
"sdl2": "sdl2",
|
||||
"keyboard": "Keyboard"
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"value": {
|
||||
|
||||
"BTN_SETTINGS_SELECT_APPS_GAMES_PATH": "اختار الملف",
|
||||
"BTN_SETTINGS_OPEN_APPS_GAMES_PATH": "افتح الملف",
|
||||
"BTN_SETTINGS_SELECT_FPPS4_PATH": "اختار executable",
|
||||
"BTN_SETTINGS_DELETE_ALL_GAME_SETTINGS": "حذف الاعدادات من جميع الالعاب و التطبيقات",
|
||||
"BTN_SETTINGS_APPLY_CLOSE": "تطبيق و غلق",
|
||||
"BTN_SETTINGS_CLOSE": "الرجوع",
|
||||
"BTN_REFRESH": "تحديث القائمة",
|
||||
"BTN_SETTINGS": "الاعدادات",
|
||||
"BTN_CLEAR_LOG": "حذف السجل",
|
||||
"BTN_ABOUT": "آخر",
|
||||
"BTN_KILL": "ايقاف fpPS4",
|
||||
"BTN_FPPS4_OPTIONS_SELECT_PATCH_LOCATION": "اختار التحديث",
|
||||
"BTN_FPPS4_OPTIONS_OPEN_APP_LOCATION": "فتح موقع الالعاب والتطبيقات",
|
||||
"BTN_FPPS4_OPTIONS_RESET_SETTINGS": "اعادة تعيين الاعدادات",
|
||||
"BTN_launcherOptionsExportMetadata": "استخراج البيانات الوصفية",
|
||||
"BTN_RUN": "تشغيل fpPS4",
|
||||
"BTN_SETTINGS_RESTART_LAUNCHER": "اعادة تشغيل المشغل",
|
||||
"BTN_UPDATE_FPPS4": "تحديث fpPS4",
|
||||
"BTN_SETTINGS_FORCE_FPPS4_UPDATE": "فرض التحديث"
|
||||
|
||||
}
|
||||
}
|
|
@ -9,6 +9,4 @@ I would like to thank everyone who contributed to the translation of this projec
|
|||
- Italian: [Dan Adrian Radut (Aka. B8nee)](https://github.com/B8nee)
|
||||
- Japanese: [mktm235](https://github.com/mktm235)
|
||||
- Ukrainian: [ArtemVideoGames](https://github.com/ArtemVideoGames) _(Revision by ThatSameGuy)_
|
||||
- Dutch: [MrSn0wy](https://github.com/MrSn0wy)
|
||||
- Arabic: [Shrvzr](https://github.com/Shrvzr)
|
||||
- Turkish: [phyesix](https://github.com/phyesix)
|
||||
- Dutch: [MrSn0wy](https://github.com/MrSn0wy)
|
|
@ -61,21 +61,8 @@
|
|||
"dumpStatus_OK": "Parfait",
|
||||
"dumpStatus_WARN": "Fichiers manquants",
|
||||
"dumpStatus_HB": "Homebrew",
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": "Impossible d'obtenir la liste CI !",
|
||||
"Sdl2NotFound": "Impossible de trouver SDL2.dll dans le dossier Emu, vérifiez s'il est là pour activer \"SDL\".",
|
||||
"errorListUnableLocateGamePath": "ERREUR - Impossible de trouver le dossier de paramètres pour \"%VARIABLE_0%\" ! Pour éviter les erreurs, la liste des applications/jeux a été mise à jour.\nChemin : %VARIABLE_1%",
|
||||
"updateEmuSettingsWorkflow404": "ERREUR - (Updater) Impossible de trouver le flux de travail %VARIABLE_0%! Le flux de travail %VARIABLE_1% sera utilisé à la place.",
|
||||
"nonWindowsOsWarn": "AVERTISSEMENT - Vous exécutez le lanceur fpPS4 Temmie sur un système non-Windows !\n\nPour démarrer fpPS4, vous devez avoir Wine installé sur votre système.\n\nDe plus, gardez à l'esprit que l'exécution de la couche de compatibilité à l'aide d'outils comme Wine peut (et probablement causera) des problèmes, fonctionnant avec moins de performances que prévu.",
|
||||
"cGameCompatStatus_BOOTS": "Démarre",
|
||||
"cGameCompatStatus_MENUS": "Menu principal",
|
||||
"cGameCompatStatus_INGAME": "En jeu",
|
||||
"cGameCompatStatus_UNKNOWN": "Inconnu",
|
||||
"cGameCompatStatus_NOTHING": "Rien",
|
||||
"cGameCompatStatus_PLAYABLE": "Jouable",
|
||||
"warnUnableFindGameCompatDb": "AVERTISSEMENT - Impossible d'obtenir des informations sur \"%VARIABLE_0%\" (%VARIABLE_1%) dans la base de données de compatibilité des fpPS4 !",
|
||||
"warnUserOffline": "AVERTISSEMENT - Vous êtes hors ligne ! Certaines fonctionnalités (comme l'obtention de l'état de compatibilité et la mise à jour de fpPS4) ne seront pas disponibles tant que vous ne serez pas connecté à Internet."
|
||||
|
||||
"updateEmuWorkflow404": "ERRO - (Mise à jour) N'a pas pu localiser une sélection CI dans la liste des flux de travail de GitHub !",
|
||||
"updater_noWorkflowListAvailable": "Impossible d'obtenir la liste CI !"
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
|
@ -83,8 +70,7 @@
|
|||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "Vert: tous les fichiers sont présents\nJaune: certains fichiers sont manquants - consultez le journal pour plus de détails\nCyan: l'exécutable est un fichier .elf",
|
||||
"DIV_selectedGameStatus_compat": "Jouable : Peut être joué / exécuté du début à la fin.\nEn jeu : Peut être démarré / exécuté, mais jusqu'à un certain point.\nMenu principal : Le titre peut accéder uniquement au menu principal.\nDémarre : Le titre démarre mais ne parvient pas à atteindre le menu principal.\nRien : Le titre n'affiche aucun graphique, se bloque peu de temps après le démarrage de l'exécution ou n'est pas présent dans la base de données des fpPS4.\nInconnu : Le lanceur fpPS4 Temmie n'a pas pu obtenir d'informations sur ce titre."
|
||||
"DIV_selectedGameStatus": "Vert: tous les fichiers sont présents\nJaune: certains fichiers sont manquants - consultez le journal pour plus de détails\nCyan: l'exécutable est un fichier .elf"
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
@ -117,7 +103,6 @@
|
|||
"LABEL_FPPS4_OPTIONS": "Choix de <label class=\"LABEL_emuColor\">fp</label>PS4",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "Status de dump",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "Activer les correctifs",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "Version",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "Type",
|
||||
"LABEL_EMU_RUNNING_STATUS": "Status",
|
||||
|
@ -133,10 +118,7 @@
|
|||
"DIV_SETTINGS_GENERAL": "Général",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "Taille de l'interface (échelle)",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "Avertissement : La modification de ce paramètre n'est pas recommandée si la résolution de votre écran est inférieure à <code>1920x1080</code>",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Démarrer fpPS4 en mode plein écran",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "Activer la vérification de compatibilité des titres / jeux",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "Possibilité de modifier le code de contrôle (demander <code>SDL2.dll</code>)",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": "(Contrôle) Couleur de LED :"
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Démarrer fpPS4 en mode plein écran"
|
||||
},
|
||||
|
||||
"select": {
|
||||
|
@ -149,11 +131,6 @@
|
|||
"normal": "Normal",
|
||||
"max": "Maximum",
|
||||
"min": "Minimum"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "xinput",
|
||||
"sdl2": "sdl2",
|
||||
"keyboard": "Keyboard"
|
||||
}
|
||||
|
||||
},
|
||||
|
|
|
@ -61,20 +61,8 @@
|
|||
"dumpStatus_OK": "Perfetto",
|
||||
"dumpStatus_WARN": "File mancanti",
|
||||
"dumpStatus_HB": "Homebrew",
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": "Impossibile ottenere l'elenco CI!",
|
||||
"Sdl2NotFound": "",
|
||||
"errorListUnableLocateGamePath": "",
|
||||
"updateEmuSettingsWorkflow404": "",
|
||||
"nonWindowsOsWarn": "",
|
||||
"cGameCompatStatus_BOOTS": "",
|
||||
"cGameCompatStatus_MENUS": "",
|
||||
"cGameCompatStatus_INGAME": "",
|
||||
"cGameCompatStatus_UNKNOWN": "",
|
||||
"cGameCompatStatus_NOTHING": "",
|
||||
"cGameCompatStatus_PLAYABLE": "",
|
||||
"warnUnableFindGameCompatDb": "",
|
||||
"warnUserOffline": ""
|
||||
"updateEmuWorkflow404": "ERRORE - Impossibile trovare l'elemento di configurazione principale nell'elenco dei workflows di fpPS4 su GitHub!",
|
||||
"updater_noWorkflowListAvailable": "Impossibile ottenere l'elenco CI!"
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
|
@ -82,8 +70,7 @@
|
|||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "Verde: sono presenti tutti i file\nGiallo: mancano alcuni file - vedere il log per i dettagli\nCiano: l'eseguibile è un file .elf",
|
||||
"DIV_selectedGameStatus_compat": ""
|
||||
"DIV_selectedGameStatus": "Verde: sono presenti tutti i file\nGiallo: mancano alcuni file - vedere il log per i dettagli\nCiano: l'eseguibile è un file .elf"
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
@ -116,7 +103,6 @@
|
|||
"LABEL_FPPS4_OPTIONS": "Opzioni <label class=\"LABEL_emuColor\">fp</label>PS4",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "Stato di dump",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "Abilitare le patch",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "Versione",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "Tipo",
|
||||
"LABEL_EMU_RUNNING_STATUS": "Stato",
|
||||
|
@ -132,10 +118,7 @@
|
|||
"DIV_SETTINGS_GENERAL": "Generale",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "Dimensione dell'interfaccia (scala)",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "Avviso: la modifica di questa impostazione non è consigliata se la risoluzione dello schermo è inferiore a <code>1920x1080</code>",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Avvia fpPS4 in modalità a schermo intero",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": ""
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Avvia fpPS4 in modalità a schermo intero"
|
||||
|
||||
},
|
||||
|
||||
|
@ -149,11 +132,6 @@
|
|||
"normal": "Normale",
|
||||
"max": "Massimo",
|
||||
"min": "Minimo"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "xinput",
|
||||
"sdl2": "sdl2",
|
||||
"keyboard": "Keyboard"
|
||||
}
|
||||
|
||||
},
|
||||
|
|
|
@ -62,19 +62,7 @@
|
|||
"dumpStatus_WARN": "不完全",
|
||||
"dumpStatus_HB": "自作ソフト(Homebrew)",
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": "",
|
||||
"Sdl2NotFound": "",
|
||||
"errorListUnableLocateGamePath": "",
|
||||
"updateEmuSettingsWorkflow404": "",
|
||||
"nonWindowsOsWarn": "",
|
||||
"cGameCompatStatus_BOOTS": "",
|
||||
"cGameCompatStatus_MENUS": "",
|
||||
"cGameCompatStatus_INGAME": "",
|
||||
"cGameCompatStatus_UNKNOWN": "",
|
||||
"cGameCompatStatus_NOTHING": "",
|
||||
"cGameCompatStatus_PLAYABLE": "",
|
||||
"warnUnableFindGameCompatDb": "",
|
||||
"warnUserOffline": ""
|
||||
"updater_noWorkflowListAvailable": ""
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
|
@ -82,8 +70,7 @@
|
|||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "緑 : すべてのファイルが存在します\n黄 : 一部のファイルが欠落しています-詳細についてはログを確認してください\nシアン : 実行可能ファイルは.elfファイルです",
|
||||
"DIV_selectedGameStatus_compat": ""
|
||||
"DIV_selectedGameStatus": "緑 : すべてのファイルが存在します\n黄 : 一部のファイルが欠落しています-詳細についてはログを確認してください\nシアン : 実行可能ファイルは.elfファイルです"
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
@ -115,7 +102,6 @@
|
|||
"LABEL_FPPS4_OPTIONS": "<label class=\"LABEL_emuColor\">fp</label>PS4 オプション",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "ダンプステータス",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "パッチを有効化",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "バージョン",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "タイプ",
|
||||
"LABEL_EMU_RUNNING_STATUS": "ステータス",
|
||||
|
@ -131,11 +117,7 @@
|
|||
"DIV_SETTINGS_GENERAL": "全般",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "インターフェースのサイズ(スケール)",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "警告 : 画面の解像度が<code>1920x1080</code>未満の場合、この設定を変更することはおすすめしません",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "フルスクリーンでfpPS4を起動",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": ""
|
||||
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "フルスクリーンでfpPS4を起動"
|
||||
},
|
||||
|
||||
"select": {
|
||||
|
@ -148,11 +130,6 @@
|
|||
"normal": "普通",
|
||||
"max": "最大",
|
||||
"min": "最小"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "xinput",
|
||||
"sdl2": "sdl2",
|
||||
"keyboard": "Keyboard"
|
||||
}
|
||||
|
||||
},
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
|
||||
"lang": "Dutch (nl-NL)",
|
||||
|
||||
"variables": {
|
||||
|
@ -60,29 +61,16 @@
|
|||
"dumpStatus_OK": "Prima",
|
||||
"dumpStatus_WARN": "Missende bestanden",
|
||||
"dumpStatus_HB": "Homebrew",
|
||||
"updateEmuWorkflow404": "ERROR - Workflow kan niet geupdate worden!",
|
||||
"updater_noWorkflowListAvailable": "Geen workflow lijst beschikbaar",
|
||||
"Sdl2NotFound": "SDL2.dll is niet gevonden in de Emu map, installeer het om SDL2 te gebruiken.",
|
||||
"errorListUnableLocateGamePath": "ERROR - Kan niet de settings voor \"%VARIABLE_0%\" vinden! Om problemen te voorkomen wordt de spel lijst ververst.\nPad: %VARIABLE_1%",
|
||||
"updateEmuSettingsWorkflow404": "ERROR - Kan %VARIABLE_0% niet vinden in de workflow lijst van fpPS4! %VARIABLE_1% wordt tijdelijk gebruikt.",
|
||||
"nonWindowsOsWarn": "WAARSCHUWING - Je gebruikt fpPS4 Temmie's Launcher op een niet-Windows besturingssysteem!\n\nOm fpPS4 te gebruiken moet je Wine hebben geinstalleerd op je systeem.\n\nWeet dat het uitvoeren van fpps4 met tools zoals Wine kan resulteren in meer problemen en een verminderde snelheid/ervaring.",
|
||||
"cGameCompatStatus_BOOTS": "Opent",
|
||||
"cGameCompatStatus_MENUS": "Menu",
|
||||
"cGameCompatStatus_INGAME": "In-Game",
|
||||
"cGameCompatStatus_UNKNOWN": "Onbekend",
|
||||
"cGameCompatStatus_NOTHING": "Niks",
|
||||
"cGameCompatStatus_PLAYABLE": "Speelbaar",
|
||||
"warnUnableFindGameCompatDb": "WAARSCHUWING - Kon niet de compatibiliteit status vinden voor dit spel \"%VARIABLE_0%\" (%VARIABLE_1%) op de fpPS4 database!",
|
||||
"warnUserOffline": "WAARSCHUWING - Je bent offline! Sommige functies (zoals de compatibiliteit status voor spellen en de updater voor fpPS4) zijn niet beschikbaar todat je weer met het internet verbonden bent."
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": ""
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
"INPUT_gameListSearch": {"placeholder": "Zoeken: Geef een spel naam", "value": ""}
|
||||
"INPUT_gameListSearch": {"placeholder": "Zoeken: Geef een game naam", "value": ""}
|
||||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "Groen: Alle bestanden zijn aanwezig\nGeel: Sommige bestanden ontbreken - Bekijk de logs voor meer details.\nCyaan: Executable is een .elf-bestand",
|
||||
"DIV_selectedGameStatus_compat": "Speelbaar: Deze titel is volledig speelbaar.\nIn-Game Je kunt delen of segmenten spelen, maar je kunt deze titel niet voltooien.\nMenu: Deze titel werkt tot het menu maar kan de rest niet laden.\nOpent: Deze titel start met laden, maar faalt op een gegeven moment.\nNiks: deze titel doet niks\nOnbekend: Er zijn geen gevens over deze titel in de fpPS4 database gevonden."
|
||||
"DIV_selectedGameStatus": "Groen: Alle bestanden zijn aanwezig\nGeel: Sommige bestanden ontbreken - Bekijk de logs voor meer details.\nCyaan: Executable is een .elf-bestand"
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
@ -114,7 +102,6 @@
|
|||
"LABEL_FPPS4_OPTIONS": "<label class=\"LABEL_emuColor\">fp</label>PS4 Opties",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "Dump Status",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "Patches Activeren",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "Selecteer de gamepad modus:",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "Versie",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "Type",
|
||||
"LABEL_EMU_RUNNING_STATUS": "Status",
|
||||
|
@ -122,7 +109,7 @@
|
|||
"LABEL_FPPS4_OPTIONS_LAUNCHER_OPTIONS": "Launcher Instellingen",
|
||||
"LABEL_FPPS4_OPTIONS_HACKS": "Hacks",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GUI": "Toon de pictogram/naam GUI terwijl fpPS4 draaiend is",
|
||||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">EXPERIMENTEEL</label> Log de fpPs4 output (<code>stdout</code> & <code>stderr</code>) in de interne log (Druk op F12 ---> Console)",
|
||||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">EXPERIMENTAL</label> Log de fpPs4 output (<code>stdout</code> & <code>stderr</code>) in de interne log (Druk op F12 ---> Console)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "fpPS4 Updater",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "fpPS4 updater inschakelen",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Zoek updates van de branche",
|
||||
|
@ -130,10 +117,7 @@
|
|||
"DIV_SETTINGS_GENERAL": "Generaal",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "Interface grootte (schaal)",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "Waarschuwing: Het wordt afgeraden deze instelling te wijzigen als uw schermresolutie lager is dan <code>1920x1080</code>",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Start fpPS4 in volledig scherm",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "Activeer de compatibiliteit status voor titels/games",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "Activeer het veranderen van de led kleur voor de gamepad (vereist <code>SDL2.dll</code>)",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": "Gamepad led kleur:"
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Start fpPS4 in volledig scherm"
|
||||
},
|
||||
|
||||
"select": {
|
||||
|
@ -146,11 +130,6 @@
|
|||
"normal": "Normaal",
|
||||
"max": "Gemaximaliseerd",
|
||||
"min": "Geminimaliseerd"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "xinput",
|
||||
"sdl2": "sdl2",
|
||||
"keyboard": "Keyboard"
|
||||
}
|
||||
|
||||
},
|
||||
|
|
|
@ -57,33 +57,20 @@
|
|||
"updateEmu-2-4": "Extraíndo update",
|
||||
"updateEmu-3-4": "Removendo arquivos de sobra",
|
||||
"updateEmu-4-4": "Update concluído!",
|
||||
"settingsLogEmuSha": "INFO - Versão do fpPS4: %VARIABLE_0%",
|
||||
"settingsLogEmuSha": "INFO - Versão do fpPS4: (%VARIABLE_0%)",
|
||||
"dumpStatus_OK": "Perfeito",
|
||||
"dumpStatus_WARN": "Faltam arquivos",
|
||||
"dumpStatus_HB": "Homebrew",
|
||||
"updateEmuWorkflow404": "ERRO - (Updater) Não foi possivel obter a lista de workflows do projeto no GitHub!",
|
||||
"updater_noWorkflowListAvailable": "Não foi possivel obter lista de CI!",
|
||||
"Sdl2NotFound": "Não foi possível encontrar SDL2.dll na pasta Emu!\nVerifique se o mesmo se encontra antes de habilitar \"SDL\".",
|
||||
"errorListUnableLocateGamePath": "ERRO - Não foi possível localizar a pasta de configurações para \"%VARIABLE_0%\"! Para prevenir erros, a lista de Apps / Games foi atualizada.\nCaminho: %VARIABLE_1%",
|
||||
"updateEmuSettingsWorkflow404": "ERRO - (Updater) Não foi possível encontrar a worflow %VARIABLE_0%! A workflow %VARIABLE_1% será usada no lugar.",
|
||||
"nonWindowsOsWarn": "AVSIO - Você está rodando fpPS4 Temmie's Launcher em um sistema não-windows!\n\nPara iniciar fpPS4, você irá precisar ter Wine instalado no seu sistema.\n\nAliás - Tenha em mente que rodar a camada de compatibilidade usando ferramentas como Wine podem (e provavelmente irão) causar glitches, rodar com menos performance do que o esperado.",
|
||||
"cGameCompatStatus_BOOTS": "Inicia",
|
||||
"cGameCompatStatus_MENUS": "Menu Inicial",
|
||||
"cGameCompatStatus_INGAME": "In-Game",
|
||||
"cGameCompatStatus_UNKNOWN": "Desconhecido",
|
||||
"cGameCompatStatus_NOTHING": "Nada",
|
||||
"cGameCompatStatus_PLAYABLE": "Jogável",
|
||||
"warnUnableFindGameCompatDb": "AVISO - Não possível obter informações de \"%VARIABLE_0%\" (%VARIABLE_1%) no banco de dados do fpPS4!",
|
||||
"warnUserOffline": "WARN - Você está offline! Algumas funcionalidades (como obter status de compatibilidade e atualizador do fpPS4) não estarão disponíveis até que você se conecte a internet novamente."
|
||||
"updateEmuWorkflow404": "ERRO - (Updater) Não foi possivel localizar a CI selecionada na lista de workflows do GitHub!",
|
||||
"updater_noWorkflowListAvailable": "Não foi possivel obter lista de CI!"
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
"INPUT_gameListSearch": { "placeholder": "Pesquisa: Nome do título...", "value": "" }
|
||||
"INPUT_gameListSearch": {"placeholder": "Pesquisa: Nome do game...", "value": ""}
|
||||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "Verde: Todos os arquivos estão presentes\nAmarelo: Alguns arquivos estão faltando - veja o log para obter mais detalhes\nCiano: O executável é um arquivo .elf",
|
||||
"DIV_selectedGameStatus_compat": "Jogável: Pode ser jogado / executado do começo ao fim.\nIn-Game: Pode ser iniciado / executado, porém até certo ponto.\nMenu Inicial: O título consegue chegar apenas no menu inicial.\nInicia: O título inicia, sem conseguir chegar ao menu inicial.\nNada: O título não apresenta nenhum gráfico, travando nos primeiros momentos após iniciar a execução ou o mesmo não se encontra no banco de dados do fpPS4.\nDesconhecido: O fpPS4 Temmie's Launcher não conseguiu obter informações sobre esse título."
|
||||
"DIV_selectedGameStatus": "Verde: Todos os arquivos estão presentes\nAmarelo: Alguns arquivos estão faltando - veja o log para obter mais detalhes\nCiano: O executável é um arquivo .elf"
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
@ -116,7 +103,6 @@
|
|||
"LABEL_FPPS4_OPTIONS": "Opções de <label class=\"LABEL_emuColor\">fp</label>PS4",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "Status da dump",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "Habilitar patches",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "Modo de input:",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "Versão",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "Tipo",
|
||||
"LABEL_EMU_RUNNING_STATUS": "Status",
|
||||
|
@ -132,10 +118,7 @@
|
|||
"DIV_SETTINGS_GENERAL": "Geral",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "Tamanho da interface (escala)",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "Aviso: Não é recomendado alterar essa configuração caso sua resolução de tela seja menor que <code>1920x1080</code>",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Iniciar fpPS4 em modo de tela cheia",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "Habilitar verificação de compatibilidade de títulos / games",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "Habilitar opção de alterar cor do controle (requer <code>SDL2.dll</code>)",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": "(Controle) Cor do led:"
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Iniciar fpPS4 em modo de tela cheia"
|
||||
|
||||
},
|
||||
|
||||
|
@ -149,11 +132,6 @@
|
|||
"normal": "Normal",
|
||||
"max": "Maximizado",
|
||||
"min": "Minimizado"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "xinput",
|
||||
"sdl2": "sdl2",
|
||||
"keyboard": "Keyboard"
|
||||
}
|
||||
|
||||
},
|
||||
|
|
|
@ -10,13 +10,13 @@
|
|||
"logCleared": "ИНФО - Список логов был очищен!",
|
||||
"about": "fpPS4 Temmie's Launcher - Версия: %VARIABLE_0%\n\nСоздано TheMitoSan\n(https://twitter.com/themitosan)\n\nfpPS4 создан red-prig\n(https://github.com/red-prig/fpPS4)\n\nПлагин memoryjs создан Rob--\n(https://github.com/rob--/memoryjs)\n\nПлагин node-stream-zip создан antelle\n(https://github.com/antelle/node-stream-zip)\n\nSVG иконки были взяты из https://www.svgrepo.com/",
|
||||
"mainLog": "fpPS4 Temmie's Launcher - Версия: %VARIABLE_0%\nИспользование nw.js (node-webkit) версия %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "ОШИБКА - Невозможно создать папку!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
"settingsErrorfpPS4NotFound": "ОШИБКА - Невозможно найти исполняемый файл fpPS4!\nВыберите исполняемый файл в настройках или поместите его внутрь \"Emu\" и нажмите OK.",
|
||||
"settingsErrorCreatePath": "ОШИБКА - Папка не может быть создана!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
"settingsErrorfpPS4NotFound": "ОШИБКА - Не удалось найти исполняемый файл fpPS4!\nВыберите исполняемый файл в настройках или поместите его внутрь \"Emu\" и нажмите OK.",
|
||||
"settingsConfirmRemoveAllGameSettings": "ВНИМАНИЕ - Эта опция удалит все настройки из списка игр.\nВы подтверждаете это действие?",
|
||||
"settingsConfirmRemoveGameSettings": "ПРЕДУПРЕЖДЕНИЕ - Это действие удалит все настройки %VARIABLE_0%.\n\nВы подтверждаете это действие?",
|
||||
"settingsRemovedGameSettings": "ИНФО - ( %VARIABLE_0% ) Файл конфигурации успешно удален!",
|
||||
"settingsRemoveGameSettingsError": "ОШИБКА - ( %VARIABLE_0% ) Невозможно удалить этот файл!\nПодробности: %VARIABLE_1%",
|
||||
"settingsRemoveGameSettings404": "ВНИМАНИЕ - ( %VARIABLE_0% ) Невозможно найти файл конфигурации!",
|
||||
"settingsRemoveGameSettingsError": "ОШИБКА - ( %VARIABLE_0% ) Не удалось удалить этот файл!\nПодробности: %VARIABLE_1%",
|
||||
"settingsRemoveGameSettings404": "ВНИМАНИЕ - ( %VARIABLE_0% ) Не удалось найти файл конфигурации!",
|
||||
"infoProcessComplete": "ИНФО - Процесс завершен!\nСмотрите лог для получения более подробной информации",
|
||||
"infoSettingsUpdated": "ИНФО - Файл настроек успешно обновлен!",
|
||||
"settingsLoadError": "ОШИБКА - Невозможно загрузить настройки!\n %VARIABLE_0%",
|
||||
|
@ -25,7 +25,7 @@
|
|||
"closeEmuStatus": "ИНФО - %VARIABLE_0% был закрыт с кодом выхода %VARIABLE_1%",
|
||||
"removedLibModules": "ИНФО - Все модули, которые были импортированы ранее, были удалены, так как они могут нанести вред дампам.",
|
||||
"removeLibModule": "ИНФО - ( %VARIABLE_0% ) Удаление модуля: %VARIABLE_1%",
|
||||
"removeModuleError": "ОШИБКА - Невозможно удалить этот модуль!\nПричина: %VARIABLE_0%",
|
||||
"removeModuleError": "ОШИБКА - Не удалось удалить этот модуль!\nПричина: %VARIABLE_0%",
|
||||
"updateGameSettings": "ИНФО - ( %VARIABLE_0% ) Файл конфигурации был успешно обновлен!",
|
||||
"updateGameSettingsError": "ОШИБКА - Невозможно обновить файл настроек %VARIABLE_0% в %VARIABLE_1%!\nПодробности: %VARIABLE_2%",
|
||||
"skipUpdateGameSettings": "ИНФО - ( %VARIABLE_0% ) Файл настроек не будет обновлен, поскольку никаких изменений не было сделано!",
|
||||
|
@ -35,23 +35,23 @@
|
|||
"errorCreateSettingsFile": "ОШИБКА - Невозможно создать файл конфигурации %VARIABLE_0% в %VARIABLE_1%!\nПодробности: %VARIABLE_2%",
|
||||
"patchLoadedSucessfully": "ИНФО - Патч успешно загружен!\nИмя: %VARIABLE_0%\nТип: %VARIABLE_1%",
|
||||
"patchLoadErrorMismatch": "ОШИБКА - Это не патч, а если и есть, то выбранный не соответствует текущей игре!\nИдентификатор патча: %VARIABLE_0%\nТекущее приложение/игра: %VARIABLE_1%",
|
||||
"patchLoadErrorParamSfo404": "ОШИБКА - Невозможно найти PARAM.SFO этого патча!",
|
||||
"gameListLoadWarnPlayGo": "ВНИМАНИЕ - Невозможно найти файл playgo-chunk.dat из %VARIABLE_0%!\nЕсли это приложение / игра не является Homebrew, проверьте , что дамп был сделан правильно.",
|
||||
"gameListLoadWarnParamSfo": "ВНИМАНИЕ - Невозможно найти PARAM.SFO из %VARIABLE_0%!\nЕсли это приложение / игра не является Homebrew, проверьте, что дамп был сделан правильно.",
|
||||
"gameListDoubleIdError": "ВНИМАНИЕ - Невозможно добавить %VARIABLE_0% в список игр, потому что уже есть другое название с таким же ID! ( %VARIABLE_1% )",
|
||||
"patchLoadErrorParamSfo404": "ОШИБКА - Не удалось найти PARAM.SFO этого патча!",
|
||||
"gameListLoadWarnPlayGo": "УВЕДОМЛЕНИЕ - Невозможно найти файл playgo-chunk.dat из %VARIABLE_0%!\nЕсли это приложение/игра не является Homebrew, проверьте , что дамп был сделан правильно.",
|
||||
"gameListLoadWarnParamSfo": "УВЕДОМЛЕНИЕ - Не удалось найти PARAM.SFO из %VARIABLE_0%!\nЕсли это приложение/игра не является Homebrew, проверьте, что дамп был сделан правильно.",
|
||||
"gameListDoubleIdError": "УВЕДОМЛЕНИЕ - Не удалось добавить %VARIABLE_0% в список игр, потому что уже есть другое название с таким же ID! ( %VARIABLE_1% )",
|
||||
"gameListNoGameFound": "ИНФО - Не найдено приложений / игр в текущей папке ( %VARIABLE_0% )",
|
||||
"gameListSearch404": "Не найдено",
|
||||
"gameListSearch404": "Не удалось найти",
|
||||
"checkDumpPlayGoOnApp": "ИНФО - ( %VARIABLE_0% ) playgo-chunk.dat был найден внутри sce_sys/app - копия была создана в sce_sys.",
|
||||
"gameListLoadSuccessful": "ИНФО - Список игр был успешно загружен! ( %VARIABLE_0% названий найдено )",
|
||||
"gameListVersion": "Версия",
|
||||
"selectGameLoadPatchErrorParamSfo": "ОШИБКА - Невозможно загрузить PARAM.SFO из этого патча!\n%VARIABLE_0%",
|
||||
"path": "Путь",
|
||||
"gamelistGamePath404": "ОШИБКА - Невозможно найти путь к выбранному приложению / игре!\n%VARIABLE_0%",
|
||||
"updateEmuFetchActionsError": "ОШИБКА - Невозможно получить данные GitHub действий!",
|
||||
"gamelistGamePath404": "ОШИБКА - Не удалось найти путь к выбранному приложению/игре!\n%VARIABLE_0%",
|
||||
"updateEmuFetchActionsError": "ОШИБКА - Не удалось получить данные GitHub действий!",
|
||||
"updateEmuIsLatestVersion": "ИНФО - Вы используете последнюю доступную версию fpPS4!\nCommit ID (SHA): %VARIABLE_0%",
|
||||
"updateEmuShaAvailable": "ИНФО - Доступно новое обновление!\n\nВаша версия: %VARIABLE_0%\nНовая версия: %VARIABLE_1%\n\nХотите обновить?",
|
||||
"updateEmuShaUnavailable": "ИНФО - Лаунчер обнаружил что вы не обновили fpPS4 (или файл запуска fpPS4 не найден!)\n\nВы можете это исправить запуском процесса обновления fpPS4.\nХотите продолжить?",
|
||||
"updateEmuDownloadFailed": "ОШИБКА - Невозможно скачать обновление для fpPS4!\nСтатус ответа: %VARIABLE_0% - ОК: %VARIABLE_1%",
|
||||
"updateEmuDownloadFailed": "ОШИБКА - Не удалось скачать обновление для fpPS4!\nСтатус ответа: %VARIABLE_0% - ОК: %VARIABLE_1%",
|
||||
"updateEmuProcessComplete": "ИНФО - Обновление завершено!\nНовая версия fpPS4 (Commit ID / SHA): %VARIABLE_0%",
|
||||
"updateEmu-1-4": "Скачивание обновления fpPS4 (<label class=\"LABEL_monospace\">%VARIABLE_0%</label>)",
|
||||
"updateEmu-2-4": "Распаковка обновления",
|
||||
|
@ -62,19 +62,7 @@
|
|||
"dumpStatus_WARN": "Недостающие файлы",
|
||||
"dumpStatus_HB": "",
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": "Нет доступного списка рабочих процессов",
|
||||
"Sdl2NotFound": "SDL2.dll не найден в папке Emu, пожалуйста установите его чтобы использовать SDL2.",
|
||||
"errorListUnableLocateGamePath": "",
|
||||
"updateEmuSettingsWorkflow404": "",
|
||||
"nonWindowsOsWarn": "",
|
||||
"cGameCompatStatus_BOOTS": "",
|
||||
"cGameCompatStatus_MENUS": "",
|
||||
"cGameCompatStatus_INGAME": "",
|
||||
"cGameCompatStatus_UNKNOWN": "",
|
||||
"cGameCompatStatus_NOTHING": "",
|
||||
"cGameCompatStatus_PLAYABLE": "",
|
||||
"warnUnableFindGameCompatDb": "",
|
||||
"warnUserOffline": ""
|
||||
"updater_noWorkflowListAvailable": ""
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
|
@ -82,8 +70,7 @@
|
|||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "Зелёный: Все файлы присутствуют\nЖёлтый: Некоторые файлы отсутствуют - смотрите лог для более подробной информации\nГолубой: Исполняемый файл представляет собой файл .elf",
|
||||
"DIV_selectedGameStatus_compat": ""
|
||||
"DIV_selectedGameStatus": "Зелёный: Все файлы присутствуют\nЖёлтый: Некоторые файлы отсутствуют - смотрите лог для более подробной информации\nГолубой: исполняемый файл представляет собой файл .elf"
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
@ -93,7 +80,7 @@
|
|||
"LABEL_SETTINGS_CURRENT_LANGUAGE": "Текущий язык",
|
||||
"LABEL_SETTINGS_LANGUAGE_RESTART": "Перезапустите лаунчер чтобы настройки вступили в силу.",
|
||||
"DIV_SETTINGS_PATHS": "Пути",
|
||||
"LABEL_SETTINGS_APP_GAMES_PATH": "К папке с приложениями / играми",
|
||||
"LABEL_SETTINGS_APP_GAMES_PATH": "К папке с приложениями/играми",
|
||||
"LABEL_SETTINGS_FPPS4_PATH": "К папке с эмулятором (fpPS4)",
|
||||
"DIV_SETTINGS_GAME_LIST": "Макет",
|
||||
"LABEL_SETTINGS_GRID_BORDER_RADIUS": "(Сетка) Радиус границы значков",
|
||||
|
@ -116,15 +103,13 @@
|
|||
"LABEL_FPPS4_OPTIONS": "Настройки <label class=\"LABEL_emuColor\">fp</label>PS4",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "Состояние дампа",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "Включить патчи",
|
||||
"LABEL_FPPS4_OPTIONS_MISC": "Другие Опции",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "Выберите режим геймпада:",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "Версия",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "Тип",
|
||||
"LABEL_EMU_RUNNING_STATUS": "Статус",
|
||||
"LABEL_FPPS4_OPTIONS_APP_VERSION": "Версия",
|
||||
"LABEL_FPPS4_OPTIONS_LAUNCHER_OPTIONS": "Параметры запуска",
|
||||
"LABEL_FPPS4_OPTIONS_HACKS": "Хаки",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GUI": "Показывать иконку / имя когда fpPS4 выполняется",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GUI": "Показывать иконку/имя когда fpPS4 выполняется",
|
||||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">ЭКСПЕРЕМЕНТАЛЬНО</label> Логи процесса вывода fpPS4 (<code>stdout</code> и <code>stderr</code>) в внутреннем логе (Нажать F12 --> Console)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "Автообновления fpPS4",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "Включить автообновления fpPS4",
|
||||
|
@ -133,10 +118,7 @@
|
|||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "Размер интерфейса: ",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "Внимание: Не рекомендуется изменять этот параметр если разреш. экрана меньше чем <code>1920x1080</code>",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": "Статус",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Запустить fpPS4 в полноэкранном режиме",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": ""
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Запустить fpPS4 в полноэкранном режиме"
|
||||
|
||||
},
|
||||
|
||||
|
@ -150,11 +132,6 @@
|
|||
"normal": "Нормальное",
|
||||
"max": "Развернутое",
|
||||
"min": "Свернутое"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "XInput",
|
||||
"sdl2": "SDL2",
|
||||
"keyboard": "Клавиатура"
|
||||
}
|
||||
|
||||
},
|
||||
|
@ -173,7 +150,7 @@
|
|||
"BTN_ABOUT": "О программе",
|
||||
"BTN_KILL": "Остановить fpPS4",
|
||||
"BTN_FPPS4_OPTIONS_SELECT_PATCH_LOCATION": "Выберите патч",
|
||||
"BTN_FPPS4_OPTIONS_OPEN_APP_LOCATION": "Папка приложения / игры",
|
||||
"BTN_FPPS4_OPTIONS_OPEN_APP_LOCATION": "Папка приложения/игры",
|
||||
"BTN_FPPS4_OPTIONS_RESET_SETTINGS": "Сброс настроек",
|
||||
"BTN_launcherOptionsExportMetadata": "Экспорт метаданных",
|
||||
"BTN_RUN": "Запустить",
|
||||
|
|
174
Lang/tr-tr.json
|
@ -1,174 +0,0 @@
|
|||
{
|
||||
"lang": "Türkçe (TR-TR)",
|
||||
"variables": {
|
||||
"labelEnableHack": "Etkinleştir",
|
||||
"emuStatusRunning": "Çalışıyor",
|
||||
"logWindowTitle": "fpPS4 Çalıştırılıyor",
|
||||
"killEmuStatus": "Ana işlem kapatıldı - log penceresini kapatmak için devam edin",
|
||||
"logCleared": "BİLGİ - Log listesi temizlendi!",
|
||||
"about": "fpPS4 Temmie's Launcher - Versiyon: %VARIABLE_0%\n\nTheMitoSan tarafından oluşturuldu\n(https://twitter.com/themitosan)\n\nfpPS4, red-prig tarafından oluşturuldu/geliştirildi\n(https://github.com/red-prig/fpPS4)\n\nmemoryjs eklentisi, Rob-- tarafından oluşturuldu/geliştirildi\n(https://github.com/rob--/memoryjs)\n\nnode-stream-zip eklentisi, antelle tarafından oluşturuldu/geliştirildi\n(https://github.com/antelle/node-stream-zip)\n\nSVG ikonlar https://www.svgrepo.com adresinden alındı",
|
||||
"mainLog": "fpPS4 Temmie's Launcher - Versiyon: %VARIABLE_0%\n nw.js (node-webkit) versiyonu kullanılıyor %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "HATA - Klasör oluşturulamıyor!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
"settingsErrorfpPS4NotFound": "HATA - fpPS4 yürütülebilir dosyası bulunamadı!\nYürütülebilir dosyayı ayarlardan seçin veya \"Emu\" klasörüne yerleştirin ve OK tuşuna basın.",
|
||||
"settingsConfirmRemoveAllGameSettings": "UYARI - Bu seçenek, oyun listesindeki tüm ayarları silecektir.\nBu işlemi onaylıyor musunuz?",
|
||||
"settingsConfirmRemoveGameSettings": "UYARI - Bu işlem %VARIABLE_0% için tüm ayarları silecektir.\n\nBu işlemi onaylıyor musunuz?",
|
||||
"settingsRemovedGameSettings": "BİLGİ - ( %VARIABLE_0% ) Ayar dosyası başarıyla silindi!",
|
||||
"settingsRemoveGameSettingsError": "HATA - ( %VARIABLE_0% ) Bu dosya silinemedi!\nDetaylar: %VARIABLE_1%",
|
||||
"settingsRemoveGameSettings404": "UYARI - ( %VARIABLE_0% ) Ayar dosyası bulunamadı!",
|
||||
"infoProcessComplete": "BİLGİ - İşlem tamamlandı!\nDaha fazla detay için loglara bakın",
|
||||
"infoSettingsUpdated": "BİLGİ - Ayar dosyası başarıyla güncellendi!",
|
||||
"settingsLoadError": "HATA - Ayarlar yüklenemedi!\n %VARIABLE 0%",
|
||||
"settingsSaveError": "HATA - Ayarlar kaydedilemedi!\n %VARIABLE 0%",
|
||||
"runEmuArgs": "BİLGİ - fpPS4 şu seçeneklerle başlatılıyor: %VARIABLE_0%\nYürütülebilir dosyanın yolu: %VARIABLE_1%",
|
||||
"closeEmuStatus": "BİLGİ - %VARIABLE_0% çıkış kodu ile kapandı %VARIABLE_1%",
|
||||
"removedLibModules": "BİLGİ - Daha önce içe aktarılan tüm modüller silindi çünkü dump'lar için zararlı olabilirler.",
|
||||
"removeLibModule": "BİLGİ - ( %VARIABLE_0% ) Modül kaldırılıyor: %VARIABLE_1%",
|
||||
"removeModuleError": "HATA - Bu modül kaldırılamadı!\nNeden: %VARIABLE_0%",
|
||||
"updateGameSettings": "BİLGİ - ( %VARIABLE_0% ) Ayar dosyası başarıyla güncellendi!",
|
||||
"updateGameSettingsError": "HATA - %VARIABLE_0% için ayar dosyası %VARIABLE_1% içinde güncellenemedi!\nDetaylar: %VARIABLE_2%",
|
||||
"skipUpdateGameSettings": "BİLGİ - ( %VARIABLE_0% ) Yapılandırma dosyası güncellenmeyecek çünkü herhangi bir değişiklik yapılmadı!",
|
||||
"errorSaveFile": "HATA - Dosya kaydedilemedi!\nDetaylar: %VARIABLE_0%",
|
||||
"saveSucessfullPath": "BİLGİ - Dosya başarıyla yazıldı!\nKonum: %VARIABLE_0%",
|
||||
"createdSettingsFile": "BİLGİ - ( %VARIABLE_0% ) Ayar dosyası başarıyla oluşturuldu!",
|
||||
"errorCreateSettingsFile": "HATA - %VARIABLE_0% içinde %VARIABLE_1% ayar dosyası oluşturulamadı!\nDetaylar: %VARIABLE_2%",
|
||||
"patchLoadedSucessfully": "BİLGİ - Yama başarıyla yüklendi!\nAd: %VARIABLE_0%\nTip: %VARIABLE_1%",
|
||||
"patchLoadErrorMismatch": "HATA - Bu bir yama değil veya mevcut oyunla eşleşmiyor!\nYama kimliği: %VARIABLE_0%\nMevcut uygulama/oyun: %VARIABLE_1%",
|
||||
"patchLoadErrorParamSfo404": "HATA - Bu yama için PARAM.SFO bulunamadı!",
|
||||
"gameListLoadWarnPlayGo": "UYARI - %VARIABLE_0% içinden playgo-chunk.dat bulunamadı!\nBu uygulama/oyun bir homebrew değilse, doğru bir şekilde dump edildiğinden emin olun.",
|
||||
"gameListLoadWarnParamSfo": "UYARI - %VARIABLE_0% PARAM.SFO bulunamadı!\nBu uygulama/oyun bir homebrew değilse, doğru bir şekilde dump edildiğinden emin olun.",
|
||||
"gameListDoubleIdError": "DİKKAT - %VARIABLE_0% oyun listesine eklenemedi çünkü aynı kimliğe sahip başka bir başlık zaten var! (%VARIABLE_1%)",
|
||||
"gameListNoGameFound": "BİLGİ - Mevcut klasörde ( %VARIABLE_0% ) hiç uygulama/oyun bulunamadı",
|
||||
"gameListSearch404": "Bulunamadı",
|
||||
"checkDumpPlayGoOnApp": "BİLGİ - ( %VARIABLE_0% ) sce_sys/app içinde playgo-chunk.dat bulundu - sce_sys içine bir kopya oluşturuldu.",
|
||||
"gameListLoadSuccessful": "BİLGİ - Oyun listesi başarıyla yüklendi! ( %VARIABLE_0% başlık bulundu )",
|
||||
"gameListVersion": "Versiyon",
|
||||
"selectGameLoadPatchErrorParamSfo": "HATA - Bu yamanın PARAM.SFO'su yüklenemedi!\n%VARIABLE_0%",
|
||||
"path": "Yol",
|
||||
"gamelistGamePath404": "BİLGİ - Seçilen uygulama / oyun klasörü mevcut değil!\n%VARIABLE_0%",
|
||||
"updateEmuFetchActionsError": "HATA - GitHub'tan bilgi alınamıyor!",
|
||||
"updateEmuIsLatestVersion": "BİLGİ - Zaten en son versiyonu kullanıyorsunuz!\nCommit kimliği (SHA): %VARIABLE_0%",
|
||||
"updateEmuShaAvailable": "BİLGİ - Yeni bir güncelleme mevcut!\n\nYerel versiyon:%VARIABLE_0%\nYeni versiyon:%VARIABLE_1%\n\nGüncellemek ister misiniz?",
|
||||
"updateEmuShaUnavailable": "BİLGİ - Launcher, herhangi bir güncelleme yapılmadığını algıladı\n(Veya fpPS4 yürütülebilir dosyası bulunamadı!)\n\nBu sorunu, otomatik güncelleme prosedürünü kullanarak çözebilirsiniz.\n\nDevam etmek ister misiniz?",
|
||||
"updateEmuDownloadFailed": "HATA - fpPS4 güncellemesi indirilemedi!\nYanıt durumu: %VARIABLE_0% - OK: %VARIABLE_1%",
|
||||
"updateEmuProcessComplete": "BİLGİ - Güncelleme tamamlandı!\nYeni versiyon (Commit kimliği / SHA): %VARIABLE_0%",
|
||||
"updateEmu-1-4": "fpPS4 güncellemesi indiriliyor (%VARIABLE_0%)",
|
||||
"updateEmu-2-4": "Güncelleme çıkarılıyor",
|
||||
"updateEmu-3-4": "Kalan dosyalar siliniyor",
|
||||
"updateEmu-4-4": "Güncelleme tamamlandı!",
|
||||
"settingsLogEmuSha": "BİLGİ - fpPS4 versiyonu: (%VARIABLE_0%)",
|
||||
"dumpStatus_OK": "Mükemmel",
|
||||
"dumpStatus_WARN": "Eksik dosyalar",
|
||||
"dumpStatus_HB": "Homebrew",
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": "CI listesi alınamadı!",
|
||||
"Sdl2NotFound": "SDL2.dll, Emu klasöründe bulunamadı, \"SDL\"yi etkinleştirmek için orada olduğundan emin olun.",
|
||||
"errorListUnableLocateGamePath": "HATA - \"%VARIABLE_0%\" için ayar klasörü bulunamadı! Hatalardan kaçınmak için uygulama/oyun listesi güncellendi.\nYol: %VARIABLE_1%",
|
||||
"updateEmuSettingsWorkflow404": "",
|
||||
"nonWindowsOsWarn": "",
|
||||
"cGameCompatStatus_BOOTS": "",
|
||||
"cGameCompatStatus_MENUS": "",
|
||||
"cGameCompatStatus_INGAME": "",
|
||||
"cGameCompatStatus_UNKNOWN": "",
|
||||
"cGameCompatStatus_NOTHING": "",
|
||||
"cGameCompatStatus_PLAYABLE": "",
|
||||
"warnUnableFindGameCompatDb": "",
|
||||
"warnUserOffline": ""
|
||||
},
|
||||
"input_text": {
|
||||
"INPUT_gameListSearch": {
|
||||
"placeholder": "Arama: Oyun adı...",
|
||||
"value": ""
|
||||
}
|
||||
},
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "Yeşil: tüm dosyalar mevcut\nSarı: bazı dosyalar eksik - detaylar için loglara bakın\nCamgöbeği: yürütülebilir dosya bir .elf dosyası",
|
||||
"DIV_selectedGameStatus_compat": ""
|
||||
},
|
||||
"innerHTML": {
|
||||
"DIV_SETTINGS_TITLE": "Ayarlar",
|
||||
"DIV_SETTINGS_LANGUAGE": "Dil",
|
||||
"LABEL_SETTINGS_CURRENT_LANGUAGE": "mevcut dil",
|
||||
"LABEL_SETTINGS_LANGUAGE_RESTART": "Bu ayarı uygulamak için launcher'ı yeniden başlatmanız gerekmektedir",
|
||||
"DIV_SETTINGS_PATHS": "Yol",
|
||||
"LABEL_SETTINGS_APP_GAMES_PATH": "Uygulamalar/Oyunlar Klasörü",
|
||||
"LABEL_SETTINGS_FPPS4_PATH": "Emülatör Konumu",
|
||||
"DIV_SETTINGS_GAME_LIST": "Uygulama / Oyun Listesi",
|
||||
"LABEL_SETTINGS_GRID_BORDER_RADIUS": "(Grid) İkonların sınır yarıçapı",
|
||||
"LABEL_SETTINGS_GAME_SEARCH_MODE": "Arama Modu",
|
||||
"LABEL_SETTINGS_GAME_LIST_BACKGROUND_BLUR": "Arka Plan Bulanıklığı",
|
||||
"LABEL_SETTINGS_GAME_LIST_BACKGROUND_OPACITY": "Arka Plan Opaklığı",
|
||||
"LABEL_SETTINGS_GAME_LIST_SEARCH_CASE_SENSITIVE": "Hassas aramayı etkinleştir (büyük/küçük harf duyarlı)",
|
||||
"LABEL_SETTINGS_GAME_LIST_NORMAL_SHOW_BG": "Listede her oyun için arka planı göster",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GAME_ENTRY": "Listedeki her oyun için bilgileri (veya klasör yolunu) göster",
|
||||
"DIV_SETTINGS_EMU_RUNNING": "Emülasyon Çalışıyor",
|
||||
"LABEL_SETTINGS_EMU_RUNNING_BACKGROUND_BLUR": "Arka Plan Bulanıklığı",
|
||||
"LABEL_SETTINGS_EMU_RUNNING_BACKGROUND_OPACITY": "Arka Plan Opaklığı",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_EMU_RUNNING": "Başlık altında oyun bilgilerini (veya yürütülebilir dosyanın yolunu) göster",
|
||||
"DIV_SETTINGS_LOG_OPTIONS": "Log Seçenekleri",
|
||||
"LABEL_SETTINGS_LOG_START_WINDOW_STATE": "Log penceresi başlangıç durumu",
|
||||
"LABEL_SETTINGS_PROMPT_KEY_FPPS4_CLOSES": "fpPS4 kapatıldıktan sonra kapatmak için herhangi bir tuşa basın",
|
||||
"DIV_SETTINGS_MISC": "Diğer Ayarlar",
|
||||
"LABEL_SETTINGS_ENABLE_PARAMSFO_SUPPORT": "<code>PARAM.SFO</code> dosyalarını desteklemeyi etkinleştir (Uygulamak için \"Tüm oyun ayarlarını sil\"e tıklayın ve launcher'ı yeniden başlatın)",
|
||||
"LABEL_SETTINGS_REMOVE_PROJECT_GP4_FILES": "Oyun listesi yüklenirken <code>Project.gp4</code> dosyalarını sil",
|
||||
"LABEL_FPPS4_OPTIONS": "<label class=\"LABEL_emuColor\">fp</label>PS4 Seçenekleri",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "Dump Durumu",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "Yamaları Etkinleştir",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "Versiyon",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "Tip",
|
||||
"LABEL_EMU_RUNNING_STATUS": "Durum",
|
||||
"LABEL_FPPS4_OPTIONS_APP_VERSION": "Versiyon",
|
||||
"LABEL_FPPS4_OPTIONS_LAUNCHER_OPTIONS": "Launcher Seçenekleri",
|
||||
"LABEL_FPPS4_OPTIONS_HACKS": "Hileler",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GUI": "Emülasyon sırasında uygulama/oyun simgesini ve adını göster",
|
||||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">DENEYSEL</label> Emülatör çıktısını (<code>stdout</code> ve <code>stderr</code>) iç logda göster (F12'ye basın --> Konsol)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "fpPS4 Güncellemeleri",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "fpPS4 güncelleme programını etkinleştir",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Güncellemeleri şu branştan al",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": "Durum",
|
||||
"DIV_SETTINGS_GENERAL": "Genel",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "Arayüz boyutu (ölçek)",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "Uyarı: Ekran çözünürlüğünüz <code>1920x1080</code>'den düşükse bu ayarı değiştirmeniz önerilmez",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "fpPS4'ü tam ekran modunda başlat",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": ""
|
||||
},
|
||||
"select": {
|
||||
"SELECT_settingsSearchMode": {
|
||||
"appName": "Ad",
|
||||
"titleId": "Seri"
|
||||
},
|
||||
"SELECT_settingsStartExternalWindow": {
|
||||
"normal": "Normal",
|
||||
"max": "Maksimum",
|
||||
"min": "Minimum"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "xinput",
|
||||
"sdl2": "sdl2",
|
||||
"keyboard": "Klavye"
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"BTN_SETTINGS_SELECT_APPS_GAMES_PATH": "Klasör Seç",
|
||||
"BTN_SETTINGS_OPEN_APPS_GAMES_PATH": "Klasörü Aç",
|
||||
"BTN_SETTINGS_SELECT_FPPS4_PATH": "Klasör Seç",
|
||||
"BTN_SETTINGS_DELETE_ALL_GAME_SETTINGS": "Tüm Oyun Ayarlarını Sil",
|
||||
"BTN_SETTINGS_APPLY_CLOSE": "Uygula ve Kapat",
|
||||
"BTN_SETTINGS_CLOSE": "Kapat",
|
||||
"BTN_REFRESH": "Listeyi Yenile",
|
||||
"BTN_SETTINGS": "Ayarlar",
|
||||
"BTN_CLEAR_LOG": "Logları Temizle",
|
||||
"BTN_ABOUT": "Hakkında",
|
||||
"BTN_KILL": "fpPS4'ü Durdur",
|
||||
"BTN_FPPS4_OPTIONS_SELECT_PATCH_LOCATION": "Yama Seç",
|
||||
"BTN_FPPS4_OPTIONS_OPEN_APP_LOCATION": "Uygulama/Oyun Konumunu Aç",
|
||||
"BTN_FPPS4_OPTIONS_RESET_SETTINGS": "Ayarları Sıfırla",
|
||||
"BTN_launcherOptionsExportMetadata": "Metaveriyi Dışa Aktar",
|
||||
"BTN_RUN": "fpPS4'ü Başlat",
|
||||
"BTN_SETTINGS_RESTART_LAUNCHER": "Launcher'ı Yeniden Başlat",
|
||||
"BTN_UPDATE_FPPS4": "fpPS4'ü Güncelle",
|
||||
"BTN_SETTINGS_FORCE_FPPS4_UPDATE": "fpPS4 Güncellemesini Zorla"
|
||||
}
|
||||
}
|
|
@ -10,13 +10,13 @@
|
|||
"logCleared": "ІНФО - Список логу був очищений!",
|
||||
"about": "fpPS4 Temmie's Launcher - Версія: %VARIABLE_0%\n\nСтворено TheMitoSan\n(https://twitter.com/themitosan)\n\nfpPS4 створено red-prig\n(https://github.com/red-prig/fpPS4)\n\nПлагин memoryjs створено Rob--\n(https://github.com/rob--/memoryjs)\n\nПлагин node-stream-zip створено antelle\n(https://github.com/antelle/node-stream-zip)\n\nSVG іконки були взяті з https://www.svgrepo.com/",
|
||||
"mainLog": "fpPS4 Temmie's Launcher - Версія: %VARIABLE_0%\nВикористання nw.js (node-webkit) версія %VARIABLE_1% [%VARIABLE_2%]",
|
||||
"settingsErrorCreatePath": "ПОМИЛКА - Неможливо створити папку!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
"settingsErrorfpPS4NotFound": "ПОМИЛКА - Неможливо знайти виконавчий файл fpPS4!\nВиберіть виконавчий файл в налаштуваннях або помістіть його всередину \"Emu\" та натисніть OK.",
|
||||
"settingsErrorCreatePath": "ПОМИЛКА - Папка не може бути створена!\n(%VARIABLE_0%)\n%VARIABLE_1%",
|
||||
"settingsErrorfpPS4NotFound": "ПОМИЛКА - Не вдалось знайти виконавчий файл fpPS4!\nВиберіть виконавчий файл в налаштуваннях або помістіть його всередину \"Emu\" та натисніть OK.",
|
||||
"settingsConfirmRemoveAllGameSettings": "УВАГА - Ця опція видалить всі налаштування зі списку ігор.\nВи підтверджуєте цю дію?",
|
||||
"settingsConfirmRemoveGameSettings": "ПОПЕРЕДЖЕННЯ - Ця дія видалить всі налаштування %VARIABLE_0%.\n\nВи підтверджуєте цю дію?",
|
||||
"settingsRemovedGameSettings": "ІНФО - ( %VARIABLE_0% ) Файл конфігурації успішно видалений!",
|
||||
"settingsRemoveGameSettingsError": "ПОМИЛКА - ( %VARIABLE_0% ) Неможливо видалити цей файл!\nПодробиці: %VARIABLE_1%",
|
||||
"settingsRemoveGameSettings404": "УВАГА - ( %VARIABLE_0% ) Неможливо знайти файл конфігурації!",
|
||||
"settingsRemoveGameSettingsError": "ПОМИЛКА - ( %VARIABLE_0% ) Не вдалось видалити цей файл!\nПодробиці: %VARIABLE_1%",
|
||||
"settingsRemoveGameSettings404": "УВАГА - ( %VARIABLE_0% ) Не вдалось знайти файл конфігурації!",
|
||||
"infoProcessComplete": "ІНФО - Процесс завершено!\nДивіться лог для отримання більш детальної інформації",
|
||||
"infoSettingsUpdated": "ІНФО - Файл налаштувань успішно оновлений!",
|
||||
"settingsLoadError": "ПОМИЛКА - Неможливо завантажити налаштування!\n %VARIABLE_0%",
|
||||
|
@ -25,7 +25,7 @@
|
|||
"closeEmuStatus": "ІНФО - %VARIABLE_0% був закритий з кодом виходу %VARIABLE_1%",
|
||||
"removedLibModules": "ІНФО - Всі модулі, які були імпортовані раніше, були видалені, так як вони можуть нанести шкоди дампам.",
|
||||
"removeLibModule": "ІНФО - ( %VARIABLE_0% ) Видалення модуля: %VARIABLE_1%",
|
||||
"removeModuleError": "ПОМИЛКА - Неможливо видалити цей модуль!\nПричина: %VARIABLE_0%",
|
||||
"removeModuleError": "ПОМИЛКА - Не вдалось видалити цей модуль!\nПричина: %VARIABLE_0%",
|
||||
"updateGameSettings": "ІНФО - ( %VARIABLE_0% ) Файл конфігурації був успішно оновлений!",
|
||||
"updateGameSettingsError": "ПОМИЛКА - Неможливо оновити файл налаштувань %VARIABLE_0% в %VARIABLE_1%!\nПодробиці: %VARIABLE_2%",
|
||||
"skipUpdateGameSettings": "ІНФО - ( %VARIABLE_0% ) Файл налаштувань не буде оновлений, оскільки ніяких змін не було зроблено!",
|
||||
|
@ -35,23 +35,23 @@
|
|||
"errorCreateSettingsFile": "ПОМИЛКА - Неможливо створити файл конфігурації %VARIABLE_0% в %VARIABLE_1%!\nПодробиці: %VARIABLE_2%",
|
||||
"patchLoadedSucessfully": "ІНФО - Патч успішно завантажено!\nІм'я: %VARIABLE_0%\nТип: %VARIABLE_1%",
|
||||
"patchLoadErrorMismatch": "ПОМИЛКА - Це не патч, а якщо и є, то вибраний не відповідає поточній грі!\nІдентифікатор патчу: %VARIABLE_0%\nПоточний додаток/гра: %VARIABLE_1%",
|
||||
"patchLoadErrorParamSfo404": "ПОМИЛКА - Неможливо знайти PARAM.SFO цього патчу!",
|
||||
"gameListLoadWarnPlayGo": "УВАГА - Неможливо знайти файл playgo-chunk.dat із %VARIABLE_0%!\nЯкщо цей додаток / гра не являється Homebrew, перевірте, що дамп був зроблений правильно.",
|
||||
"gameListLoadWarnParamSfo": "УВАГА - Неможливо знайти PARAM.SFO із %VARIABLE_0%!\nЯкщо цей додаток / гра не являється Homebrew, перевірте, що дамп був зроблений правильно.",
|
||||
"gameListDoubleIdError": "УВАГА - Неможливо додати %VARIABLE_0% до списку ігор, тому що вже є друга назва з таким же ID! ( %VARIABLE_1% )",
|
||||
"gameListNoGameFound": "ІНФО - Не знайдено додаток / гру в поточній папці ( %VARIABLE_0% )",
|
||||
"gameListSearch404": "Не знайдено",
|
||||
"patchLoadErrorParamSfo404": "ПОМИЛКА - Не вдалось знайти PARAM.SFO цього патчу!",
|
||||
"gameListLoadWarnPlayGo": "ПОВІДОМЛЕННЯ - Неможливо знайти файл playgo-chunk.dat із %VARIABLE_0%!\nЯкщо цей додаток/гра не являється Homebrew, перевірте, що дамп був зроблений правильно.",
|
||||
"gameListLoadWarnParamSfo": "ПОВІДОМЛЕННЯ - Не вдалось знайти PARAM.SFO із %VARIABLE_0%!\nЯкщо цей додаток/гра не являється Homebrew, перевірте, що дамп був зроблений правильно.",
|
||||
"gameListDoubleIdError": "ПОВІДОМЛЕННЯ - Не вдалось додати %VARIABLE_0% до списку ігор, тому що вже є друга назва з таким же ID! ( %VARIABLE_1% )",
|
||||
"gameListNoGameFound": "ІНФО - Не знайдено додаток/гру в поточній папці ( %VARIABLE_0% )",
|
||||
"gameListSearch404": "Не вдалось знайти",
|
||||
"checkDumpPlayGoOnApp": "ІНФО - ( %VARIABLE_0% ) playgo-chunk.dat був знайдений всередині sce_sys/app - копія була створена в sce_sys.",
|
||||
"gameListLoadSuccessful": "ІНФО - Список ігор був успішно завантажений! ( %VARIABLE_0% назв знайдено )",
|
||||
"gameListVersion": "Версія",
|
||||
"selectGameLoadPatchErrorParamSfo": "ПОМИЛКА - Неможливо завантажити PARAM.SFO із цього патчу!\n%VARIABLE_0%",
|
||||
"path": "Шлях",
|
||||
"gamelistGamePath404": "ПОМИЛКА - Неможливо знайти шлях до вибраного додатка / гри!\n%VARIABLE_0%",
|
||||
"updateEmuFetchActionsError": "ПОМИЛКА - Неможливо отримати данні GitHub дій!",
|
||||
"gamelistGamePath404": "ПОМИЛКА - Не вдалось знайти шлях до вибраного додатка/гри!\n%VARIABLE_0%",
|
||||
"updateEmuFetchActionsError": "ПОМИЛКА - Не вдалось отримати данні GitHub дій!",
|
||||
"updateEmuIsLatestVersion": "ІНФО - Ви використовуєте послідню доступну версію fpPS4!\nCommit ID (SHA): %VARIABLE_0%",
|
||||
"updateEmuShaAvailable": "ІНФО - Доступне нове оновлення!\n\nВаша версія: %VARIABLE_0%\nНова версія: %VARIABLE_1%\n\nХочете оновити?",
|
||||
"updateEmuShaUnavailable": "ІНФО - Лаунчер виявив що ви не оновили fpPS4 (або виконавчий файл fpPS4 не знайдено!)\n\nВи можете це виправити виконавши процес оновлення fpPS4.\nХочете продовжити?",
|
||||
"updateEmuDownloadFailed": "ПОМИЛКА - Неможливо завантажити оновлення для fpPS4!\nСтатус відповіді: %VARIABLE_0% - ОК: %VARIABLE_1%",
|
||||
"updateEmuDownloadFailed": "ПОМИЛКА - Не вдалось завантажити оновлення для fpPS4!\nСтатус відповіді: %VARIABLE_0% - ОК: %VARIABLE_1%",
|
||||
"updateEmuProcessComplete": "ІНФО - Оновлення завершено!\nНова версія fpPS4 (Commit ID / SHA): %VARIABLE_0%",
|
||||
"updateEmu-1-4": "Скачування оновлення fpPS4 (<label class=\"LABEL_monospace\">%VARIABLE_0%</label>)",
|
||||
"updateEmu-2-4": "Розпаковка оновлення",
|
||||
|
@ -62,19 +62,7 @@
|
|||
"dumpStatus_WARN": "Недостатньо файлів",
|
||||
"dumpStatus_HB": "",
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": "Немає доступного списку робочих процесів",
|
||||
"Sdl2NotFound": "SDL2.dll не знайдено в папці Emu, будь ласка встановіть його щоб використовувати SDL2.",
|
||||
"errorListUnableLocateGamePath": "",
|
||||
"updateEmuSettingsWorkflow404": "",
|
||||
"nonWindowsOsWarn": "",
|
||||
"cGameCompatStatus_BOOTS": "",
|
||||
"cGameCompatStatus_MENUS": "",
|
||||
"cGameCompatStatus_INGAME": "",
|
||||
"cGameCompatStatus_UNKNOWN": "",
|
||||
"cGameCompatStatus_NOTHING": "",
|
||||
"cGameCompatStatus_PLAYABLE": "",
|
||||
"warnUnableFindGameCompatDb": "",
|
||||
"warnUserOffline": ""
|
||||
"updater_noWorkflowListAvailable": ""
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
|
@ -82,8 +70,7 @@
|
|||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "Зелений: Всі файли присутні\nЖовтий: Деякі файли відсутні - дивіться лог для більш детальної інформації\nГолубий: Виконавчий файл представляє собою файл .elf",
|
||||
"DIV_selectedGameStatus_compat": ""
|
||||
"DIV_selectedGameStatus": "Зелений: Всі файли присутні\nЖовтий: Деякі файли відсутні - дивіться лог для більш детальної інформації\nГолубий: Виконавчий файл представляє собою файл .elf"
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
@ -93,7 +80,7 @@
|
|||
"LABEL_SETTINGS_CURRENT_LANGUAGE": "Поточна мова",
|
||||
"LABEL_SETTINGS_LANGUAGE_RESTART": "Перезапустіть лаунчер щоб налаштування вступили в силу.",
|
||||
"DIV_SETTINGS_PATHS": "Шляхи",
|
||||
"LABEL_SETTINGS_APP_GAMES_PATH": "До папки з додатками / іграми",
|
||||
"LABEL_SETTINGS_APP_GAMES_PATH": "До папки з додатками/іграми",
|
||||
"LABEL_SETTINGS_FPPS4_PATH": "До папки з емулятором (fpPS4)",
|
||||
"DIV_SETTINGS_GAME_LIST": "Макет",
|
||||
"LABEL_SETTINGS_GRID_BORDER_RADIUS": "(Сітка) Радіус границі значків",
|
||||
|
@ -110,33 +97,28 @@
|
|||
"DIV_SETTINGS_LOG_OPTIONS": "Налаштування ведення логу",
|
||||
"LABEL_SETTINGS_LOG_START_WINDOW_STATE": "Запуск вікна логу",
|
||||
"LABEL_SETTINGS_PROMPT_KEY_FPPS4_CLOSES": "Натисніть любу клавішу для закриття після завершення роботи fpPS4",
|
||||
"DIV_SETTINGS_MISC": "Інші конфігурації",
|
||||
"DIV_SETTINGS_MISC": "Другі конфігурації",
|
||||
"LABEL_SETTINGS_ENABLE_PARAMSFO_SUPPORT": "Ввімкнути підтримку файлів <code>PARAM.SFO</code> (Натисніть на \"Видалити всі ігрові налаштування\" та перезапустіть лаунчер, щоб налаштування вступили в силу)",
|
||||
"LABEL_SETTINGS_REMOVE_PROJECT_GP4_FILES": "Видалити файли <code>Project.gp4</code> при завантаженні списку ігор",
|
||||
"LABEL_FPPS4_OPTIONS": "Налаштування <label class=\"LABEL_emuColor\">fp</label>PS4",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "Стан дампу",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "Ввімкнути патчі",
|
||||
"LABEL_FPPS4_OPTIONS_OPTIONS_MISC": "Інші Опції",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "Оберіть режим геймпаду:",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "Версія",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "Тип",
|
||||
"LABEL_EMU_RUNNING_STATUS": "Статус",
|
||||
"LABEL_FPPS4_OPTIONS_APP_VERSION": "Версія",
|
||||
"LABEL_FPPS4_OPTIONS_LAUNCHER_OPTIONS": "Параметри запуску",
|
||||
"LABEL_FPPS4_OPTIONS_HACKS": "Хаки",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GUI": "Показувати іконку / ім'я коли fpPS4 виконується",
|
||||
"LABEL_SETTINGS_SHOW_METADATA_GUI": "Показувати іконку/ім'я коли fpPS4 виконується",
|
||||
"LABEL_SETTINGS_EXPERIMENTAL_FPPS4_INTERNAL_LOG": "<label class=\"LABEL_settingsExperimental\">ЕКСПЕРИМЕНТАЛЬНО</label> Логи процесу виводу fpPS4 (<code>stdout</code> та <code>stderr</code>) в внутрішньому лозі (Натиснути F12 --> Console)",
|
||||
"DIV_SETTINGS_FPPS4_UPDATER": "Автооновлення fpPS4",
|
||||
"LABEL_SETTINGS_ENABLE_LAUNCHER_FPPS4_UPDATES": "Ввімкнути автооновлення fpPS4",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Шукати оновлення з гілки",
|
||||
"LABEL_SETTINGS_FPPS4_UPDATE_BRANCH": "Шукати оновлення із вітки",
|
||||
"DIV_SETTINGS_GENERAL": "Головне",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "Розмір інтерфейсу: ",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "Увага: Не рекомендується зміняти цей параметр якщо розмір екрану менше ніж <code>1920x1080</code>",
|
||||
"LABEL_FPPS4_UPDATER_STATUS_LANG": "Статус",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Запустити fpPS4 в повноекранному режимі",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": ""
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "Запустити fpPS4 в повноекранному режимі"
|
||||
|
||||
},
|
||||
|
||||
|
@ -150,11 +132,6 @@
|
|||
"normal": "Нормальне",
|
||||
"max": "Розгорнуте",
|
||||
"min": "Згорнуте"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "XInput",
|
||||
"sdl2": "SDL2",
|
||||
"keyboard": "Клавіатура"
|
||||
}
|
||||
|
||||
},
|
||||
|
@ -173,7 +150,7 @@
|
|||
"BTN_ABOUT": "Про програму",
|
||||
"BTN_KILL": "Зупинити fpPS4",
|
||||
"BTN_FPPS4_OPTIONS_SELECT_PATCH_LOCATION": "Виберіть патч",
|
||||
"BTN_FPPS4_OPTIONS_OPEN_APP_LOCATION": "Папка додатку / гри",
|
||||
"BTN_FPPS4_OPTIONS_OPEN_APP_LOCATION": "Папка додатку/гри",
|
||||
"BTN_FPPS4_OPTIONS_RESET_SETTINGS": "Скидання налаштувань",
|
||||
"BTN_launcherOptionsExportMetadata": "Експорт метаданих",
|
||||
"BTN_RUN": "Запустити",
|
||||
|
|
|
@ -61,20 +61,8 @@
|
|||
"dumpStatus_OK": "完成",
|
||||
"dumpStatus_WARN": "文件缺失",
|
||||
"dumpStatus_HB": "自制",
|
||||
"updateEmuWorkflow404": "",
|
||||
"updater_noWorkflowListAvailable": "Workflow 列表无法读取",
|
||||
"Sdl2NotFound": "模拟器文件夹中未发现 SDL2.dll , 请安装并使用 SDL2",
|
||||
"errorListUnableLocateGamePath": "",
|
||||
"updateEmuSettingsWorkflow404": "",
|
||||
"nonWindowsOsWarn": "",
|
||||
"cGameCompatStatus_BOOTS": "",
|
||||
"cGameCompatStatus_MENUS": "",
|
||||
"cGameCompatStatus_INGAME": "",
|
||||
"cGameCompatStatus_UNKNOWN": "",
|
||||
"cGameCompatStatus_NOTHING": "",
|
||||
"cGameCompatStatus_PLAYABLE": "",
|
||||
"warnUnableFindGameCompatDb": "",
|
||||
"warnUserOffline": ""
|
||||
"updateEmuWorkflow404": "ERROR - 无法在 GitHub 上的 fpPS4 工作流列表中找到 CI",
|
||||
"updater_noWorkflowListAvailable": ""
|
||||
},
|
||||
|
||||
"input_text": {
|
||||
|
@ -82,8 +70,7 @@
|
|||
},
|
||||
|
||||
"title": {
|
||||
"DIV_selectedGameStatus_dump": "绿色: 所有的文件都存在\n黄色: 缺失一些文件 - 更多细节请查看日志\n青色: 可执行文件是一个 .elf 文件",
|
||||
"DIV_selectedGameStatus_compat": ""
|
||||
"DIV_selectedGameStatus": "绿色: 所有的文件都存在\n黄色: 缺失一些文件 - 更多细节请查看日志\n青色: 可执行文件是一个 .elf 文件"
|
||||
},
|
||||
|
||||
"innerHTML": {
|
||||
|
@ -116,7 +103,6 @@
|
|||
"LABEL_FPPS4_OPTIONS": "<label class=\"LABEL_emuColor\">fp</label>PS4 选项",
|
||||
"LABEL_FPPS4_OPTIONS_DUMP_STATUS": "Dump 状态",
|
||||
"LABEL_FPPS4_OPTIONS_ENABLE_PATCHES": "启用游戏补丁",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": "选择控制器模式",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_VERSION": "版本号",
|
||||
"LABEL_FPPS4_OPTIONS_PATCH_TYPE": "类型",
|
||||
"LABEL_EMU_RUNNING_STATUS": "运行状态",
|
||||
|
@ -132,10 +118,7 @@
|
|||
"DIV_SETTINGS_GENERAL": "通用",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE": "界面缩放比例",
|
||||
"LABEL_SETTINGS_GUI_ZOOM_SCALE_INFO": "警告:如果你的屏幕分辨率低于 <code>1920x1080</code>,不建议更改这个设置。",
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "以全屏模式启动 fpPS4",
|
||||
"LABEL_SETTINGS_ENABLE_GAME_COMPAT_CHECK": "",
|
||||
"LABEL_SETTINGS_GAMEPAD_LED_COLOR": "",
|
||||
"LABEL_FPPS4_OPTIONS_SELECT_GAMEPAD_LED_COLOR": ""
|
||||
"LABEL_SETTINGS_START_EMU_FULLSCREEN": "以全屏模式启动 fpPS4"
|
||||
|
||||
},
|
||||
|
||||
|
@ -149,11 +132,6 @@
|
|||
"normal": "常规窗口",
|
||||
"max": "最大化",
|
||||
"min": "最小化"
|
||||
},
|
||||
"FPPS4_OPTIONS_SELECT_GAMEPAD_MODE": {
|
||||
"xinput": "xinput",
|
||||
"sdl2": "sdl2",
|
||||
"keyboard": "Keyboard"
|
||||
}
|
||||
|
||||
},
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
@echo off
|
||||
color a
|
||||
title Running fpPS4 Temmie's Launcher - Please wait...
|
||||
echo Running fpPS4 Temmie's Launcher - Please wait...
|
||||
start /b Nwjs\nw .
|
BIN
Nwjs/nw.exe
Normal file
74
README.md
|
@ -1,76 +1,22 @@
|
|||
<h1 align="center">
|
||||
<img src="App/img/logo.png" width="140" alt="fpPS4_TL_Logo"><br>
|
||||
fpPS4 Temmie's Launcher
|
||||
</h1>
|
||||
|
||||
Created by [TheMitoSan](https://github.com/themitosan) <sup>_(Previously known as **Temmie**Heartz)_</sup>, This is a simple launcher created for [fpPS4](https://github.com/red-prig/fpPS4) compatibility layer.
|
||||
# fpPS4 Temmie's Launcher
|
||||
Created by TheMitoSan (Previously known as TemmieHeartz), This is a simple launcher created for [fpPS4](https://github.com/red-prig/fpPS4/) project.
|
||||
|
||||
<p align="center">
|
||||
<img src="App/img/banner.jpg" width="750">
|
||||
</p><br>
|
||||
</p>
|
||||
|
||||
## How to install
|
||||
|
||||
### Windows
|
||||
|
||||
#### Stable Version
|
||||
|
||||
- Download latest release _(you can get it [here](https://github.com/themitosan/fpPS4-Temmie-s-Launcher/releases))_
|
||||
- Extract all files on your desired location
|
||||
- Run `launcher.exe`
|
||||
|
||||
#### Latest Features (recommended)
|
||||
|
||||
- [Download / Clone this repo](https://github.com/themitosan/fpPS4-Temmie-s-Launcher/archive/refs/heads/main.zip)
|
||||
- Download / Clone this repo
|
||||
- Download [nw.js](https://dl.nwjs.io/v0.70.1/nwjs-sdk-v0.70.1-win-x64.zip) version `0.70.1`
|
||||
- Extract all files from `nw` on `Nwjs` folder
|
||||
- Run `launcher.bat`
|
||||
- Extract all files from nw to the `Nwjs` folder
|
||||
- Run `Launcher.bat`
|
||||
|
||||
### Linux
|
||||
> [!WARNING]\
|
||||
> Running fpPS4 / Launcher on a Non-Windows OS <u>**isn't the best way / recommended to test / use this software!**</u> The main compatibility layer is being developed to <u>**run only on Windows**</u>. In order to run fpPS4, you will need [Wine](https://www.winehq.org) installed - <ins>but be aware that it may result in **less performance with bugs / glitches**</ins>.
|
||||
|
||||
[Click here to know how to install Wine](https://wiki.winehq.org/Download)
|
||||
|
||||
#### Release Version
|
||||
|
||||
- Download latest release _(you can get it [here](https://github.com/themitosan/fpPS4-Temmie-s-Launcher/releases))_
|
||||
- Extract all files on your desired location
|
||||
- Run `chmod +x launcher.sh && ./launcher.sh`
|
||||
|
||||
#### Installer Method (recomended)
|
||||
|
||||
> [!IMPORTANT]\
|
||||
> Make sure to have `curl`, `tar` and `unzip` packages installed on your system!
|
||||
- [Download / Clone this repo](https://github.com/themitosan/fpPS4-Temmie-s-Launcher/archive/refs/heads/main.zip)
|
||||
- To run installer script, run `chmod +x install.sh && ./install.sh`
|
||||
|
||||
### Manual Installation
|
||||
|
||||
- [Download / Clone this repo](https://github.com/themitosan/fpPS4-Temmie-s-Launcher/archive/refs/heads/main.zip)
|
||||
- Download latest [nw.js](https://nwjs.io/) version
|
||||
- Extract all files from `nw` on `Nwjs` folder
|
||||
- Open terminal on main project path and run `chmod +x ./launcher.sh`
|
||||
|
||||
In order to start, run `./launcher.sh`
|
||||
|
||||
## General Tips
|
||||
|
||||
- You can add `launcher.sh` as a *non-steam game* in your **Steam**!
|
||||
- You can hide a specific title to show on list by appending `!` before folder name _(Example: `!Apollo Save Tool`)_
|
||||
- If you want to update launcher and have `git` installed, run these commands below:
|
||||
|
||||
```
|
||||
git reset --hard
|
||||
git pull origin main
|
||||
```
|
||||
|
||||
### How to import your dumps
|
||||
You can see all required procedures on main [fpPS4 discord server](https://discord.gg/up9qatpX7M).
|
||||
### How to setup fpPS4 and launcher
|
||||
You can setup both launcher and emulator using [this tutorial](https://docs.google.com/document/d/1HHRm9939HL7b8XCBagIyBo1VJIDj7Me4/edit).
|
||||
|
||||
## External plugins used on this project
|
||||
- [memoryjs](https://github.com/rob--/memoryjs) - created by [Rob--](https://github.com/rob--)
|
||||
- [node-stream-zip](https://github.com/antelle/node-stream-zip) - created by [antelle](https://github.com/antelle)
|
||||
- [TMS.js](https://github.com/themitosan/TMS.js) by [TheMitoSan](https://github.com/themitosan) <sup>*(Hi!)*</sup>
|
||||
- [TMS.js](https://github.com/themitosan/TMS.js) by [TheMitoSan](https://github.com/themitosan/) <sup><i>(Hi!)</i></sup>
|
||||
|
||||
_**IMPORTANT**: This software does not allow you to obtain free PS4 Games / Apps._
|
||||
<u><i><b>IMPORTANT</b>: This software does not allow you to obtain free PS4 Games / Apps.</i></u>
|
131
install.sh
|
@ -1,131 +0,0 @@
|
|||
#########################################################################
|
||||
### === Variables ===
|
||||
#########################################################################
|
||||
|
||||
# NW.js Version
|
||||
NWJS_VER="0.92.0"
|
||||
|
||||
# SDL Version
|
||||
SDL_VER="2.30.7"
|
||||
|
||||
# Files / dirs to be removed
|
||||
REM_FILES_DIR_LIST=(
|
||||
"sdl2"
|
||||
"sdl2.zip"
|
||||
"nwjs.tar.gz"
|
||||
"nwjs-sdk-v$NWJS_VER-linux-x64"
|
||||
)
|
||||
|
||||
|
||||
#########################################################################
|
||||
### === Functions ===
|
||||
#########################################################################
|
||||
|
||||
# Remove files and dirs
|
||||
removeFilesDirs(){
|
||||
|
||||
# Process remove list
|
||||
for entry in "${REM_FILES_DIR_LIST[@]}"
|
||||
do
|
||||
|
||||
# Check if file / dir exists. If so, remove it.
|
||||
if [ -f $entry ]; then
|
||||
echo -e "Removing $entry"
|
||||
rm "$entry"
|
||||
fi
|
||||
if [ -d $entry ]; then
|
||||
echo -e "Removing $entry"
|
||||
rm -rf "$entry"
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
#########################################################################
|
||||
### === Main Script ===
|
||||
#########################################################################
|
||||
|
||||
clear
|
||||
echo
|
||||
echo " #=============================================================#"
|
||||
echo
|
||||
echo " fpPS4 Temmie's Launcher - Install Script"
|
||||
echo " Written by @themitosan"
|
||||
echo
|
||||
echo " IMPORTANT: This script requires internet connection and"
|
||||
echo " curl, tar and unzip packages installed to work!"
|
||||
echo
|
||||
echo " #=============================================================#"
|
||||
|
||||
echo
|
||||
echo "=== Removing possible leftover files / folders"
|
||||
removeFilesDirs
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Downloading nw.js (Ver. $NWJS_VER)"
|
||||
curl https://dl.nwjs.io/v$NWJS_VER/nwjs-sdk-v$NWJS_VER-linux-x64.tar.gz -o nwjs.tar.gz
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Downloading SDL2 (Ver. $SDL_VER)"
|
||||
curl -L https://github.com/libsdl-org/SDL/releases/download/release-$SDL_VER/SDL2-$SDL_VER-win32-x64.zip -o sdl2.zip
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Extracting nw.js"
|
||||
tar -xvzf nwjs.tar.gz
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Extracting SDL2"
|
||||
unzip -d sdl2 sdl2.zip
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Prepare nw.js folder"
|
||||
cd Nwjs
|
||||
rm -rf *
|
||||
echo "" > .gitkeep
|
||||
cd ..
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Checking if Emu folder exists"
|
||||
if ! [ -d Emu ]; then
|
||||
echo "Creating Emu dir..."
|
||||
mkdir Emu
|
||||
fi
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Moving files"
|
||||
mv -f nwjs-sdk-v$NWJS_VER-linux-x64/* Nwjs/
|
||||
mv -f sdl2/SDL2.dll Emu/
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Removing leftover files / folders"
|
||||
removeFilesDirs
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo "=== Updating permissions for running / updating launcher (chmod)"
|
||||
chmod +x launcher.sh
|
||||
chmod +x update.sh
|
||||
chmod +x Nwjs/nw
|
||||
echo Done!
|
||||
|
||||
echo
|
||||
echo -e "\033[1;32m==== Process Complete! ====\033[0m"
|
||||
echo '---> In order to start Launcher, run "./launcher.sh"'
|
||||
echo '---> To update, run "./update.sh"'
|
||||
echo
|
||||
echo 'TIP: You can add "launcher.sh" as a non-steam game on your Steam!'
|
||||
echo
|
||||
echo Also - You will need wine to run fpPS4 on non-windows systems!
|
||||
echo The installation process may change depending of which distro you are running.
|
||||
echo
|
||||
read -p "Press [ENTER] to exit"
|
||||
clear
|
|
@ -1,6 +0,0 @@
|
|||
stty -echo
|
||||
clear
|
||||
echo "Running fpPS4 Temmie's Launcher - Please Wait..."
|
||||
./Nwjs/nw .
|
||||
stty echo
|
||||
exit
|
16
package.json
|
@ -1,29 +1,23 @@
|
|||
{
|
||||
"version": "1.2.4",
|
||||
"version": "1.2.3",
|
||||
"license": "GPL-2",
|
||||
"author": "TheMitoSan",
|
||||
"main": "App/index.htm",
|
||||
"name": "fpPS4 Temmie's Launcher",
|
||||
"chromium-args": "--disable-raf-throttling",
|
||||
"description": "A simple launcher for fpPS4 project",
|
||||
"repository": "https://github.com/themitosan/fpPS4-Temmie-s-Launcher",
|
||||
"window": {
|
||||
"frame": true,
|
||||
"width": 1186,
|
||||
"height": 710,
|
||||
"toolbar": true,
|
||||
"min_width": 1102,
|
||||
"min_height": 680,
|
||||
"min_height": 626,
|
||||
"fullscreen": false,
|
||||
"position": "center",
|
||||
"theme-color": "#002",
|
||||
"theme-color": "#000",
|
||||
"icon": "App/img/logo.png",
|
||||
"title": "fpPS4 Temmie's Launcher - Please wait..."
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/themitosan/fpPS4-Temmie-s-Launcher/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/themitosan/fpPS4-Temmie-s-Launcher.git"
|
||||
"title": "fpPS4 Temmie's Launcher"
|
||||
}
|
||||
}
|
11
update.bat
|
@ -1,11 +0,0 @@
|
|||
@echo off
|
||||
cls
|
||||
title Updating fpPS4 Temmie's Launcher - Please Wait...
|
||||
echo.
|
||||
echo Updating fpPS4 Temmie's Launcher - Please wait
|
||||
echo IMPORTANT: Make sure to have Git installed on your OS!
|
||||
echo.
|
||||
git reset --hard
|
||||
git pull
|
||||
pause
|
||||
exit
|
10
update.sh
|
@ -1,10 +0,0 @@
|
|||
stty -echo
|
||||
clear
|
||||
echo
|
||||
echo "Updating fpPS4 Temmie's Launcher - Please Wait..."
|
||||
echo "IMPORTANT: Make sure to have git installed on your OS / Distro!"
|
||||
echo
|
||||
git reset --hard
|
||||
git pull
|
||||
stty echo
|
||||
exit
|