Compare commits
138 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
480a3fe171 | ||
|
|
b160eac49f | ||
|
|
37ba82b8b7 | ||
|
|
2d604145f1 | ||
|
|
d60a6df313 | ||
|
|
236d9e3028 | ||
|
|
175327e711 | ||
|
|
6342f99504 | ||
|
|
6164ae9f60 | ||
|
|
d2a5b70b2e | ||
|
|
b2be5dcb59 | ||
|
|
b67c03cc75 | ||
|
|
d613701780 | ||
|
|
4b62562fce | ||
|
|
6ffaca45da | ||
|
|
56fe0b32e6 | ||
|
|
f7c0d6af73 | ||
|
|
b625e2c47a | ||
|
|
97300d59a9 | ||
|
|
f45840a29f | ||
|
|
bfff6ed406 | ||
|
|
ad6f5fd6af | ||
|
|
7bdf349b9d | ||
|
|
9412fbcefb | ||
|
|
c2af0097c5 | ||
|
|
9e5b69ee54 | ||
|
|
f6e0d1d368 | ||
|
|
5bb18bee17 | ||
|
|
d0fb219939 | ||
|
|
e2b04726cf | ||
|
|
b293cdc9ba | ||
|
|
3f93b3a39d | ||
|
|
a4de6e45db | ||
|
|
213a89ab72 | ||
|
|
8dcca62d0c | ||
|
|
4ed0bcbda8 | ||
|
|
b2587e676d | ||
|
|
90af9b2f01 | ||
|
|
d915a0b945 | ||
|
|
ac9c5eaae9 | ||
|
|
0891da303c | ||
|
|
55e9b51faa | ||
|
|
55dc0ade47 | ||
|
|
2cf7083718 | ||
|
|
15df532d68 | ||
|
|
884d2302a9 | ||
|
|
bacdfd6018 | ||
|
|
dc7a3bbbd3 | ||
|
|
ff0d791783 | ||
|
|
a3d8a0dde0 | ||
|
|
a8c908d113 | ||
|
|
01849d5305 | ||
|
|
23968d3e2b | ||
|
|
7246a64ae5 | ||
|
|
729e050adb | ||
|
|
003452fbbb | ||
|
|
419b6bd0a3 | ||
|
|
668c3d9a08 | ||
|
|
9a6f878051 | ||
|
|
50fc750154 | ||
|
|
9fe8235eda | ||
|
|
f7b9c48998 | ||
|
|
17bf27c018 | ||
|
|
80ca5ea5fd | ||
|
|
3afa9ca403 | ||
|
|
842190e15e | ||
|
|
717775d9ab | ||
|
|
a19bb91041 | ||
|
|
a545982a28 | ||
|
|
2109df04ca | ||
|
|
f485cf8ebc | ||
|
|
bb48110f95 | ||
|
|
718adda749 | ||
|
|
a170c7ccb1 | ||
|
|
fec3fe3b6b | ||
|
|
00f19c9777 | ||
|
|
93aae28593 | ||
|
|
8be2b907b3 | ||
|
|
fcca07765b | ||
|
|
559e4e75eb | ||
|
|
8ae84614d5 | ||
|
|
18a7e8b22c | ||
|
|
01120f6120 | ||
|
|
07be6bb5ae | ||
|
|
39b4905ef1 | ||
|
|
6c49a5aa9d | ||
|
|
aaeff2ea0f | ||
|
|
cd48e78667 | ||
|
|
f2ab4e840e | ||
|
|
9a476f8283 | ||
|
|
8e24ad724c | ||
|
|
c70aba2ca5 | ||
|
|
c6a20961b8 | ||
|
|
4741354883 | ||
|
|
a3051f5d58 | ||
|
|
730207e75b | ||
|
|
27e067889d | ||
|
|
22c9433c1c | ||
|
|
c6b558cb3d | ||
|
|
a6d5598c08 | ||
|
|
13ee2abeef | ||
|
|
ca9c841477 | ||
|
|
0dbae3c46c | ||
|
|
045bcbc7da | ||
|
|
9f98e28b08 | ||
|
|
59dfbae9b4 | ||
|
|
3f0250957b | ||
|
|
73595d93f3 | ||
|
|
19b8755c89 | ||
|
|
14aad730de | ||
|
|
6c7eec5778 | ||
|
|
2c5ce5763a | ||
|
|
b568e1387a | ||
|
|
85bd46e457 | ||
|
|
bd4a77992e | ||
|
|
a8750ce8ad | ||
|
|
4e8887c80b | ||
|
|
c38a0cdec9 | ||
|
|
6f961edcb1 | ||
|
|
bdd9f30404 | ||
|
|
f94d5faaf2 | ||
|
|
c1ffd93f28 | ||
|
|
05bf7af859 | ||
|
|
eae359a3b8 | ||
|
|
2156906341 | ||
|
|
e7bd669362 | ||
|
|
17ac5b5e06 | ||
|
|
671cc753b5 | ||
|
|
fd81b47413 | ||
|
|
710b07a857 | ||
|
|
5b93d2642b | ||
|
|
38d792fd97 | ||
|
|
fed266f5ac | ||
|
|
a547d10ab9 | ||
|
|
4cc6043737 | ||
|
|
0a42313b6f | ||
|
|
0b53f541d1 | ||
|
|
ddd17b18d7 |
4
.github/ISSUE_TEMPLATE/emu_bug_report.yaml
vendored
@@ -66,10 +66,6 @@ body:
|
||||
|
||||
Performance issues as a result of not meeting our hardware requirements are not valid.
|
||||
|
||||
Please read our known issues pages for AMD and Intel drivers.
|
||||
- [Intel Drivers](https://github.com/PCSX2/pcsx2/wiki/OpenGL-and-Intel-GPUs-All-you-need-to-know).
|
||||
- [AMD Drivers](https://github.com/PCSX2/pcsx2/wiki/OpenGL-and-AMD-GPUs---All-you-need-to-know).
|
||||
|
||||
We are **not** accepting issues related to the **libretro** core. The libretro core is being maintained separately at this time
|
||||
- type: input
|
||||
id: rev
|
||||
|
||||
8
.github/workflows/linux_build_flatpak.yml
vendored
@@ -96,7 +96,7 @@ jobs:
|
||||
|
||||
- name: Build Flatpak (beta)
|
||||
if: ${{ inputs.stableBuild == false || inputs.stableBuild == 'false' }}
|
||||
uses: flathub-infra/flatpak-github-actions/flatpak-builder@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c
|
||||
with:
|
||||
bundle: ${{ steps.artifact-metadata.outputs.artifact-name }}.flatpak
|
||||
upload-artifact: false
|
||||
@@ -112,7 +112,7 @@ jobs:
|
||||
|
||||
- name: Build Flatpak (stable)
|
||||
if: ${{ inputs.stableBuild == true || inputs.stableBuild == 'true' }}
|
||||
uses: flathub-infra/flatpak-github-actions/flatpak-builder@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c
|
||||
with:
|
||||
bundle: ${{ steps.artifact-metadata.outputs.artifact-name }}.flatpak
|
||||
upload-artifact: false
|
||||
@@ -132,7 +132,7 @@ jobs:
|
||||
|
||||
- name: Push to Flathub (beta)
|
||||
if: ${{ inputs.publish == true && (inputs.stableBuild == false || inputs.stableBuild == 'false') }}
|
||||
uses: flathub-infra/flatpak-github-actions/flat-manager@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c
|
||||
with:
|
||||
flat-manager-url: https://hub.flathub.org/
|
||||
repository: beta
|
||||
@@ -141,7 +141,7 @@ jobs:
|
||||
|
||||
- name: Push to Flathub (stable)
|
||||
if: ${{ inputs.publish == true && (inputs.stableBuild == true || inputs.stableBuild == 'true') }}
|
||||
uses: flathub-infra/flatpak-github-actions/flat-manager@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c
|
||||
with:
|
||||
flat-manager-url: https://hub.flathub.org/
|
||||
repository: stable
|
||||
|
||||
4
.github/workflows/release_cut_new.yml
vendored
@@ -68,7 +68,7 @@ jobs:
|
||||
mv ./release-notes.md ${GITHUB_WORKSPACE}/release-notes.md
|
||||
|
||||
- name: Create a GitHub Release (Manual)
|
||||
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda
|
||||
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631
|
||||
if: steps.tag_version.outputs.new_tag && github.event_name == 'workflow_dispatch'
|
||||
with:
|
||||
body_path: ./release-notes.md
|
||||
@@ -77,7 +77,7 @@ jobs:
|
||||
tag_name: ${{ steps.tag_version.outputs.new_tag }}
|
||||
|
||||
- name: Create a GitHub Release (Push)
|
||||
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda
|
||||
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631
|
||||
if: steps.tag_version.outputs.new_tag && github.event_name != 'workflow_dispatch'
|
||||
with:
|
||||
body_path: ./release-notes.md
|
||||
|
||||
@@ -23,6 +23,8 @@ SDL=SDL3-3.2.10
|
||||
QT=6.9.0
|
||||
ZSTD=1.5.7
|
||||
KDDOCKWIDGETS=2.2.3
|
||||
PLUTOVG=0.0.13
|
||||
PLUTOSVG=0.0.6
|
||||
|
||||
SHADERC=2024.1
|
||||
SHADERC_GLSLANG=142052fa30f9eca191aa9dcf65359fcaed09eeec
|
||||
@@ -51,6 +53,8 @@ aa27e4454ce631c5a17924ce0624eac736da19fc6f5a2ab15a6c58da7b36950f shaderc-glslan
|
||||
5d866ce34a4b6908e262e5ebfffc0a5e11dd411640b5f24c85a80ad44c0d4697 shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz
|
||||
03ee1a2c06f3b61008478f4abe9423454e53e580b9488b47c8071547c6a9db47 shaderc-spirv-tools-$SHADERC_SPIRVTOOLS.tar.gz
|
||||
b8529755b2d54205341766ae168e83177c6120660539f9afba71af6bca4b81ec KDDockWidgets-$KDDOCKWIDGETS.tar.gz
|
||||
f49d62709d6bf1808ddc9b8f71e22a755484f75c7bbb0fb368f7fb2ffc7cf645 plutovg-$PLUTOVG.tar.gz
|
||||
01f8aee511bd587a602a166642a96522cc9522efd1e38c2d00e4fbc0aa22d7a0 plutosvg-$PLUTOSVG.tar.gz
|
||||
EOF
|
||||
|
||||
curl -L \
|
||||
@@ -71,7 +75,9 @@ curl -L \
|
||||
-o "shaderc-glslang-$SHADERC_GLSLANG.tar.gz" "https://github.com/KhronosGroup/glslang/archive/$SHADERC_GLSLANG.tar.gz" \
|
||||
-o "shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Headers/archive/$SHADERC_SPIRVHEADERS.tar.gz" \
|
||||
-o "shaderc-spirv-tools-$SHADERC_SPIRVTOOLS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Tools/archive/$SHADERC_SPIRVTOOLS.tar.gz" \
|
||||
-o "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" "https://github.com/KDAB/KDDockWidgets/archive/v$KDDOCKWIDGETS.tar.gz"
|
||||
-o "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" "https://github.com/KDAB/KDDockWidgets/archive/v$KDDOCKWIDGETS.tar.gz" \
|
||||
-o "plutovg-$PLUTOVG.tar.gz" "https://github.com/sammycage/plutovg/archive/v$PLUTOVG.tar.gz" \
|
||||
-o "plutosvg-$PLUTOSVG.tar.gz" "https://github.com/sammycage/plutosvg/archive/v$PLUTOSVG.tar.gz"
|
||||
|
||||
shasum -a 256 --check SHASUMS
|
||||
|
||||
@@ -221,6 +227,24 @@ cmake --build build --parallel
|
||||
ninja -C build install
|
||||
cd ..
|
||||
|
||||
echo "Building PlutoVG..."
|
||||
rm -fr "plutovg-$PLUTOVG"
|
||||
tar xf "plutovg-$PLUTOVG.tar.gz"
|
||||
cd "plutovg-$PLUTOVG"
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DPLUTOVG_BUILD_EXAMPLES=OFF -B build -G Ninja
|
||||
cmake --build build --parallel
|
||||
ninja -C build install
|
||||
cd ..
|
||||
|
||||
echo "Building PlutoSVG..."
|
||||
rm -fr "plutosvg-$PLUTOSVG"
|
||||
tar xf "plutosvg-$PLUTOSVG.tar.gz"
|
||||
cd "plutosvg-$PLUTOSVG"
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$INSTALLDIR" -DCMAKE_INSTALL_PREFIX="$INSTALLDIR" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=OFF -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build -G Ninja
|
||||
cmake --build build --parallel
|
||||
ninja -C build install
|
||||
cd ..
|
||||
|
||||
echo "Building shaderc..."
|
||||
rm -fr "shaderc-$SHADERC"
|
||||
tar xf "shaderc-$SHADERC.tar.gz"
|
||||
|
||||
28
.github/workflows/scripts/linux/flatpak/modules/24-plutovg.json
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "plutovg",
|
||||
"buildsystem": "cmake-ninja",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"-DBUILD_SHARED_LIBS=ON",
|
||||
"-DPLUTOVG_BUILD_EXAMPLES=OFF"
|
||||
],
|
||||
"build-options": {
|
||||
"strip": true
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/sammycage/plutovg.git",
|
||||
"tag": "v0.0.13",
|
||||
"sha256": "5e4712cf873b0c7829a4a6157763e2ad3ac49164"
|
||||
}
|
||||
],
|
||||
"cleanup": [
|
||||
"/bin",
|
||||
"/include",
|
||||
"/lib/*.a",
|
||||
"/lib/*.la",
|
||||
"/lib/cmake",
|
||||
"/lib/pkgconfig"
|
||||
]
|
||||
}
|
||||
29
.github/workflows/scripts/linux/flatpak/modules/25-plutosvg.json
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "plutosvg",
|
||||
"buildsystem": "cmake-ninja",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"-DBUILD_SHARED_LIBS=ON",
|
||||
"-DPLUTOSVG_BUILD_EXAMPLES=OFF",
|
||||
"-DPLUTOSVG_ENABLE_FREETYPE=ON"
|
||||
],
|
||||
"build-options": {
|
||||
"strip": true
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/sammycage/plutosvg.git",
|
||||
"tag": "v0.0.6",
|
||||
"sha256": "c5388fa96feca1f1376a3d0485d5e35159452707"
|
||||
}
|
||||
],
|
||||
"cleanup": [
|
||||
"/bin",
|
||||
"/include",
|
||||
"/lib/*.a",
|
||||
"/lib/*.la",
|
||||
"/lib/cmake",
|
||||
"/lib/pkgconfig"
|
||||
]
|
||||
}
|
||||
@@ -30,6 +30,8 @@
|
||||
"modules/21-libbacktrace.json",
|
||||
"modules/22-shaderc.json",
|
||||
"modules/23-kddockwidgets.json",
|
||||
"modules/24-plutovg.json",
|
||||
"modules/25-plutosvg.json",
|
||||
{
|
||||
"name": "pcsx2",
|
||||
"buildsystem": "cmake-ninja",
|
||||
|
||||
@@ -50,6 +50,8 @@ FFMPEG=6.0
|
||||
MOLTENVK=1.2.9
|
||||
QT=6.7.3
|
||||
KDDOCKWIDGETS=2.2.3
|
||||
PLUTOVG=0.0.13
|
||||
PLUTOSVG=0.0.6
|
||||
|
||||
SHADERC=2024.1
|
||||
SHADERC_GLSLANG=142052fa30f9eca191aa9dcf65359fcaed09eeec
|
||||
@@ -95,6 +97,8 @@ aa27e4454ce631c5a17924ce0624eac736da19fc6f5a2ab15a6c58da7b36950f shaderc-glslan
|
||||
5d866ce34a4b6908e262e5ebfffc0a5e11dd411640b5f24c85a80ad44c0d4697 shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz
|
||||
03ee1a2c06f3b61008478f4abe9423454e53e580b9488b47c8071547c6a9db47 shaderc-spirv-tools-$SHADERC_SPIRVTOOLS.tar.gz
|
||||
b8529755b2d54205341766ae168e83177c6120660539f9afba71af6bca4b81ec KDDockWidgets-$KDDOCKWIDGETS.tar.gz
|
||||
f49d62709d6bf1808ddc9b8f71e22a755484f75c7bbb0fb368f7fb2ffc7cf645 plutovg-$PLUTOVG.tar.gz
|
||||
01f8aee511bd587a602a166642a96522cc9522efd1e38c2d00e4fbc0aa22d7a0 plutosvg-$PLUTOSVG.tar.gz
|
||||
EOF
|
||||
|
||||
curl -C - -L \
|
||||
@@ -117,7 +121,9 @@ curl -C - -L \
|
||||
-o "shaderc-glslang-$SHADERC_GLSLANG.tar.gz" "https://github.com/KhronosGroup/glslang/archive/$SHADERC_GLSLANG.tar.gz" \
|
||||
-o "shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Headers/archive/$SHADERC_SPIRVHEADERS.tar.gz" \
|
||||
-o "shaderc-spirv-tools-$SHADERC_SPIRVTOOLS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Tools/archive/$SHADERC_SPIRVTOOLS.tar.gz" \
|
||||
-o "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" "https://github.com/KDAB/KDDockWidgets/archive/v$KDDOCKWIDGETS.tar.gz"
|
||||
-o "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" "https://github.com/KDAB/KDDockWidgets/archive/v$KDDOCKWIDGETS.tar.gz" \
|
||||
-o "plutovg-$PLUTOVG.tar.gz" "https://github.com/sammycage/plutovg/archive/v$PLUTOVG.tar.gz" \
|
||||
-o "plutosvg-$PLUTOSVG.tar.gz" "https://github.com/sammycage/plutosvg/archive/v$PLUTOSVG.tar.gz"
|
||||
|
||||
shasum -a 256 --check SHASUMS
|
||||
|
||||
@@ -370,6 +376,24 @@ cmake --build build --parallel
|
||||
cmake --install build
|
||||
cd ..
|
||||
|
||||
echo "Building PlutoVG..."
|
||||
rm -fr "plutovg-$PLUTOVG"
|
||||
tar xf "plutovg-$PLUTOVG.tar.gz"
|
||||
cd "plutovg-$PLUTOVG"
|
||||
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DPLUTOVG_BUILD_EXAMPLES=OFF -B build
|
||||
make -C build "-j$NPROCS"
|
||||
make -C build install
|
||||
cd ..
|
||||
|
||||
echo "Building PlutoSVG..."
|
||||
rm -fr "plutosvg-$PLUTOSVG"
|
||||
tar xf "plutosvg-$PLUTOSVG.tar.gz"
|
||||
cd "plutosvg-$PLUTOSVG"
|
||||
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build
|
||||
make -C build "-j$NPROCS"
|
||||
make -C build install
|
||||
cd ..
|
||||
|
||||
echo "Cleaning up..."
|
||||
cd ..
|
||||
rm -rf deps-build
|
||||
|
||||
@@ -32,6 +32,8 @@ FFMPEG=6.0
|
||||
MOLTENVK=1.2.9
|
||||
QT=6.7.3
|
||||
KDDOCKWIDGETS=2.2.3
|
||||
PLUTOVG=0.0.13
|
||||
PLUTOSVG=0.0.6
|
||||
|
||||
SHADERC=2024.1
|
||||
SHADERC_GLSLANG=142052fa30f9eca191aa9dcf65359fcaed09eeec
|
||||
@@ -75,6 +77,8 @@ aa27e4454ce631c5a17924ce0624eac736da19fc6f5a2ab15a6c58da7b36950f shaderc-glslan
|
||||
5d866ce34a4b6908e262e5ebfffc0a5e11dd411640b5f24c85a80ad44c0d4697 shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz
|
||||
03ee1a2c06f3b61008478f4abe9423454e53e580b9488b47c8071547c6a9db47 shaderc-spirv-tools-$SHADERC_SPIRVTOOLS.tar.gz
|
||||
b8529755b2d54205341766ae168e83177c6120660539f9afba71af6bca4b81ec KDDockWidgets-$KDDOCKWIDGETS.tar.gz
|
||||
f49d62709d6bf1808ddc9b8f71e22a755484f75c7bbb0fb368f7fb2ffc7cf645 plutovg-$PLUTOVG.tar.gz
|
||||
01f8aee511bd587a602a166642a96522cc9522efd1e38c2d00e4fbc0aa22d7a0 plutosvg-$PLUTOSVG.tar.gz
|
||||
EOF
|
||||
|
||||
curl -L \
|
||||
@@ -97,7 +101,9 @@ curl -L \
|
||||
-o "shaderc-glslang-$SHADERC_GLSLANG.tar.gz" "https://github.com/KhronosGroup/glslang/archive/$SHADERC_GLSLANG.tar.gz" \
|
||||
-o "shaderc-spirv-headers-$SHADERC_SPIRVHEADERS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Headers/archive/$SHADERC_SPIRVHEADERS.tar.gz" \
|
||||
-o "shaderc-spirv-tools-$SHADERC_SPIRVTOOLS.tar.gz" "https://github.com/KhronosGroup/SPIRV-Tools/archive/$SHADERC_SPIRVTOOLS.tar.gz" \
|
||||
-o "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" "https://github.com/KDAB/KDDockWidgets/archive/v$KDDOCKWIDGETS.tar.gz"
|
||||
-o "KDDockWidgets-$KDDOCKWIDGETS.tar.gz" "https://github.com/KDAB/KDDockWidgets/archive/v$KDDOCKWIDGETS.tar.gz" \
|
||||
-o "plutovg-$PLUTOVG.tar.gz" "https://github.com/sammycage/plutovg/archive/v$PLUTOVG.tar.gz" \
|
||||
-o "plutosvg-$PLUTOSVG.tar.gz" "https://github.com/sammycage/plutosvg/archive/v$PLUTOSVG.tar.gz"
|
||||
|
||||
shasum -a 256 --check SHASUMS
|
||||
|
||||
@@ -335,6 +341,24 @@ make -C build "-j$NPROCS"
|
||||
make -C build install
|
||||
cd ..
|
||||
|
||||
echo "Building PlutoVG..."
|
||||
rm -fr "plutovg-$PLUTOVG"
|
||||
tar xf "plutovg-$PLUTOVG.tar.gz"
|
||||
cd "plutovg-$PLUTOVG"
|
||||
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DPLUTOVG_BUILD_EXAMPLES=OFF -B build
|
||||
make -C build "-j$NPROCS"
|
||||
make -C build install
|
||||
cd ..
|
||||
|
||||
echo "Building PlutoSVG..."
|
||||
rm -fr "plutosvg-$PLUTOSVG"
|
||||
tar xf "plutosvg-$PLUTOSVG.tar.gz"
|
||||
cd "plutosvg-$PLUTOSVG"
|
||||
cmake "${CMAKE_COMMON[@]}" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build
|
||||
make -C build "-j$NPROCS"
|
||||
make -C build install
|
||||
cd ..
|
||||
|
||||
echo "Cleaning up..."
|
||||
cd ..
|
||||
rm -rf deps-build
|
||||
|
||||
411
.github/workflows/scripts/releases/generate-release-notes/package-lock.json
generated
vendored
@@ -9,123 +9,11 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@octokit/plugin-retry": "^3.0.9",
|
||||
"@octokit/plugin-throttling": "^3.5.2",
|
||||
"@octokit/plugin-throttling": "^9.6.0",
|
||||
"@octokit/rest": "^21.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/auth-token": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
|
||||
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/core": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
|
||||
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@octokit/auth-token": "^2.4.4",
|
||||
"@octokit/graphql": "^4.5.8",
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/request-error": "^2.0.5",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"before-after-hook": "^2.2.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/endpoint": {
|
||||
"version": "6.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
|
||||
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/graphql": {
|
||||
"version": "4.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
|
||||
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@octokit/request": "^5.6.0",
|
||||
"@octokit/types": "^6.0.3",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/openapi-types": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz",
|
||||
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
|
||||
},
|
||||
"node_modules/@octokit/plugin-retry": {
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz",
|
||||
"integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"bottleneck": "^2.15.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-throttling": {
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz",
|
||||
"integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.1",
|
||||
"bottleneck": "^2.15.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@octokit/core": "^3.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz",
|
||||
"integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@octokit/endpoint": "^6.0.1",
|
||||
"@octokit/request-error": "^2.1.0",
|
||||
"@octokit/types": "^6.16.1",
|
||||
"is-plain-object": "^5.0.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"universal-user-agent": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request-error": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
|
||||
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"deprecation": "^2.0.0",
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest": {
|
||||
"version": "21.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
|
||||
"integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/core": "^6.1.4",
|
||||
"@octokit/plugin-paginate-rest": "^11.4.2",
|
||||
"@octokit/plugin-request-log": "^5.3.1",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^13.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/@octokit/auth-token": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
|
||||
"integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
|
||||
@@ -134,7 +22,7 @@
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/@octokit/core": {
|
||||
"node_modules/@octokit/core": {
|
||||
"version": "6.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.4.tgz",
|
||||
"integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==",
|
||||
@@ -152,7 +40,22 @@
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/@octokit/endpoint": {
|
||||
"node_modules/@octokit/core/node_modules/@octokit/openapi-types": {
|
||||
"version": "24.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
|
||||
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@octokit/core/node_modules/@octokit/types": {
|
||||
"version": "13.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
|
||||
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^24.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/endpoint": {
|
||||
"version": "10.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.3.tgz",
|
||||
"integrity": "sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==",
|
||||
@@ -165,7 +68,22 @@
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/@octokit/graphql": {
|
||||
"node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": {
|
||||
"version": "24.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
|
||||
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@octokit/endpoint/node_modules/@octokit/types": {
|
||||
"version": "13.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
|
||||
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^24.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/graphql": {
|
||||
"version": "8.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.1.tgz",
|
||||
"integrity": "sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==",
|
||||
@@ -179,6 +97,139 @@
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": {
|
||||
"version": "24.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
|
||||
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@octokit/graphql/node_modules/@octokit/types": {
|
||||
"version": "13.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
|
||||
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^24.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/openapi-types": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.1.0.tgz",
|
||||
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
|
||||
},
|
||||
"node_modules/@octokit/plugin-retry": {
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz",
|
||||
"integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^6.0.3",
|
||||
"bottleneck": "^2.15.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-throttling": {
|
||||
"version": "9.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.6.0.tgz",
|
||||
"integrity": "sha512-zn7m1N3vpJDaVzLqjCRdJ0cRzNiekHEWPi8Ww9xyPNrDt5PStHvVE0eR8wy4RSU8Eg7YO8MHyvn6sv25EGVhhg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^13.7.0",
|
||||
"bottleneck": "^2.15.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@octokit/core": "^6.1.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": {
|
||||
"version": "24.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
|
||||
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": {
|
||||
"version": "13.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
|
||||
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^24.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request": {
|
||||
"version": "9.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.2.tgz",
|
||||
"integrity": "sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/endpoint": "^10.1.3",
|
||||
"@octokit/request-error": "^6.1.7",
|
||||
"@octokit/types": "^13.6.2",
|
||||
"fast-content-type-parse": "^2.0.0",
|
||||
"universal-user-agent": "^7.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request-error": {
|
||||
"version": "6.1.7",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.7.tgz",
|
||||
"integrity": "sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^13.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": {
|
||||
"version": "24.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
|
||||
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@octokit/request-error/node_modules/@octokit/types": {
|
||||
"version": "13.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
|
||||
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^24.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/request/node_modules/@octokit/openapi-types": {
|
||||
"version": "24.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
|
||||
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@octokit/request/node_modules/@octokit/types": {
|
||||
"version": "13.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
|
||||
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^24.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest": {
|
||||
"version": "21.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
|
||||
"integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/core": "^6.1.4",
|
||||
"@octokit/plugin-paginate-rest": "^11.4.2",
|
||||
"@octokit/plugin-request-log": "^5.3.1",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^13.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/@octokit/openapi-types": {
|
||||
"version": "23.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
|
||||
@@ -227,34 +278,6 @@
|
||||
"@octokit/core": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/@octokit/request": {
|
||||
"version": "9.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.2.tgz",
|
||||
"integrity": "sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/endpoint": "^10.1.3",
|
||||
"@octokit/request-error": "^6.1.7",
|
||||
"@octokit/types": "^13.6.2",
|
||||
"fast-content-type-parse": "^2.0.0",
|
||||
"universal-user-agent": "^7.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/@octokit/request-error": {
|
||||
"version": "6.1.7",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.7.tgz",
|
||||
"integrity": "sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^13.6.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/@octokit/types": {
|
||||
"version": "13.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
|
||||
@@ -264,18 +287,6 @@
|
||||
"@octokit/openapi-types": "^23.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/before-after-hook": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
|
||||
"integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@octokit/rest/node_modules/universal-user-agent": {
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
|
||||
"integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/@octokit/types": {
|
||||
"version": "6.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.33.0.tgz",
|
||||
@@ -285,22 +296,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/before-after-hook": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
|
||||
"integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==",
|
||||
"peer": true
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
|
||||
"integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/bottleneck": {
|
||||
"version": "2.19.5",
|
||||
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
|
||||
"integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
|
||||
},
|
||||
"node_modules/deprecation": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
|
||||
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/fast-content-type-parse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
|
||||
@@ -317,77 +322,11 @@
|
||||
],
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/is-plain-object": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
|
||||
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.6.7",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"encoding": "^0.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"encoding": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/universal-user-agent": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
|
||||
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||
"peer": true
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
|
||||
"integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==",
|
||||
"license": "ISC"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@octokit/plugin-retry": "^3.0.9",
|
||||
"@octokit/plugin-throttling": "^3.5.2",
|
||||
"@octokit/plugin-throttling": "^9.6.0",
|
||||
"@octokit/rest": "^21.1.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,8 @@ set ZLIB=1.3.1
|
||||
set ZLIBSHORT=131
|
||||
set ZSTD=1.5.7
|
||||
set KDDOCKWIDGETS=2.2.3
|
||||
set PLUTOVG=0.0.13
|
||||
set PLUTOSVG=0.0.6
|
||||
|
||||
set SHADERC=2024.1
|
||||
set SHADERC_GLSLANG=142052fa30f9eca191aa9dcf65359fcaed09eeec
|
||||
@@ -76,6 +78,8 @@ call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt
|
||||
call :downloadfile "zlib%ZLIBSHORT%.zip" "https://zlib.net/zlib%ZLIBSHORT%.zip" 72af66d44fcc14c22013b46b814d5d2514673dda3d115e64b690c1ad636e7b17 || goto error
|
||||
call :downloadfile "zstd-%ZSTD%.zip" "https://github.com/facebook/zstd/archive/refs/tags/v%ZSTD%.zip" 7897bc5d620580d9b7cd3539c44b59d78f3657d33663fe97a145e07b4ebd69a4 || goto error
|
||||
call :downloadfile "KDDockWidgets-%KDDOCKWIDGETS%.zip" "https://github.com/KDAB/KDDockWidgets/archive/v%KDDOCKWIDGETS%.zip" 1ba8e5b48f3b4d47d2de7121529d448532200fa36d9ed21f93909f6eb03f61cb || goto error
|
||||
call :downloadfile "plutovg-%PLUTOVG%.zip" "https://github.com/sammycage/plutovg/archive/v%PLUTOVG%.zip" e313baaa7c934503ef601c909661a84e5b795dfa12f0354721cac7a9c27be47e || goto error
|
||||
call :downloadfile "plutosvg-%PLUTOSVG%.zip" "https://github.com/sammycage/plutosvg/archive/v%PLUTOSVG%.zip" 24826a70d0b168a66eb16ec9d7eeeba0d4ca9d4babc1199889d374918008426e || goto error
|
||||
|
||||
call :downloadfile "shaderc-%SHADERC%.zip" "https://github.com/google/shaderc/archive/refs/tags/v%SHADERC%.zip" 6c9f42ed6bf42750f5369b089909abfdcf0101488b4a1f41116d5159d00af8e7 || goto error
|
||||
call :downloadfile "shaderc-glslang-%SHADERC_GLSLANG%.zip" "https://github.com/KhronosGroup/glslang/archive/%SHADERC_GLSLANG%.zip" 03ad8a6fa987af4653d0cfe6bdaed41bcf617f1366a151fb1574da75950cd3e8 || goto error
|
||||
@@ -252,6 +256,24 @@ cmake --build build --parallel || goto error
|
||||
ninja -C build install || goto error
|
||||
cd .. || goto error
|
||||
|
||||
echo "Building PlutoVG..."
|
||||
rmdir /S /Q "plutovg-%PLUTOVG%"
|
||||
%SEVENZIP% x "plutovg-%PLUTOVG%.zip" || goto error
|
||||
cd "plutovg-%PLUTOVG%" || goto error
|
||||
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DPLUTOVG_BUILD_EXAMPLES=OFF -B build -G Ninja || goto error
|
||||
cmake --build build --parallel || goto error
|
||||
ninja -C build install || goto error
|
||||
cd .. || goto error
|
||||
|
||||
echo "Building PlutoSVG..."
|
||||
rmdir /S /Q "plutosvg-%PLUTOSVG%"
|
||||
%SEVENZIP% x "plutosvg-%PLUTOSVG%.zip" || goto error
|
||||
cd "plutosvg-%PLUTOSVG%" || goto error
|
||||
cmake %ARM64TOOLCHAIN% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build -G Ninja || goto error
|
||||
cmake --build build --parallel || goto error
|
||||
ninja -C build install || goto error
|
||||
cd .. || goto error
|
||||
|
||||
echo Building shaderc...
|
||||
rmdir /S /Q "shaderc-%SHADERC%"
|
||||
%SEVENZIP% x "shaderc-%SHADERC%.zip" || goto error
|
||||
|
||||
@@ -53,6 +53,8 @@ set ZLIB=1.3.1
|
||||
set ZLIBSHORT=131
|
||||
set ZSTD=1.5.7
|
||||
set KDDOCKWIDGETS=2.2.3
|
||||
set PLUTOVG=0.0.13
|
||||
set PLUTOSVG=0.0.6
|
||||
|
||||
set SHADERC=2024.1
|
||||
set SHADERC_GLSLANG=142052fa30f9eca191aa9dcf65359fcaed09eeec
|
||||
@@ -74,6 +76,8 @@ call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt
|
||||
call :downloadfile "zlib%ZLIBSHORT%.zip" "https://zlib.net/zlib%ZLIBSHORT%.zip" 72af66d44fcc14c22013b46b814d5d2514673dda3d115e64b690c1ad636e7b17 || goto error
|
||||
call :downloadfile "zstd-%ZSTD%.zip" "https://github.com/facebook/zstd/archive/refs/tags/v%ZSTD%.zip" 7897bc5d620580d9b7cd3539c44b59d78f3657d33663fe97a145e07b4ebd69a4 || goto error
|
||||
call :downloadfile "KDDockWidgets-%KDDOCKWIDGETS%.zip" "https://github.com/KDAB/KDDockWidgets/archive/v%KDDOCKWIDGETS%.zip" 1ba8e5b48f3b4d47d2de7121529d448532200fa36d9ed21f93909f6eb03f61cb || goto error
|
||||
call :downloadfile "plutovg-%PLUTOVG%.zip" "https://github.com/sammycage/plutovg/archive/v%PLUTOVG%.zip" e313baaa7c934503ef601c909661a84e5b795dfa12f0354721cac7a9c27be47e || goto error
|
||||
call :downloadfile "plutosvg-%PLUTOSVG%.zip" "https://github.com/sammycage/plutosvg/archive/v%PLUTOSVG%.zip" 24826a70d0b168a66eb16ec9d7eeeba0d4ca9d4babc1199889d374918008426e || goto error
|
||||
|
||||
call :downloadfile "shaderc-%SHADERC%.zip" "https://github.com/google/shaderc/archive/refs/tags/v%SHADERC%.zip" 6c9f42ed6bf42750f5369b089909abfdcf0101488b4a1f41116d5159d00af8e7 || goto error
|
||||
call :downloadfile "shaderc-glslang-%SHADERC_GLSLANG%.zip" "https://github.com/KhronosGroup/glslang/archive/%SHADERC_GLSLANG%.zip" 03ad8a6fa987af4653d0cfe6bdaed41bcf617f1366a151fb1574da75950cd3e8 || goto error
|
||||
@@ -256,6 +260,24 @@ cmake --build build --parallel || goto error
|
||||
ninja -C build install || goto error
|
||||
cd .. || goto error
|
||||
|
||||
echo "Building PlutoVG..."
|
||||
rmdir /S /Q "plutovg-%PLUTOVG%"
|
||||
%SEVENZIP% x "plutovg-%PLUTOVG%.zip" || goto error
|
||||
cd "plutovg-%PLUTOVG%" || goto error
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DPLUTOVG_BUILD_EXAMPLES=OFF -B build -G Ninja || goto error
|
||||
cmake --build build --parallel || goto error
|
||||
ninja -C build install || goto error
|
||||
cd .. || goto error
|
||||
|
||||
echo "Building PlutoSVG..."
|
||||
rmdir /S /Q "plutosvg-%PLUTOSVG%"
|
||||
%SEVENZIP% x "plutosvg-%PLUTOSVG%.zip" || goto error
|
||||
cd "plutosvg-%PLUTOSVG%" || goto error
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="%INSTALLDIR%" -DCMAKE_INSTALL_PREFIX="%INSTALLDIR%" -DBUILD_SHARED_LIBS=ON -DPLUTOSVG_ENABLE_FREETYPE=ON -DPLUTOSVG_BUILD_EXAMPLES=OFF -B build -G Ninja || goto error
|
||||
cmake --build build --parallel || goto error
|
||||
ninja -C build install || goto error
|
||||
cd .. || goto error
|
||||
|
||||
echo Building shaderc...
|
||||
rmdir /S /Q "shaderc-%SHADERC%"
|
||||
%SEVENZIP% x "shaderc-%SHADERC%.zip" || goto error
|
||||
|
||||
1
3rdparty/imgui/CMakeLists.txt
vendored
@@ -19,6 +19,7 @@ add_library(imgui
|
||||
target_include_directories(imgui PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||
target_include_directories(imgui PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
||||
target_link_libraries(imgui PUBLIC Freetype::Freetype)
|
||||
target_link_libraries(imgui PUBLIC plutosvg::plutosvg)
|
||||
|
||||
# Needed for macOS compile.
|
||||
set_property(TARGET imgui PROPERTY CXX_STANDARD 17)
|
||||
|
||||
2
3rdparty/imgui/imgui.vcxproj
vendored
@@ -33,7 +33,7 @@
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include;$(ProjectDir)src;$(SolutionDir)deps\include\freetype2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)include;$(ProjectDir)src;$(SolutionDir)deps\include\freetype2;$(SolutionDir)deps\include\plutovg;$(SolutionDir)deps\include\plutosvg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
|
||||
2
3rdparty/imgui/include/imconfig.h
vendored
@@ -110,7 +110,7 @@
|
||||
operator MyVec4() const { return MyVec4(x,y,z,w); }
|
||||
*/
|
||||
//---- ...Or use Dear ImGui's own very basic math operators.
|
||||
//#define IMGUI_DEFINE_MATH_OPERATORS
|
||||
#define IMGUI_DEFINE_MATH_OPERATORS
|
||||
|
||||
//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices.
|
||||
// Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices).
|
||||
|
||||
@@ -1749,7 +1749,7 @@
|
||||
- hashes:
|
||||
- md5: f95ea9eb021181b888229df60ba8effd
|
||||
size: 2159050752
|
||||
name: Shadow the Hedgehog (Europe, Australia) (En,Fr,De,Es,It)
|
||||
name: Shadow the Hedgehog (Europe, Australia) (En,Ja,Fr,De,Es,It)
|
||||
serial: SLES-53542
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -8524,7 +8524,7 @@
|
||||
- hashes:
|
||||
- md5: ce030f48dcb588682902b5a569baa24e
|
||||
size: 4677795840
|
||||
name: 007 - Quantum of Solace (USA)
|
||||
name: 007 - Quantum of Solace (USA) (En,Fr)
|
||||
serial: SLUS-21813
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -8620,7 +8620,7 @@
|
||||
- hashes:
|
||||
- md5: c15a1707d1c89728e0c596b97ba91b27
|
||||
size: 4313153536
|
||||
name: Official PlayStation 2 Magazine Sonderausgabe 2004-3 (Germany) (En,Fr,De,Es,It)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2004-03 (Germany) (En,Fr,De,Es,It)
|
||||
serial: SCED-52997
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -8854,7 +8854,7 @@
|
||||
- hashes:
|
||||
- md5: fab56e6f617b0a64ad35221341bd167c
|
||||
size: 3529965568
|
||||
name: Rock Band - Metal Track Pack (USA)
|
||||
name: Rock Band - Metal Track Pack (USA, Canada)
|
||||
serial: SLUS-21889
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -9753,7 +9753,7 @@
|
||||
- hashes:
|
||||
- md5: 63d3e8e5da0305650160bc50f46df87b
|
||||
size: 4033478656
|
||||
name: Fight Night Round 3 (Europe) (En,Fr)
|
||||
name: Fight Night Round 3 (Europe, Australia) (En,Fr)
|
||||
serial: SLES-53982
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -13331,7 +13331,7 @@
|
||||
- hashes:
|
||||
- md5: aac303724ce688c8f242245ea0f4b9e4
|
||||
size: 877953024
|
||||
name: Tokyo Bus Guide - Kyou kara Kimi mo Untenshu (Japan)
|
||||
name: SuperLite 2000 Vol. 5 - Tokyo Bus Guide - Kyou kara Kimi mo Untenshu (Japan)
|
||||
serial: SLPM-65032
|
||||
version: '1.04'
|
||||
- hashes:
|
||||
@@ -15880,7 +15880,7 @@
|
||||
- hashes:
|
||||
- md5: 29e5cf458549ca5321dd0c12619a002b
|
||||
size: 3846504448
|
||||
name: Bakugan - Battle Brawlers (USA)
|
||||
name: Bakugan - Battle Brawlers (USA) (En,Fr)
|
||||
serial: SLUS-21902
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -20525,7 +20525,7 @@
|
||||
- hashes:
|
||||
- md5: 2e7fcee5a1333b72eef8a18c7a673e9f
|
||||
size: 8539766784
|
||||
name: Guitar Hero - Metallica (USA)
|
||||
name: Guitar Hero - Metallica (USA) (En,Fr)
|
||||
serial: SLUS-21843
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -20868,7 +20868,7 @@
|
||||
- hashes:
|
||||
- md5: 35d939b30458790cf58ddd16ef11e159
|
||||
size: 697149264
|
||||
name: Online Start-Up Disc 4.0 - Broadband Only (USA)
|
||||
name: Online Start-Up Disc 4.0 - Broadband Only (USA) (v1.02)
|
||||
serial: PBPX-95248
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -21320,8 +21320,7 @@
|
||||
- hashes:
|
||||
- md5: 4f18266ee64804fc1ba858c5d5bee759
|
||||
size: 3782836224
|
||||
name: Official PlayStation 2 Magazine Germany Special Edition 01-2004 (Germany)
|
||||
(En,Fr,De,Es,It)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2004-01 (Germany) (En,Fr,De,Es,It)
|
||||
serial: SCED-52119
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -21764,7 +21763,7 @@
|
||||
- hashes:
|
||||
- md5: e6159c29d23cd03252e94823045b4ff8
|
||||
size: 4071424000
|
||||
name: DJ Hero (USA)
|
||||
name: DJ Hero (USA) (En,Fr)
|
||||
serial: SLUS-21909
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -22190,7 +22189,7 @@
|
||||
- hashes:
|
||||
- md5: 007f0ccc933f59b65f28c72ad227843d
|
||||
size: 4580573184
|
||||
name: Score International Baja 1000 - World Championship Off Road Racing (Europe)
|
||||
name: SCORE International Baja 1000 - World Championship Off Road Racing (Europe)
|
||||
serial: SLES-55295
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -22862,7 +22861,7 @@
|
||||
- hashes:
|
||||
- md5: cadce0add00903396577b5d53cff1929
|
||||
size: 4679565312
|
||||
name: Marvel Super Hero Squad (USA)
|
||||
name: Marvel Super Hero Squad (USA) (En,Fr,Es)
|
||||
serial: SLUS-21910
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -22946,7 +22945,7 @@
|
||||
- hashes:
|
||||
- md5: 77ae418d710142291b5d6eb5d5d904d1
|
||||
size: 3007021056
|
||||
name: Buzz! The Schools Quiz (Europe)
|
||||
name: Buzz! The Schools Quiz (UK) (v2.00)
|
||||
serial: SCES-54941
|
||||
version: '2.00'
|
||||
- hashes:
|
||||
@@ -30411,7 +30410,7 @@
|
||||
- hashes:
|
||||
- md5: 01abdbe56de95af5b5379cf7fea1bec0
|
||||
size: 3683680256
|
||||
name: Ratchet & Clank 2 - Gagaga! Ginga no Commando-ssu (Japan, Asia)
|
||||
name: Ratchet & Clank 2 - Gagaga! Ginga no Commando ssu (Japan, Asia)
|
||||
serial: SCAJ-20052
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -32035,7 +32034,7 @@
|
||||
- hashes:
|
||||
- md5: 47e03c7b246239330d5e41efb5160fda
|
||||
size: 1328939008
|
||||
name: Nickelodeon Bob L'eponge - Silence on Tourne! (France)
|
||||
name: Nickelodeon Bob L'eponge - Silence on Tourne ! (France)
|
||||
serial: SLES-53495
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -33603,19 +33602,19 @@
|
||||
- hashes:
|
||||
- md5: ac71dddc4a60475a689fcb6f1836e607
|
||||
size: 4307582976
|
||||
name: Buzz! The Big Quiz (Europe) (En,Fr,Nl)
|
||||
name: Buzz! The Big Quiz (Belgium, Netherlands) (En,Fr,Nl)
|
||||
serial: SCES-53925
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 0f457023f2a436d38a0cd53599115846
|
||||
size: 4611080192
|
||||
name: Buzz! The Mega Quiz (Europe) (En,Fr,Nl)
|
||||
name: Buzz! The Mega Quiz (Belgium, Netherlands) (En,Fr,Nl)
|
||||
serial: SCES-54505
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 409302dffc2512d1ccd2227d17ff6bf2
|
||||
size: 4688314368
|
||||
name: Buzz! The Pop Quiz (Europe) (En,Fr,Nl)
|
||||
name: Buzz! The Pop Quiz (Belgium, Netherlands) (En,Fr,Nl)
|
||||
serial: SCES-55098
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -34577,7 +34576,7 @@
|
||||
- hashes:
|
||||
- md5: 4703eb006c9921927145c878acd7324c
|
||||
size: 3536748544
|
||||
name: Buzz! The Sports Quiz (Europe) (En,Fr,Nl)
|
||||
name: Buzz! The Sports Quiz (Belgium, Netherlands) (En,Fr,Nl)
|
||||
serial: SCES-54265
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -36547,7 +36546,7 @@
|
||||
- hashes:
|
||||
- md5: fa7523e49dc9825589504430857c5c25
|
||||
size: 564202464
|
||||
name: LEGO Island Xtreme Stunts (USA)
|
||||
name: Island Xtreme Stunts (USA)
|
||||
serial: SLUS-20575
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -38437,7 +38436,7 @@
|
||||
- hashes:
|
||||
- md5: 06553f511a16b8cc0396bab31cc910a6
|
||||
size: 2924576768
|
||||
name: DreamWorks Madagascar - Escape 2 Africa (USA)
|
||||
name: DreamWorks Madagascar - Escape 2 Africa (USA) (En,Fr)
|
||||
serial: SLUS-21840
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -39061,7 +39060,7 @@
|
||||
- hashes:
|
||||
- md5: cc5e862a633532654176096888dfacba
|
||||
size: 2679865344
|
||||
name: PES 2011 - Pro Evolution Soccer (USA)
|
||||
name: PES 2011 - Pro Evolution Soccer (USA) (En,Fr,Es,Pt)
|
||||
serial: SLUS-21942
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -39355,7 +39354,7 @@
|
||||
- hashes:
|
||||
- md5: 298ad8520c82f4edbaacb3194bc46d5c
|
||||
size: 3530391552
|
||||
name: PES 2010 - Pro Evolution Soccer (USA)
|
||||
name: PES 2010 - Pro Evolution Soccer (USA) (En,Fr,Es,Pt)
|
||||
serial: SLUS-21918
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -39421,7 +39420,7 @@
|
||||
- hashes:
|
||||
- md5: 491a3f6a39ce290de2f6dbb9ba98575f
|
||||
size: 2129297408
|
||||
name: PES 2013 - Pro Evolution Soccer (USA)
|
||||
name: PES 2013 - Pro Evolution Soccer (USA) (En,Fr,Es,Pt)
|
||||
serial: SLUS-21955
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -39433,7 +39432,7 @@
|
||||
- hashes:
|
||||
- md5: b2d139590f169442a46d21ed2f8558ab
|
||||
size: 2437316608
|
||||
name: PES 2012 - Pro Evolution Soccer (USA)
|
||||
name: PES 2012 - Pro Evolution Soccer (USA) (En,Fr,Es,Pt)
|
||||
serial: SLUS-21948
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -39511,7 +39510,7 @@
|
||||
- hashes:
|
||||
- md5: 6821bded97877694e8cf4ccf9ca64ad4
|
||||
size: 4659347456
|
||||
name: Vitamin Z - Welcome Our New Supplement Boys (Japan) (Genteiban)
|
||||
name: VitaminZ - Welcome Our New Supplement Boys (Japan) (Genteiban)
|
||||
serial: SLPS-25922
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -39770,7 +39769,7 @@
|
||||
- hashes:
|
||||
- md5: 6f2533c2ae433f1beac4f1aa3a88f4c6
|
||||
size: 4588797952
|
||||
name: AND 1 Streetball (USA) (v1.03)
|
||||
name: AND 1 Streetball (USA) (En,Fr,Es) (v1.03)
|
||||
serial: SLUS-21237
|
||||
version: '1.03'
|
||||
- hashes:
|
||||
@@ -39902,7 +39901,7 @@
|
||||
- hashes:
|
||||
- md5: 2d3dd4cd0d8c16e97a1a887b70349658
|
||||
size: 4636672000
|
||||
name: Score International Baja 1000 - The Official Game (USA)
|
||||
name: SCORE International Baja 1000 - The Official Game (USA)
|
||||
serial: SLUS-21850
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -40463,7 +40462,7 @@
|
||||
- md5: 08a63db4f248acdc24cdaa0b9507b854
|
||||
size: 2205908992
|
||||
name: Umishou (Japan)
|
||||
serial: SLPM-66864
|
||||
serial: FVGK-0001
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: d3b19450aea4a9688e876fa71830aa77
|
||||
@@ -40745,7 +40744,7 @@
|
||||
- hashes:
|
||||
- md5: 9be1477e6c0bd67bb6aff3a02601b4a6
|
||||
size: 1534427136
|
||||
name: Freaky Flyers (USA) (Demo)
|
||||
name: Freaky Flyers (USA) (Demo) (Rev 1)
|
||||
serial: SLUS-29061
|
||||
version: '0.30'
|
||||
- hashes:
|
||||
@@ -41497,7 +41496,7 @@
|
||||
- hashes:
|
||||
- md5: 6dc613680039ba59d20f8baa61e56fc5
|
||||
size: 739706352
|
||||
name: Momotarou Dentetsu 11 - Black Bombee Shutsugen! no Maki (Japan)
|
||||
name: Momotarou Dentetsu 11 - Black Bonby Shutsugen! no Maki (Japan)
|
||||
serial: SLPM-62475
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -44241,7 +44240,7 @@
|
||||
- md5: 34d981b3883eaeb95c82fbed14dcad26
|
||||
size: 3115188224
|
||||
name: Harukanaru Toki no Naka de 3 (Japan) (History Box)
|
||||
serial: SLPM-66005
|
||||
serial: SLPM-65849
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
- md5: d8ecac6d03a601d4a81f1389bfe25962
|
||||
@@ -45207,13 +45206,13 @@
|
||||
- hashes:
|
||||
- md5: 29a454ebd230549939654022af5db917
|
||||
size: 4107206656
|
||||
name: Vitamin X - We are Super Supriment Boys (Japan)
|
||||
name: VitaminX - We are Super Supriment Boys (Japan)
|
||||
serial: SLPS-25761
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: 19cc959d502b7eebae156ee760731454
|
||||
size: 4659347456
|
||||
name: Vitamin Z - Welcome Our New Supplement Boys (Japan)
|
||||
name: VitaminZ - Welcome Our New Supplement Boys (Japan)
|
||||
serial: SLPS-25923
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -46244,7 +46243,7 @@
|
||||
- hashes:
|
||||
- md5: ecb21ce06339ab6b628e077f3c03690b
|
||||
size: 3962535936
|
||||
name: Suigetsu - Mayoi Gokoro (Japan)
|
||||
name: Suigetsu - Mayoigokoro (Japan)
|
||||
serial: SLPM-65751
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -47270,7 +47269,7 @@
|
||||
- hashes:
|
||||
- md5: 68634f9b74fe47e4a039ada615970ca1
|
||||
size: 541969008
|
||||
name: Momotarou Dentetsu 15 - Godai Bombee Toujou! no Maki (Japan) (v2.00)
|
||||
name: Momotarou Dentetsu 15 - Godai Bonby Toujou! no Maki (Japan) (v2.00)
|
||||
serial: SLPM-74104
|
||||
version: '2.00'
|
||||
- hashes:
|
||||
@@ -49343,8 +49342,7 @@
|
||||
- hashes:
|
||||
- md5: 72e49d4201496dea3e0851abf58098cf
|
||||
size: 4677992448
|
||||
name: Official PlayStation 2 Magazine Germany Special Edition 2003-01 (Germany)
|
||||
(En,De)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2003-01 (Germany) (En,De)
|
||||
serial: SCED-51512
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -49422,7 +49420,7 @@
|
||||
- hashes:
|
||||
- md5: aa26f473fc9ecf2df7fad3a9acc30351
|
||||
size: 3115188224
|
||||
name: Harukanaru Toki no Naka de 3 (Japan) (Triple Pack)
|
||||
name: Harukanaru Toki no Naka de 3 (Japan) (Premium Box)
|
||||
serial: SLPM-65850
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -51309,12 +51307,6 @@
|
||||
name: Magazine Ufficiale PlayStation 2 Demo Italia 05-2006 (Italy) (En,Fr,De,Es,It)
|
||||
serial: SCED-54180
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 0b14951eb38e4f5f4730bcf48bf64898
|
||||
size: 4569923584
|
||||
name: Magazine Ufficiale PlayStation 2 Italia 05-04 (Italy) (En,Fr,De,Es,It)
|
||||
serial: SCED-52443
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 771bfe48ce1a10c8a638da8bedc9acf6
|
||||
size: 4175429632
|
||||
@@ -51698,13 +51690,13 @@
|
||||
- hashes:
|
||||
- md5: cf45002cd37168e4a2b3a8f96c560941
|
||||
size: 3983638528
|
||||
name: Official PlayStation 2 Magazine Germany Special 2-2005 (Germany)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2005-02 (Germany)
|
||||
serial: SCED-53662
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 8191fa8441cd8c947ab80b9db6de0ce3
|
||||
size: 4583129088
|
||||
name: Official PlayStation 2 Magazine Germany Special 3-2005 (Germany)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2005-03 (Germany)
|
||||
serial: SCED-53938
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -51818,7 +51810,7 @@
|
||||
- hashes:
|
||||
- md5: 8e18b5399008416a7d012f2ea1bf9353
|
||||
size: 663976656
|
||||
name: Pro Evolution Soccer 3 (Europe) (Demo 1)
|
||||
name: Pro Evolution Soccer 3 (UK) (Demo)
|
||||
serial: SLED-51992
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -51950,7 +51942,7 @@
|
||||
- hashes:
|
||||
- md5: 209c4247ffb84795b23ce2cec0f090a4
|
||||
size: 3793453056
|
||||
name: Official PlayStation 2 Magazine Germany Special Edition 2003-03 (Germany)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2003-03 (Germany)
|
||||
serial: SCED-51551
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -52038,7 +52030,7 @@
|
||||
- hashes:
|
||||
- md5: e8e5b428c642c78d510cbd854c17b9cc
|
||||
size: 1616740352
|
||||
name: Primal + The Mark of Kri + War of the Monsters (Europe) (En,Fr,De,Es,It)
|
||||
name: Primal & The Mark of Kri & War of the Monsters (Europe) (En,Fr,De,Es,It)
|
||||
serial: SCED-51506
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -52350,7 +52342,7 @@
|
||||
- hashes:
|
||||
- md5: d42eed1d14cdaf8add8295116776a447
|
||||
size: 3765108736
|
||||
name: Best PS2 Games Ever 10 (Europe)
|
||||
name: Official PlayStation 2 Magazine-UK Special Edition - Yearbook 2002 (Europe)
|
||||
serial: SCED-51389
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -52637,7 +52629,7 @@
|
||||
- hashes:
|
||||
- md5: cded45ee044b5a7614644fa444a59989
|
||||
size: 4334157824
|
||||
name: Official PlayStation 2 Magazine Germany Special Edition 2003-02 (Germany)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2003-02 (Germany)
|
||||
serial: SCED-51549
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -53111,7 +53103,7 @@
|
||||
- hashes:
|
||||
- md5: f309b4b48dc775dbbde635a1ef3b662b
|
||||
size: 4522639360
|
||||
name: Germany Special Issue 3 (Germany)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 3 (Germany)
|
||||
serial: SCED-51375
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -54054,7 +54046,7 @@
|
||||
- hashes:
|
||||
- md5: ac5b76bd39b0cabd1acfe4dcb08df502
|
||||
size: 1649803264
|
||||
name: Primal + The Mark of Kri (Europe)
|
||||
name: Primal & The Mark of Kri (Europe)
|
||||
serial: SCED-51491
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -54085,7 +54077,7 @@
|
||||
- hashes:
|
||||
- md5: 2475b61666f06dc2aa9ca032f15a4cde
|
||||
size: 4241293312
|
||||
name: Official PlayStation 2 Magazine Germany Special Edition 2007-1 (Germany)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2007-01 (Germany)
|
||||
serial: SCED-54693
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -54462,7 +54454,7 @@
|
||||
- hashes:
|
||||
- md5: 97a9156abd199f588d4f46e9af7ab5a7
|
||||
size: 4107206656
|
||||
name: Vitamin X - We are Super Supriment Boys (Japan) (Genteiban)
|
||||
name: VitaminX - We are Super Supriment Boys (Japan) (Genteiban)
|
||||
serial: SLPS-25760
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -54767,7 +54759,7 @@
|
||||
- hashes:
|
||||
- md5: a4b5b1d6c13c15bc1bac6fc63622c9ee
|
||||
size: 2925920256
|
||||
name: Ever 17 - The Out of Infinity Premium Edition (Japan)
|
||||
name: Ever 17 - The Out of Infinity - Premium Edition (Japan)
|
||||
serial: SLPM-65421
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -55910,7 +55902,7 @@
|
||||
- hashes:
|
||||
- md5: 05b210d50d92a418ac1e37a1fff0df8a
|
||||
size: 243996480
|
||||
name: Giant Robo - The Animation - Chikyuu ga Seishi suru Hi (Japan)
|
||||
name: Giant Robo - The Animation - Chikyuu ga Seishi Suru Hi (Japan)
|
||||
serial: SLPM-62526
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -56111,7 +56103,7 @@
|
||||
- hashes:
|
||||
- md5: 45d62f1cf862b8e6c47d373a5c55d2f2
|
||||
size: 708511776
|
||||
name: Pro Evolution Soccer 4 (Europe) (Demo)
|
||||
name: Pro Evolution Soccer 4 (UK) (Demo)
|
||||
serial: SLED-52873
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -56171,7 +56163,7 @@
|
||||
- hashes:
|
||||
- md5: 139585af1bf276d5f2e17a32def4f66d
|
||||
size: 4528504832
|
||||
name: Official PlayStation 2 Magazine Germany Special Edition 1 (Germany)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 1 (Germany)
|
||||
serial: SCED-50780
|
||||
version: '1.10'
|
||||
- hashes:
|
||||
@@ -57668,7 +57660,7 @@
|
||||
- hashes:
|
||||
- md5: 1ce4a9368f7c6c73dcd983ad5f86f3eb
|
||||
size: 718702992
|
||||
name: MaxPlay (Europe) (Unl)
|
||||
name: Max Play (Europe) (Unl)
|
||||
version: 1.00 (European)
|
||||
- hashes:
|
||||
- md5: 8182f27cc5a0cac14da217e45861e49e
|
||||
@@ -57841,8 +57833,7 @@
|
||||
- hashes:
|
||||
- md5: 4fb718d2059a1843882a70b17922b483
|
||||
size: 4613996544
|
||||
name: Official PlayStation 2 Magazine Germany Special Edition 2005-01 (Germany)
|
||||
(En,De)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2005-01 (Germany) (En,De)
|
||||
serial: SCED-53298
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -57854,7 +57845,7 @@
|
||||
- hashes:
|
||||
- md5: 739a2f519751c64f7291d036105c2c0d
|
||||
size: 1670316032
|
||||
name: Buzz! Junior - Robojam (Europe) (Beta) (2007-01-12)
|
||||
name: Buzz! Junior - RoboJam (Europe) (Beta) (2007-01-12)
|
||||
serial: SCES-54676
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -58392,7 +58383,7 @@
|
||||
- hashes:
|
||||
- md5: 6969a8f3623387131e2e1d49fff4c3f5
|
||||
size: 4492853248
|
||||
name: Magical Tale - Chiicha na Mahoutsukai (Japan)
|
||||
name: Magical Tale - Chitcha na Mahoutsukai (Japan)
|
||||
serial: SLPM-65965
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -59340,7 +59331,7 @@
|
||||
- hashes:
|
||||
- md5: 8d61b97a6dd45165b012b338d42e53a8
|
||||
size: 2358018048
|
||||
name: Harry Potter and the Prisoner of Azkaban (Korea)
|
||||
name: Harry Potter-wa Azkaban-ui Joesu (Korea)
|
||||
serial: SLKA-25172
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -59646,7 +59637,7 @@
|
||||
- hashes:
|
||||
- md5: 1162e6411d9e16fbefc9fd8a9e886d70
|
||||
size: 4412145664
|
||||
name: Official PlayStation 2 Magazine Germany Winter 2006 (Germany) (En,De)
|
||||
name: Official PlayStation 2 Magazine - Winter 2006 (Germany) (En,De)
|
||||
serial: SCED-54558
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -60504,7 +60495,7 @@
|
||||
- hashes:
|
||||
- md5: 78f327cd6c0f2bd6f99a299e982b9a93
|
||||
size: 1253867520
|
||||
name: TOCA Race Driver 3 + V8 Supercars Australia 3 (Australia) (Demo)
|
||||
name: TOCA Race Driver 3 (Australia) (Demo)
|
||||
serial: SLED-53888
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -60764,7 +60755,7 @@
|
||||
- hashes:
|
||||
- md5: 7e964b27119adc590228452d42c634b0
|
||||
size: 4614062080
|
||||
name: Buzz! Hollywood Quiz (Europe) (En,Fr,Nl)
|
||||
name: Buzz! Hollywood Quiz (Belgium, Netherlands) (En,Fr,Nl)
|
||||
serial: SCES-54854
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -62041,7 +62032,7 @@
|
||||
- hashes:
|
||||
- md5: dd5ccdc3e325716d7f7ed08a9836f3f0
|
||||
size: 3938189312
|
||||
name: PlayStation 2 Revista Oficial - Portugal 9 (Portugal)
|
||||
name: Official PlayStation 2 Magazine Demo 32 (Portugal)
|
||||
serial: SCED-51657
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -62487,7 +62478,7 @@
|
||||
- hashes:
|
||||
- md5: fe79ea717184a278802679ef78f6df7b
|
||||
size: 7774928896
|
||||
name: Zhen San Guo Wu Shuang 5 Special (Taiwan)
|
||||
name: Zhen Sanguo Wushuang 5 Special (Taiwan)
|
||||
serial: SLAJ-35007
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -63024,7 +63015,7 @@
|
||||
- hashes:
|
||||
- md5: 18e6281d238ccb19e8975d45e8c157f0
|
||||
size: 3816554496
|
||||
name: Offizielle PlayStation 2 Magazin 02-2004, Das - Uncut Edition (Germany)
|
||||
name: Official PlayStation 2 Magazine 02-2004 - Uncut Edition (Germany)
|
||||
serial: SCED-52082
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -63141,7 +63132,7 @@
|
||||
- hashes:
|
||||
- md5: d38ab694e14843f16af11a15d1883023
|
||||
size: 4677795840
|
||||
name: Koi suru Otome to Shugo no Tate - The Shield of AIGIS (Japan)
|
||||
name: Koi Suru Otome to Shugo no Tate - The Shield of AIGIS (Japan)
|
||||
serial: SLPM-55098
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
@@ -63554,7 +63545,7 @@
|
||||
- hashes:
|
||||
- md5: 3acdf0ae8cc67fe9e0db9f4707cb3905
|
||||
size: 2638381056
|
||||
name: I Love Baseball - Pro Yakyuu o Koyonaku Ai suru Hitotachi e (Japan)
|
||||
name: I Love Baseball - Pro Yakyuu o Koyonaku Ai Suru Hitotachi e (Japan)
|
||||
serial: SLPM-65633
|
||||
version: '1.04'
|
||||
- hashes:
|
||||
@@ -63941,13 +63932,13 @@
|
||||
- hashes:
|
||||
- md5: 7ea2da0f39ae55794fd9fd5006b417cc
|
||||
size: 4446388224
|
||||
name: Offizielle PlayStation 2 Magazin 09-2004, Das (Germany)
|
||||
name: Official PlayStation 2 Magazine 09-2004 (Germany)
|
||||
serial: SCED-52089
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
- md5: 11b80bd02a0a874212b014c56e44a4c5
|
||||
size: 4033347584
|
||||
name: Offizielle PlayStation 2 Magazin 12-2003, Das (Germany)
|
||||
name: Official PlayStation Magazine 12-2003 (Germany)
|
||||
serial: SCED-51936
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -64181,7 +64172,7 @@
|
||||
- hashes:
|
||||
- md5: 8990d1c3b88b04b1bbc7a78ee3e9df2f
|
||||
size: 33821760
|
||||
name: Karat PS2-you Pro Action Replay 2 Taikenban (Japan) (Unl)
|
||||
name: Karat PS2-you Pro Action Replay 2 Taikenban (Japan) (Unl) (Rev 1)
|
||||
version: '1.7'
|
||||
- hashes:
|
||||
- md5: 4a2754811946ef9badbbd872f541a03f
|
||||
@@ -64254,7 +64245,7 @@
|
||||
- hashes:
|
||||
- md5: 0e35e8fd22fe57f8727b9764685bbc29
|
||||
size: 3871703040
|
||||
name: Offizielle PlayStation 2 Magazin, Das - Special Edition 2 (Germany)
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2 (Germany)
|
||||
serial: SCED-51161
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -64563,7 +64554,7 @@
|
||||
- hashes:
|
||||
- md5: 477eb508b08f59386478908e481eb8a1
|
||||
size: 4519690240
|
||||
name: Official PlayStation 2 Magazine - German Kids Special (Germany) (En,De)
|
||||
name: Official PlayStation 2 Magazine - Kids Special (Germany) (En,De)
|
||||
serial: SCED-53611
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -64580,7 +64571,7 @@
|
||||
- hashes:
|
||||
- md5: ac9cb481855792415314e06e5c12b291
|
||||
size: 664183632
|
||||
name: Pro Evolution Soccer 3 (Europe) (Demo 2)
|
||||
name: Pro Evolution Soccer 3 (Europe) (Demo)
|
||||
serial: SLED-51994
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -65185,7 +65176,7 @@
|
||||
- hashes:
|
||||
- md5: 86af0c99c8a8566e5f9307110f339e20
|
||||
size: 364475328
|
||||
name: Monopoly - Mezase!! Daifugou Jinsei!! (Japan)
|
||||
name: Monopoly - Mezase!! Daifugou Jinsei!! (Japan) (v2.00)
|
||||
serial: SLPS-20281
|
||||
version: '2.00'
|
||||
- hashes:
|
||||
@@ -66352,7 +66343,7 @@
|
||||
- hashes:
|
||||
- md5: ff59d561b843dbbb940c631d53294d63
|
||||
size: 1552318464
|
||||
name: Monsterspass (Austria, Switzerland) (En,Fr,De,Es,It,Nl,Pt)
|
||||
name: Monsterspass (Austria) (En,Fr,De,Es,It,Nl,Pt)
|
||||
serial: SCES-54704
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -66436,7 +66427,7 @@
|
||||
- hashes:
|
||||
- md5: 79fc6bc53ff748088a36d2f6778d0a0b
|
||||
size: 1943797760
|
||||
name: Big! Sports Quiz, The (Austria, Switzerland)
|
||||
name: Big! Sports Quiz, The (Austria)
|
||||
serial: SCES-54526
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -66803,7 +66794,7 @@
|
||||
- hashes:
|
||||
- md5: 91450691bed8af904b291c4d86c0c338
|
||||
size: 1645182976
|
||||
name: Jungle Party (Austria, Switzerland)
|
||||
name: Jungle Party (Austria)
|
||||
serial: SCES-54524
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -66934,7 +66925,7 @@
|
||||
- hashes:
|
||||
- md5: 777cd430a73b95945cee679a27446eed
|
||||
size: 2297200640
|
||||
name: Disney-Pixar Finding Nemo (Korea)
|
||||
name: Disney-Pixar Nemo-reul Chajaseo (Korea)
|
||||
serial: SLKA-25056
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -68550,7 +68541,7 @@
|
||||
- hashes:
|
||||
- md5: 5b315096f6bfc1897e52fec9c877b81d
|
||||
size: 4250206208
|
||||
name: Offizielle PlayStation 2 Magazin 13-2003, Das - Uncut Edition (Germany)
|
||||
name: Official PlayStation 2 Magazine 13-2003 - Uncut Edition (Germany)
|
||||
serial: SCED-51937
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
@@ -69278,7 +69269,7 @@
|
||||
- hashes:
|
||||
- md5: 6905874bbb6167417bac324464d70d28
|
||||
size: 541969008
|
||||
name: Momotarou Dentetsu 15 - Godai Bombee Toujou! no Maki (Japan) (v1.01)
|
||||
name: Momotarou Dentetsu 15 - Godai Bonby Toujou! no Maki (Japan) (v1.01)
|
||||
serial: SLPM-62702
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -69326,7 +69317,7 @@
|
||||
- hashes:
|
||||
- md5: 950783ce0723d41ff7aa46659a6eafbc
|
||||
size: 4492853248
|
||||
name: Magical Tale - Chiicha na Mahoutsukai (Japan) (Shokai Genteiban)
|
||||
name: Magical Tale - Chitcha na Mahoutsukai (Japan) (Shokai Genteiban)
|
||||
serial: SLPM-65964
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
@@ -69341,3 +69332,240 @@
|
||||
name: Quilt - Anata to Tsumugu Yume to Koi no Dress (Japan)
|
||||
serial: SLPM-66735
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
- md5: ad64473c57824cf607cf40a7d85cf36c
|
||||
size: 2300313600
|
||||
name: Guitar Hero (USA) (Demo)
|
||||
serial: SLUS-29177
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 667607deb941380aa4d13db387b93077
|
||||
size: 93254448
|
||||
name: Codes Exclusifs (France) (Unl)
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 589e37362d073b8ad52670cdd5664415
|
||||
size: 1822326784
|
||||
name: DearS (Japan) (Genteiban)
|
||||
serial: SLPS-25371
|
||||
version: '1.04'
|
||||
- hashes:
|
||||
- md5: 4afb874dc19e35051e79f7a881a584b4
|
||||
size: 1524793344
|
||||
name: Winning Post 6 - 2005-nendoban (Japan) (Premium Pack)
|
||||
serial: SLPM-65893
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: 132ce8a9e16ca7ef5a356aa111bce318
|
||||
size: 4354473984
|
||||
name: Jak 3 (Europe) (En,Fr,De,Es,It,Pt,Ko,Ru) (Beta) (2004-09-14)
|
||||
serial: SCES-52460
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 6432d610b89d00eb1eea2ee71cf27147
|
||||
size: 3007119360
|
||||
name: Buzz! The Schools Quiz (UK) (v1.00)
|
||||
serial: SCES-54941
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 3c47093b42a1e1a39692b220e7659ad9
|
||||
size: 4601774080
|
||||
name: Big! Pop Quiz, The (Austria)
|
||||
serial: SCES-55099
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 859073451dbb344df7cee32703245ed5
|
||||
size: 306380800
|
||||
name: Freaky Flyers (USA) (Demo)
|
||||
serial: SLUS-29051
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 8d987ddccb1e2ec4c068896a4182bc4c
|
||||
size: 1542029312
|
||||
name: Tennis no Oujisama - Smash Hit! 2 (Japan) (Shokai SP Genteiban C-Type)
|
||||
serial: SLPM-65453
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: b0a2a871249538d80b92e7ef837f20dd
|
||||
size: 761692848
|
||||
name: CD avec les Codes Action Replay Exclusivement pour le Jeu Enter the Matrix
|
||||
(France)
|
||||
version: 1.01 (European)
|
||||
- hashes:
|
||||
- md5: db0c13bd5bddb659d563b4e2c0fcd5e8
|
||||
size: 226549344
|
||||
name: Action Replay Ultimate Cheats for Use with Grand Theft Auto - Vice City (UK)
|
||||
(Unl)
|
||||
version: '1.30'
|
||||
- hashes:
|
||||
- md5: 7866eaffddb52bbf7375ab4deca20dd6
|
||||
size: 33821760
|
||||
name: Karat PS2-you Pro Action Replay 2 Taikenban (Japan) (Unl)
|
||||
version: '1.7'
|
||||
- hashes:
|
||||
- md5: 76b15475cac6977f2510ea07d9b87043
|
||||
size: 4348444672
|
||||
name: Official PlayStation 2 Magazine - Special Edition 2006-01 (Germany)
|
||||
serial: SCED-54034
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: c9f8be1699b50935c1e1989cd76bdbe1
|
||||
size: 697118688
|
||||
name: Online Start-Up Disc 4.0 - Broadband Only (USA) (v1.01)
|
||||
serial: PBPX-95248
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: d7cfe2da9a3598cb10bc61abd2657acd
|
||||
size: 3497885696
|
||||
name: Big! Movie Quiz, The (Austria)
|
||||
serial: SCES-54857
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 875894a624cc3d7bc81311985b5eeff7
|
||||
size: 549201408
|
||||
name: Argus-ui Jeonsa (Korea) (Cheheompan)
|
||||
serial: SCKA-90005
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 7f3b5e111ca4c77039a1641fe2785423
|
||||
size: 3271229440
|
||||
name: Mai-Otome HiME - Otome Butoushi!! (Japan) (Limited Edition)
|
||||
serial: SLPS-25680
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: 5626f8c491117a0924380c786ab7e458
|
||||
size: 3049783296
|
||||
name: Fire It Up Kids (Europe)
|
||||
serial: SCED-53678
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 7d6503407ba1ea104753be2bfe1283e3
|
||||
size: 2560065536
|
||||
name: Nickelodeon SpongeBob SquarePants - Movin' with Friends (Europe) (En,Fr,De,Es)
|
||||
(Beta) (2004-10-29)
|
||||
- hashes:
|
||||
- md5: baf280135d74603e097a813d52e25afa
|
||||
size: 707949648
|
||||
name: Pro Evolution Soccer 4 (Europe) (Demo)
|
||||
serial: SLED-52878
|
||||
version: '1.03'
|
||||
- hashes:
|
||||
- md5: 1fa77218061839d6ac9b39159fa46680
|
||||
size: 1249804288
|
||||
name: SingStar Rocks! (Europe) (Demo)
|
||||
serial: SCED-54086
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 2d91ab06f6fc0f918c9389990df71a63
|
||||
size: 1378156544
|
||||
name: This Is Football 2004 (Belgium) (Demo)
|
||||
serial: SCED-52321
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: 6917a832cf75177a18c4ef4499966ba4
|
||||
size: 3448471552
|
||||
name: Official PlayStation 2 Magazine Demo 10 (Spain)
|
||||
serial: SCED-50406
|
||||
- hashes:
|
||||
- md5: e1615a414d9b561e70b395155edb7e39
|
||||
size: 4697686016
|
||||
name: Chaos Legion (Europe) (Demo)
|
||||
serial: SLED-51808
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 670fabe932a7ad8b81f6356d162cdac6
|
||||
size: 4569923584
|
||||
name: Magazine Ufficiale PlayStation 2 Italia 05-04 (Italy) (En,Fr,De,Es,It)
|
||||
serial: SCED-52443
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: dd4dd82c735f0189b5cd91c0c5e4b327
|
||||
size: 364472976
|
||||
name: Monopoly - Mezase!! Daifugou Jinsei!! (Japan) (v1.04)
|
||||
serial: SLPS-20281
|
||||
version: '1.04'
|
||||
- hashes:
|
||||
- md5: 2be7a399436665d532383e9e6d21f7fb
|
||||
size: 1632665600
|
||||
name: Musashiden II - Blademaster (Japan) (Taikenban)
|
||||
serial: SLPM-61117
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 85f8dd4c84ac2fd97f4b154280c01910
|
||||
size: 1239580672
|
||||
name: Bratz - Rock Angelz (Denmark)
|
||||
serial: SLES-53578
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 36c27c981bfdd9f311ecc36da4ad7071
|
||||
size: 598507520
|
||||
name: Metal Gear Solid 2 - Sons of Liberty (Europe) (En,Fr,De) (Demo)
|
||||
serial: SLED-50782
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 626b946f71116a9ec455b41c0fb8aa3a
|
||||
size: 2710274048
|
||||
name: Bonus Demo 7 (15-16) (Europe)
|
||||
serial: SCED-52437
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
- md5: 2696c838c64d0f7f0c86adc5bbc1f54a
|
||||
size: 4292870144
|
||||
name: Buzz! The Big Quiz (Switzerland) (Fr,De,It)
|
||||
serial: SCES-54071
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 865cb20ccc3b938879eb3cae955ab70c
|
||||
size: 4598398976
|
||||
name: Buzz! The Mega Quiz (Switzerland) (Fr,De,It)
|
||||
serial: SCES-54506
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: f543c17d10aa576cc4ea74622a7050ee
|
||||
size: 750130416
|
||||
name: Code Breaker (USA) (Unl) (v4.0)
|
||||
version: '4.0'
|
||||
- hashes:
|
||||
- md5: bae22925feb7587573b663cc83bc1eb3
|
||||
size: 2719285248
|
||||
name: Kaido Battle 2 - Chain Reaction (Korea)
|
||||
serial: SLKA-25146
|
||||
version: '1.02'
|
||||
- hashes:
|
||||
- md5: 92c7a59eb4650bbc8a429970640b871b
|
||||
size: 748700400
|
||||
name: Time Crisis II (Europe) (Demo)
|
||||
serial: SCED-50473
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: fd46dd639a28f9f8ec7475f999d8b653
|
||||
size: 2786852864
|
||||
name: Call of Duty - World at War - Final Fronts (Korea)
|
||||
serial: SLKA-25449
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 41ccada9d75b88b20adf6db41349df52
|
||||
size: 4511367168
|
||||
name: Shijag-ui Ilbo All Stars (Korea)
|
||||
serial: SLKA-25152
|
||||
version: '1.01'
|
||||
- hashes:
|
||||
- md5: d46987283a22024d4b8e3e36c597035f
|
||||
size: 4116643840
|
||||
name: Fight Night Round 2 (Europe, Australia) (Demo)
|
||||
serial: SLED-53126
|
||||
version: '1.00'
|
||||
- hashes:
|
||||
- md5: 22a1b12df6fae4ecd8da5bed8cd91dd6
|
||||
size: 4192600064
|
||||
name: SOCOM 3 - U.S. Navy SEALs (USA) (Beta) (2005-09-08)
|
||||
- hashes:
|
||||
- md5: 3a04c1e3548d8169271336a73ae67e93
|
||||
size: 566942544
|
||||
name: Taz - Wanted (Europe) (2002-01-29)
|
||||
version: Beta
|
||||
- hashes:
|
||||
- md5: ecb58db2de607ed68a215d052381a83b
|
||||
size: 245814576
|
||||
name: Taz - Wanted (Europe) (2001-05-31)
|
||||
version: Beta
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
030000007d0400000640000000000000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
|
||||
03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000430b00000300000000000000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000062000001801000000000000,EMS TrioLinker Plus II,a:b0,b:b1,x:b2,y:b3,back:b9,start:b8,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,platform:Windows,
|
||||
03000000062000001801000000000000,EMS TrioLinker Plus II,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Windows,
|
||||
03000000242f000000b7000000000000,ESM 9110,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows,
|
||||
03000000101c0000181c000000000000,Essential,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b4,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
|
||||
030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
|
||||
@@ -579,6 +579,8 @@
|
||||
030000009b2800001800000000000000,Raphnet Jaguar Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows,
|
||||
030000009b2800006100000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows,
|
||||
030000009b2800006300000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows,
|
||||
030000009b2800003c00000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows,
|
||||
030000009b2800006400000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows,
|
||||
030000009b2800000200000000000000,Raphnet NES Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows,
|
||||
030000009b2800004400000000000000,Raphnet PS1 and PS2 Adapter,a:b1,b:b2,back:b5,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b9,rightx:a3,righty:a4,start:b4,x:b0,y:b3,platform:Windows,
|
||||
030000009b2800004300000000000000,Raphnet Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
|
||||
@@ -629,6 +631,7 @@
|
||||
030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000830500007030000000000000,Rockfire Space Ranger,a:b0,b:b1,back:b5,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b9,righttrigger:b8,start:b2,x:b3,y:b4,platform:Windows,
|
||||
03000000050b0000e318000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows,
|
||||
03000000050b0000e518000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows,
|
||||
03000000050b00005819000000000000,ROG Chakram Core,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows,
|
||||
@@ -1035,6 +1038,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
|
||||
0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000632500008005000000010000,Redgear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000632500002305000000010000,Redragon Saturn,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000921200004547000000020000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b2,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,lefttrigger:b14,rightshoulder:b10,righttrigger:b4,start:b12,x:b6,y:b8,platform:Mac OS X,
|
||||
03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000790000001100000005010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
@@ -1253,6 +1257,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
|
||||
03000000120c0000210e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
|
||||
03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000d81d00000b00000010010000,Buffalo BSGP1601,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Linux,
|
||||
03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000af1e00002400000010010000,Clockwork Pi DevTerm,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux,
|
||||
@@ -1288,6 +1293,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000f0250000c283000010010000,Gioteck VX2 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
190000004b4800000010000000010000,GO-Advance Controller,a:b1,b:b0,back:b10,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,leftshoulder:b4,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b13,start:b15,x:b2,y:b3,platform:Linux,
|
||||
190000004b4800000010000001010000,GO-Advance Controller,a:b1,b:b0,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b13,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b16,righttrigger:b15,start:b17,x:b2,y:b3,platform:Linux,
|
||||
190000004b4800000011000000010000,GO-Super Gamepad,a:b0,b:b1,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b3,y:b2,platform:Linux,
|
||||
@@ -1478,13 +1484,15 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux,
|
||||
05000000010000000100000003000000,Nintendo Wii Remote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
050000007e0500003003000001000000,Nintendo Wii U Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
|
||||
050000005a1d00000218000003000000,Nokia GC 5000,a:b9,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
030000000d0500000308000010010000,Nostromo n45 Dual Analog,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,
|
||||
030000007e0500001920000011810000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux,
|
||||
030000007e0500001920000011810000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux,
|
||||
050000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Linux,
|
||||
050000007e0500001920000001800000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux,
|
||||
030000007e0500001720000011810000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
|
||||
050000007e0500001920000001800000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux,
|
||||
030000007e0500001e20000011810000,NSO Sega Genesis Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,misc1:b3,rightshoulder:b2,righttrigger:b4,start:b5,platform:Linux,
|
||||
030000007e0500001720000011810000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
|
||||
050000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b8,start:b10,x:b3,y:b2,platform:Linux,
|
||||
050000007e0500001720000001800000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
|
||||
050000007e0500001720000001800000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
|
||||
03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000550900001472000011010000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
|
||||
05000000550900001472000001000000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
|
||||
|
||||
@@ -1 +1,64 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#009B3A" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#FEDF01" d="M32.728 18L18 29.124 3.272 18 18 6.875z"/><circle fill="#002776" cx="17.976" cy="17.924" r="6.458"/><path fill="#CBE9D4" d="M12.277 14.887c-.332.621-.558 1.303-.672 2.023 3.995-.29 9.417 1.891 11.744 4.595.402-.604.7-1.28.883-2.004-2.872-2.808-7.917-4.63-11.955-4.614z"/><path fill="#88C9F9" d="M12 18.233h1v1h-1zm1 2h1v1h-1z"/><path fill="#55ACEE" d="M15 18.233h1v1h-1zm2 1h1v1h-1zm4 2h1v1h-1zm-3 1h1v1h-1zm3-6h1v1h-1z"/><path fill="#3B88C3" d="M19 20.233h1v1h-1z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="NTSC-B.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs6" />
|
||||
<sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<path
|
||||
fill="#009b3a"
|
||||
d="m 36,22 c 0,2.209 -1.791,4 -4,4 H 4 C 1.791,26 0,24.209 0,22 V 4 C 0,1.791 1.791,0 4,0 h 28 c 2.209,0 4,1.791 4,4 z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#fedf01"
|
||||
d="M 32.728,13 18,24.124 3.272,13 18,1.875 Z"
|
||||
id="path2" />
|
||||
<circle
|
||||
fill="#002776"
|
||||
cx="17.976"
|
||||
cy="12.924"
|
||||
r="6.4580002"
|
||||
id="circle2" />
|
||||
<path
|
||||
fill="#cbe9d4"
|
||||
d="m 12.277,9.887 c -0.332,0.621 -0.558,1.303 -0.672,2.023 3.995,-0.29 9.417,1.891 11.744,4.595 0.402,-0.604 0.7,-1.28 0.883,-2.004 C 21.36,11.693 16.315,9.871 12.277,9.887 Z"
|
||||
id="path3" />
|
||||
<path
|
||||
fill="#88c9f9"
|
||||
d="m 12,13.233 h 1 v 1 h -1 z m 1,2 h 1 v 1 h -1 z"
|
||||
id="path4" />
|
||||
<path
|
||||
fill="#55acee"
|
||||
d="m 15,13.233 h 1 v 1 h -1 z m 2,1 h 1 v 1 h -1 z m 4,2 h 1 v 1 h -1 z m -3,1 h 1 v 1 h -1 z m 3,-6 h 1 v 1 h -1 z"
|
||||
id="path5" />
|
||||
<path
|
||||
fill="#3b88c3"
|
||||
d="m 19,15.233 h 1 v 1 h -1 z"
|
||||
id="path6" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 682 B After Width: | Height: | Size: 1.9 KiB |
@@ -1 +1,42 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DE2910" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#FFDE02" d="M11.136 8.977l.736.356.589-.566-.111.81.72.386-.804.144-.144.804-.386-.72-.81.111.566-.589zm4.665 2.941l-.356.735.566.59-.809-.112-.386.721-.144-.805-.805-.144.721-.386-.112-.809.59.566zm-.957 3.779l.268.772.817.017-.651.493.237.783-.671-.467-.671.467.236-.783-.651-.493.817-.017zm-3.708 3.28l.736.356.589-.566-.111.81.72.386-.804.144-.144.804-.386-.72-.81.111.566-.589zM7 10.951l.929 2.671 2.826.058-2.253 1.708.819 2.706L7 16.479l-2.321 1.615.819-2.706-2.253-1.708 2.826-.058z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="NTSC-C.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
fill="#de2910"
|
||||
d="m 36,22 c 0,2.209 -1.791,4 -4,4 H 4 C 1.791,26 0,24.209 0,22 V 4 C 0,1.791 1.791,0 4,0 h 28 c 2.209,0 4,1.791 4,4 z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#ffde02"
|
||||
d="m 11.136,3.977 0.736,0.356 0.589,-0.566 -0.111,0.81 0.72,0.386 -0.804,0.144 -0.144,0.804 -0.386,-0.72 -0.81,0.111 0.566,-0.589 z m 4.665,2.941 -0.356,0.735 0.566,0.59 -0.809,-0.112 -0.386,0.721 -0.144,-0.805 -0.805,-0.144 0.721,-0.386 -0.112,-0.809 0.59,0.566 z m -0.957,3.779 0.268,0.772 0.817,0.017 -0.651,0.493 0.237,0.783 -0.671,-0.467 -0.671,0.467 0.236,-0.783 -0.651,-0.493 0.817,-0.017 z m -3.708,3.28 0.736,0.356 0.589,-0.566 -0.111,0.81 0.72,0.386 -0.804,0.144 -0.144,0.804 -0.386,-0.72 -0.81,0.111 0.566,-0.589 z M 7,5.951 7.929,8.622 10.755,8.68 8.502,10.388 9.321,13.094 7,11.479 4.679,13.094 5.498,10.388 3.245,8.68 6.071,8.622 Z"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 696 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 8.4 KiB |
@@ -1 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 47.5 47.5" style="enable-background:new 0 0 47.5 47.5;" id="svg2" xml:space="preserve"><defs id="defs6"><clipPath id="clipPath18"><path d="M 0,38 38,38 38,0 0,0 0,38 z" id="path20"/></clipPath></defs><g transform="matrix(1.25,0,0,-1.25,0,47.5)" id="g12"><g id="g14"><g clip-path="url(#clipPath18)" id="g16"><g transform="translate(37,10)" id="g22"><path d="m 0,0 c 0,-2.209 -1.791,-4 -4,-4 l -28,0 c -2.209,0 -4,1.791 -4,4 l 0,18 c 0,2.209 1.791,4 4,4 l 28,0 c 2.209,0 4,-1.791 4,-4 L 0,0 z" id="path24" style="fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g><g transform="translate(26,19)" id="g26"><path d="m 0,0 c 0,-3.866 -3.134,-7 -7,-7 -3.866,0 -7,3.134 -7,7 0,3.866 3.134,7 7,7 3.866,0 7,-3.134 7,-7" id="path28" style="fill:#dd2e44;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g></g></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
viewBox="0 0 45 32.5"
|
||||
id="svg2"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="NTSC-J.svg"
|
||||
width="45"
|
||||
height="32.5"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="16.315789"
|
||||
inkscape:cx="22.524194"
|
||||
inkscape:cy="16.303226"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><defs
|
||||
id="defs6"><clipPath
|
||||
id="clipPath18"><path
|
||||
d="M 0,38 H 38 V 0 H 0 Z"
|
||||
id="path20" /></clipPath></defs><g
|
||||
transform="matrix(1.25,0,0,-1.25,-1.25,40)"
|
||||
id="g12"><g
|
||||
id="g14"><g
|
||||
clip-path="url(#clipPath18)"
|
||||
id="g16"><g
|
||||
transform="translate(37,10)"
|
||||
id="g22"><path
|
||||
d="m 0,0 c 0,-2.209 -1.791,-4 -4,-4 h -28 c -2.209,0 -4,1.791 -4,4 v 18 c 0,2.209 1.791,4 4,4 h 28 c 2.209,0 4,-1.791 4,-4 z"
|
||||
id="path24"
|
||||
style="fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
|
||||
transform="translate(26,19)"
|
||||
id="g26"><path
|
||||
d="m 0,0 c 0,-3.866 -3.134,-7 -7,-7 -3.866,0 -7,3.134 -7,7 0,3.866 3.134,7 7,7 3.866,0 7,-3.134 7,-7"
|
||||
id="path28"
|
||||
style="fill:#dd2e44;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g></g></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 986 B After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.1 KiB |
@@ -1 +1,52 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FE0000" d="M32 5H17v13H0v9c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><path fill="#000095" d="M17 5H4C1.791 5 0 6.791 0 9v9h17V5zm-6.063 4.61l2.035-.548-1.491 1.487c-.121-.348-.307-.665-.544-.939zm.251 1.89c0 1.346-1.091 2.438-2.438 2.438S6.312 12.846 6.312 11.5 7.404 9.062 8.75 9.062s2.438 1.092 2.438 2.438zm0-4.222l-.548 2.035c-.273-.237-.591-.423-.939-.544l1.487-1.491zM8.75 6.625l.542 2.034c-.175-.033-.357-.052-.542-.052s-.367.019-.542.052l.542-2.034zm-.951 2.144c-.348.121-.665.307-.939.544l-.548-2.035 1.487 1.491zm-1.236.841c-.237.273-.423.591-.544.939L4.528 9.062l2.035.548zm-.654 1.348c-.034.176-.052.357-.052.542 0 .185.018.367.052.542L3.875 11.5l2.034-.542zm.11 1.492c.121.348.308.666.544.939l-2.035.548 1.491-1.487zm.293 3.272l.548-2.035c.273.236.591.423.939.544l-1.487 1.491zm2.438.653l-.542-2.034c.176.034.357.052.542.052s.367-.018.542-.052l-.542 2.034zm.951-2.144c.348-.121.666-.308.939-.544l.548 2.035-1.487-1.491zm1.236-.841c.237-.273.423-.591.544-.939l1.491 1.487-2.035-.548zm.654-1.348c.034-.176.052-.357.052-.542 0-.185-.018-.367-.052-.542l2.034.542-2.034.542z"/><path fill="#FFF" d="M9.292 8.659L8.75 6.625l-.542 2.034c.175-.033.357-.052.542-.052s.367.019.542.052zM5.857 11.5c0-.185.018-.367.052-.542l-2.034.542 2.034.542c-.033-.175-.052-.357-.052-.542zm2.351 2.841l.542 2.034.542-2.034c-.176.034-.357.052-.542.052s-.367-.019-.542-.052zm3.435-2.841c0 .185-.018.367-.052.542l2.034-.542-2.034-.542c.033.175.052.357.052.542zm-.455-4.222L9.701 8.769c.348.122.666.308.939.544l.548-2.035zm-.251 6.112l2.035.548-1.491-1.487c-.121.348-.307.665-.544.939zm-4.625 2.332l1.487-1.491c-.348-.121-.666-.308-.939-.544l-.548 2.035zm.251-6.112l-2.035-.548 1.491 1.487c.121-.348.307-.665.544-.939zm3.138 4.621l1.487 1.491-.548-2.035c-.274.237-.591.423-.939.544zM6.019 12.45l-1.491 1.487 2.035-.548c-.237-.273-.423-.59-.544-.939zm1.78-3.681L6.312 7.278l.548 2.035c.274-.237.591-.423.939-.544zm5.173.293l-2.035.548c.237.273.423.591.544.939l1.491-1.487z"/><circle fill="#FFF" cx="8.75" cy="11.5" r="2.438"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="NTSC-T.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" />
|
||||
<path
|
||||
fill="#fe0000"
|
||||
d="M 32,0 H 17 V 13 H 0 v 9 c 0,2.209 1.791,4 4,4 h 28 c 2.209,0 4,-1.791 4,-4 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#000095"
|
||||
d="M 17,0 H 4 C 1.791,0 0,1.791 0,4 v 9 H 17 Z M 10.937,4.61 12.972,4.062 11.481,5.549 C 11.36,5.201 11.174,4.884 10.937,4.61 Z m 0.251,1.89 c 0,1.346 -1.091,2.438 -2.438,2.438 -1.347,0 -2.438,-1.092 -2.438,-2.438 0,-1.346 1.092,-2.438 2.438,-2.438 1.346,0 2.438,1.092 2.438,2.438 z m 0,-4.222 -0.548,2.035 C 10.367,4.076 10.049,3.89 9.701,3.769 Z M 8.75,1.625 9.292,3.659 C 9.117,3.626 8.935,3.607 8.75,3.607 8.565,3.607 8.383,3.626 8.208,3.659 Z M 7.799,3.769 C 7.451,3.89 7.134,4.076 6.86,4.313 L 6.312,2.278 Z M 6.563,4.61 C 6.326,4.883 6.14,5.201 6.019,5.549 L 4.528,4.062 Z M 5.909,5.958 C 5.875,6.134 5.857,6.315 5.857,6.5 c 0,0.185 0.018,0.367 0.052,0.542 L 3.875,6.5 Z M 6.019,7.45 C 6.14,7.798 6.327,8.116 6.563,8.389 L 4.528,8.937 Z M 6.312,10.722 6.86,8.687 C 7.133,8.923 7.451,9.11 7.799,9.231 Z M 8.75,11.375 8.208,9.341 c 0.176,0.034 0.357,0.052 0.542,0.052 0.185,0 0.367,-0.018 0.542,-0.052 z M 9.701,9.231 C 10.049,9.11 10.367,8.923 10.64,8.687 l 0.548,2.035 z M 10.937,8.39 C 11.174,8.117 11.36,7.799 11.481,7.451 l 1.491,1.487 z M 11.591,7.042 C 11.625,6.866 11.643,6.685 11.643,6.5 11.643,6.315 11.625,6.133 11.591,5.958 L 13.625,6.5 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="M 9.292,3.659 8.75,1.625 8.208,3.659 C 8.383,3.626 8.565,3.607 8.75,3.607 c 0.185,0 0.367,0.019 0.542,0.052 z M 5.857,6.5 c 0,-0.185 0.018,-0.367 0.052,-0.542 L 3.875,6.5 5.909,7.042 C 5.876,6.867 5.857,6.685 5.857,6.5 Z M 8.208,9.341 8.75,11.375 9.292,9.341 C 9.116,9.375 8.935,9.393 8.75,9.393 8.565,9.393 8.383,9.374 8.208,9.341 Z M 11.643,6.5 c 0,0.185 -0.018,0.367 -0.052,0.542 L 13.625,6.5 11.591,5.958 c 0.033,0.175 0.052,0.357 0.052,0.542 z M 11.188,2.278 9.701,3.769 c 0.348,0.122 0.666,0.308 0.939,0.544 z M 10.937,8.39 12.972,8.938 11.481,7.451 C 11.36,7.799 11.174,8.116 10.937,8.39 Z M 6.312,10.722 7.799,9.231 C 7.451,9.11 7.133,8.923 6.86,8.687 Z M 6.563,4.61 4.528,4.062 6.019,5.549 C 6.14,5.201 6.326,4.884 6.563,4.61 Z M 9.701,9.231 11.188,10.722 10.64,8.687 C 10.366,8.924 10.049,9.11 9.701,9.231 Z M 6.019,7.45 4.528,8.937 6.563,8.389 C 6.326,8.116 6.14,7.799 6.019,7.45 Z M 7.799,3.769 6.312,2.278 6.86,4.313 C 7.134,4.076 7.451,3.89 7.799,3.769 Z m 5.173,0.293 -2.035,0.548 c 0.237,0.273 0.423,0.591 0.544,0.939 z"
|
||||
id="path3" />
|
||||
<circle
|
||||
fill="#ffffff"
|
||||
cx="8.75"
|
||||
cy="6.5"
|
||||
r="2.438"
|
||||
id="circle3" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 3.5 KiB |
@@ -1,34 +1,158 @@
|
||||
<?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 -4 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_503_3486)">
|
||||
<rect width="28" height="20" rx="2" fill="white"/>
|
||||
<mask id="mask0_503_3486" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="28" height="20">
|
||||
<rect width="28" height="20" rx="2" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_503_3486)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M28 0H0V1.33333H28V0ZM28 2.66667H0V4H28V2.66667ZM0 5.33333H28V6.66667H0V5.33333ZM28 8H0V9.33333H28V8ZM0 10.6667H28V12H0V10.6667ZM28 13.3333H0V14.6667H28V13.3333ZM0 16H28V17.3333H0V16ZM28 18.6667H0V20H28V18.6667Z" fill="#D02F44"/>
|
||||
<rect width="12" height="9.33333" fill="#46467F"/>
|
||||
<g filter="url(#filter0_d_503_3486)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.66665 1.99999C2.66665 2.36818 2.36817 2.66666 1.99998 2.66666C1.63179 2.66666 1.33331 2.36818 1.33331 1.99999C1.33331 1.63181 1.63179 1.33333 1.99998 1.33333C2.36817 1.33333 2.66665 1.63181 2.66665 1.99999ZM5.33331 1.99999C5.33331 2.36818 5.03484 2.66666 4.66665 2.66666C4.29846 2.66666 3.99998 2.36818 3.99998 1.99999C3.99998 1.63181 4.29846 1.33333 4.66665 1.33333C5.03484 1.33333 5.33331 1.63181 5.33331 1.99999ZM7.33331 2.66666C7.7015 2.66666 7.99998 2.36818 7.99998 1.99999C7.99998 1.63181 7.7015 1.33333 7.33331 1.33333C6.96512 1.33333 6.66665 1.63181 6.66665 1.99999C6.66665 2.36818 6.96512 2.66666 7.33331 2.66666ZM10.6666 1.99999C10.6666 2.36818 10.3682 2.66666 9.99998 2.66666C9.63179 2.66666 9.33331 2.36818 9.33331 1.99999C9.33331 1.63181 9.63179 1.33333 9.99998 1.33333C10.3682 1.33333 10.6666 1.63181 10.6666 1.99999ZM3.33331 3.99999C3.7015 3.99999 3.99998 3.70152 3.99998 3.33333C3.99998 2.96514 3.7015 2.66666 3.33331 2.66666C2.96512 2.66666 2.66665 2.96514 2.66665 3.33333C2.66665 3.70152 2.96512 3.99999 3.33331 3.99999ZM6.66665 3.33333C6.66665 3.70152 6.36817 3.99999 5.99998 3.99999C5.63179 3.99999 5.33331 3.70152 5.33331 3.33333C5.33331 2.96514 5.63179 2.66666 5.99998 2.66666C6.36817 2.66666 6.66665 2.96514 6.66665 3.33333ZM8.66665 3.99999C9.03484 3.99999 9.33331 3.70152 9.33331 3.33333C9.33331 2.96514 9.03484 2.66666 8.66665 2.66666C8.29846 2.66666 7.99998 2.96514 7.99998 3.33333C7.99998 3.70152 8.29846 3.99999 8.66665 3.99999ZM10.6666 4.66666C10.6666 5.03485 10.3682 5.33333 9.99998 5.33333C9.63179 5.33333 9.33331 5.03485 9.33331 4.66666C9.33331 4.29847 9.63179 3.99999 9.99998 3.99999C10.3682 3.99999 10.6666 4.29847 10.6666 4.66666ZM7.33331 5.33333C7.7015 5.33333 7.99998 5.03485 7.99998 4.66666C7.99998 4.29847 7.7015 3.99999 7.33331 3.99999C6.96512 3.99999 6.66665 4.29847 6.66665 4.66666C6.66665 5.03485 6.96512 5.33333 7.33331 5.33333ZM5.33331 4.66666C5.33331 5.03485 5.03484 5.33333 4.66665 5.33333C4.29846 5.33333 3.99998 5.03485 3.99998 4.66666C3.99998 4.29847 4.29846 3.99999 4.66665 3.99999C5.03484 3.99999 5.33331 4.29847 5.33331 4.66666ZM1.99998 5.33333C2.36817 5.33333 2.66665 5.03485 2.66665 4.66666C2.66665 4.29847 2.36817 3.99999 1.99998 3.99999C1.63179 3.99999 1.33331 4.29847 1.33331 4.66666C1.33331 5.03485 1.63179 5.33333 1.99998 5.33333ZM3.99998 5.99999C3.99998 6.36819 3.7015 6.66666 3.33331 6.66666C2.96512 6.66666 2.66665 6.36819 2.66665 5.99999C2.66665 5.6318 2.96512 5.33333 3.33331 5.33333C3.7015 5.33333 3.99998 5.6318 3.99998 5.99999ZM5.99998 6.66666C6.36817 6.66666 6.66665 6.36819 6.66665 5.99999C6.66665 5.6318 6.36817 5.33333 5.99998 5.33333C5.63179 5.33333 5.33331 5.6318 5.33331 5.99999C5.33331 6.36819 5.63179 6.66666 5.99998 6.66666ZM9.33331 5.99999C9.33331 6.36819 9.03484 6.66666 8.66665 6.66666C8.29846 6.66666 7.99998 6.36819 7.99998 5.99999C7.99998 5.6318 8.29846 5.33333 8.66665 5.33333C9.03484 5.33333 9.33331 5.6318 9.33331 5.99999ZM9.99998 8C10.3682 8 10.6666 7.70152 10.6666 7.33333C10.6666 6.96514 10.3682 6.66666 9.99998 6.66666C9.63179 6.66666 9.33331 6.96514 9.33331 7.33333C9.33331 7.70152 9.63179 8 9.99998 8ZM7.99998 7.33333C7.99998 7.70152 7.7015 8 7.33331 8C6.96512 8 6.66665 7.70152 6.66665 7.33333C6.66665 6.96514 6.96512 6.66666 7.33331 6.66666C7.7015 6.66666 7.99998 6.96514 7.99998 7.33333ZM4.66665 8C5.03484 8 5.33331 7.70152 5.33331 7.33333C5.33331 6.96514 5.03484 6.66666 4.66665 6.66666C4.29846 6.66666 3.99998 6.96514 3.99998 7.33333C3.99998 7.70152 4.29846 8 4.66665 8ZM2.66665 7.33333C2.66665 7.70152 2.36817 8 1.99998 8C1.63179 8 1.33331 7.70152 1.33331 7.33333C1.33331 6.96514 1.63179 6.66666 1.99998 6.66666C2.36817 6.66666 2.66665 6.96514 2.66665 7.33333Z" fill="url(#paint0_linear_503_3486)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_503_3486" x="1.33331" y="1.33333" width="9.33331" height="7.66667" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_503_3486"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_503_3486" result="shape"/>
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_503_3486" x1="1.33331" y1="1.33333" x2="1.33331" y2="7.99999" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white"/>
|
||||
<stop offset="1" stop-color="#F0F0F0"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_503_3486">
|
||||
<rect width="28" height="20" rx="2" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
width="800"
|
||||
height="571.42859"
|
||||
viewBox="0 -4 28 20.000001"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="NTSC-U.svg"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="0.96875"
|
||||
inkscape:cx="400"
|
||||
inkscape:cy="285.93548"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<g
|
||||
clip-path="url(#clip0_503_3486)"
|
||||
id="g5"
|
||||
transform="translate(0,-4)">
|
||||
<rect
|
||||
width="28"
|
||||
height="20"
|
||||
rx="2"
|
||||
fill="#ffffff"
|
||||
id="rect1"
|
||||
x="0"
|
||||
y="0" />
|
||||
<mask
|
||||
id="mask0_503_3486"
|
||||
maskUnits="userSpaceOnUse"
|
||||
x="0"
|
||||
y="0"
|
||||
width="28"
|
||||
height="20">
|
||||
<rect
|
||||
width="28"
|
||||
height="20"
|
||||
rx="2"
|
||||
fill="#ffffff"
|
||||
id="rect2"
|
||||
x="0"
|
||||
y="0" />
|
||||
</mask>
|
||||
<g
|
||||
mask="url(#mask0_503_3486)"
|
||||
id="g4">
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M 28,0 H 0 v 1.33333 h 28 z m 0,2.66667 H 0 V 4 H 28 Z M 0,5.33333 H 28 V 6.66667 H 0 Z M 28,8 H 0 V 9.33333 H 28 Z M 0,10.6667 H 28 V 12 H 0 Z m 28,2.6666 H 0 v 1.3334 H 28 Z M 0,16 h 28 v 1.3333 H 0 Z m 28,2.6667 H 0 V 20 h 28 z"
|
||||
fill="#d02f44"
|
||||
id="path2" />
|
||||
<rect
|
||||
width="12"
|
||||
height="9.3333302"
|
||||
fill="#46467f"
|
||||
id="rect3"
|
||||
x="0"
|
||||
y="0" />
|
||||
<g
|
||||
filter="url(#filter0_d_503_3486)"
|
||||
id="g3">
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 2.66665,1.99999 c 0,0.36819 -0.29848,0.66667 -0.66667,0.66667 -0.36819,0 -0.66667,-0.29848 -0.66667,-0.66667 0,-0.36818 0.29848,-0.66666 0.66667,-0.66666 0.36819,0 0.66667,0.29848 0.66667,0.66666 z m 2.66666,0 c 0,0.36819 -0.29847,0.66667 -0.66666,0.66667 -0.36819,0 -0.66667,-0.29848 -0.66667,-0.66667 0,-0.36818 0.29848,-0.66666 0.66667,-0.66666 0.36819,0 0.66666,0.29848 0.66666,0.66666 z m 2,0.66667 c 0.36819,0 0.66667,-0.29848 0.66667,-0.66667 0,-0.36818 -0.29848,-0.66666 -0.66667,-0.66666 -0.36819,0 -0.66666,0.29848 -0.66666,0.66666 0,0.36819 0.29847,0.66667 0.66666,0.66667 z M 10.6666,1.99999 c 0,0.36819 -0.2984,0.66667 -0.66662,0.66667 -0.36819,0 -0.66667,-0.29848 -0.66667,-0.66667 0,-0.36818 0.29848,-0.66666 0.66667,-0.66666 0.36822,0 0.66662,0.29848 0.66662,0.66666 z m -7.33329,2 c 0.36819,0 0.66667,-0.29847 0.66667,-0.66666 0,-0.36819 -0.29848,-0.66667 -0.66667,-0.66667 -0.36819,0 -0.66666,0.29848 -0.66666,0.66667 0,0.36819 0.29847,0.66666 0.66666,0.66666 z M 6.66665,3.33333 c 0,0.36819 -0.29848,0.66666 -0.66667,0.66666 -0.36819,0 -0.66667,-0.29847 -0.66667,-0.66666 0,-0.36819 0.29848,-0.66667 0.66667,-0.66667 0.36819,0 0.66667,0.29848 0.66667,0.66667 z m 2,0.66666 c 0.36819,0 0.66666,-0.29847 0.66666,-0.66666 0,-0.36819 -0.29847,-0.66667 -0.66666,-0.66667 -0.36819,0 -0.66667,0.29848 -0.66667,0.66667 0,0.36819 0.29848,0.66666 0.66667,0.66666 z m 1.99995,0.66667 c 0,0.36819 -0.2984,0.66667 -0.66662,0.66667 -0.36819,0 -0.66667,-0.29848 -0.66667,-0.66667 0,-0.36819 0.29848,-0.66667 0.66667,-0.66667 0.36822,0 0.66662,0.29848 0.66662,0.66667 z M 7.33331,5.33333 c 0.36819,0 0.66667,-0.29848 0.66667,-0.66667 0,-0.36819 -0.29848,-0.66667 -0.66667,-0.66667 -0.36819,0 -0.66666,0.29848 -0.66666,0.66667 0,0.36819 0.29847,0.66667 0.66666,0.66667 z m -2,-0.66667 c 0,0.36819 -0.29847,0.66667 -0.66666,0.66667 -0.36819,0 -0.66667,-0.29848 -0.66667,-0.66667 0,-0.36819 0.29848,-0.66667 0.66667,-0.66667 0.36819,0 0.66666,0.29848 0.66666,0.66667 z M 1.99998,5.33333 c 0.36819,0 0.66667,-0.29848 0.66667,-0.66667 0,-0.36819 -0.29848,-0.66667 -0.66667,-0.66667 -0.36819,0 -0.66667,0.29848 -0.66667,0.66667 0,0.36819 0.29848,0.66667 0.66667,0.66667 z m 2,0.66666 c 0,0.3682 -0.29848,0.66667 -0.66667,0.66667 -0.36819,0 -0.66666,-0.29847 -0.66666,-0.66667 0,-0.36819 0.29847,-0.66666 0.66666,-0.66666 0.36819,0 0.66667,0.29847 0.66667,0.66666 z m 2,0.66667 c 0.36819,0 0.66667,-0.29847 0.66667,-0.66667 0,-0.36819 -0.29848,-0.66666 -0.66667,-0.66666 -0.36819,0 -0.66667,0.29847 -0.66667,0.66666 0,0.3682 0.29848,0.66667 0.66667,0.66667 z M 9.33331,5.99999 c 0,0.3682 -0.29847,0.66667 -0.66666,0.66667 -0.36819,0 -0.66667,-0.29847 -0.66667,-0.66667 0,-0.36819 0.29848,-0.66666 0.66667,-0.66666 0.36819,0 0.66666,0.29847 0.66666,0.66666 z M 9.99998,8 c 0.36822,0 0.66662,-0.29848 0.66662,-0.66667 0,-0.36819 -0.2984,-0.66667 -0.66662,-0.66667 -0.36819,0 -0.66667,0.29848 -0.66667,0.66667 C 9.33331,7.70152 9.63179,8 9.99998,8 Z m -2,-0.66667 C 7.99998,7.70152 7.7015,8 7.33331,8 6.96512,8 6.66665,7.70152 6.66665,7.33333 c 0,-0.36819 0.29847,-0.66667 0.66666,-0.66667 0.36819,0 0.66667,0.29848 0.66667,0.66667 z M 4.66665,8 C 5.03484,8 5.33331,7.70152 5.33331,7.33333 5.33331,6.96514 5.03484,6.66666 4.66665,6.66666 4.29846,6.66666 3.99998,6.96514 3.99998,7.33333 3.99998,7.70152 4.29846,8 4.66665,8 Z m -2,-0.66667 C 2.66665,7.70152 2.36817,8 1.99998,8 1.63179,8 1.33331,7.70152 1.33331,7.33333 c 0,-0.36819 0.29848,-0.66667 0.66667,-0.66667 0.36819,0 0.66667,0.29848 0.66667,0.66667 z"
|
||||
fill="url(#paint0_linear_503_3486)"
|
||||
id="path3"
|
||||
style="fill:url(#paint0_linear_503_3486)" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs
|
||||
id="defs8">
|
||||
<filter
|
||||
id="filter0_d_503_3486"
|
||||
x="1.33331"
|
||||
y="1.33333"
|
||||
width="9.3333101"
|
||||
height="7.6666698"
|
||||
filterUnits="userSpaceOnUse"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feFlood
|
||||
flood-opacity="0"
|
||||
result="BackgroundImageFix"
|
||||
id="feFlood5" />
|
||||
<feColorMatrix
|
||||
in="SourceAlpha"
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha"
|
||||
id="feColorMatrix5" />
|
||||
<feOffset
|
||||
dy="1"
|
||||
id="feOffset5" />
|
||||
<feColorMatrix
|
||||
type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0"
|
||||
id="feColorMatrix6" />
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in2="BackgroundImageFix"
|
||||
result="effect1_dropShadow_503_3486"
|
||||
id="feBlend6" />
|
||||
<feBlend
|
||||
mode="normal"
|
||||
in="SourceGraphic"
|
||||
in2="effect1_dropShadow_503_3486"
|
||||
result="shape"
|
||||
id="feBlend7" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="paint0_linear_503_3486"
|
||||
x1="1.33331"
|
||||
y1="1.33333"
|
||||
x2="1.33331"
|
||||
y2="7.99999"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
stop-color="white"
|
||||
id="stop7" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#F0F0F0"
|
||||
id="stop8" />
|
||||
</linearGradient>
|
||||
<clipPath
|
||||
id="clip0_503_3486">
|
||||
<rect
|
||||
width="28"
|
||||
height="20"
|
||||
rx="2"
|
||||
fill="#ffffff"
|
||||
id="rect8"
|
||||
x="0"
|
||||
y="0" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 7.4 KiB |
@@ -1 +1,58 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#00247D" d="M32 5H4c-.205 0-.407.015-.604.045l-.004 1.754-2.73-.004C.244 7.427 0 8.185 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><path d="M9 26.023l-1.222 1.129.121-1.66-1.645-.251 1.373-.94-.829-1.443 1.591.488L9 21.797l.612 1.549 1.591-.488-.83 1.443 1.374.94-1.645.251.121 1.66zM27.95 9.562l-.799.738.079-1.086-1.077-.164.899-.615-.542-.944 1.04.319.4-1.013.401 1.013 1.041-.319-.543.944.898.615-1.076.164.079 1.086zm-4 6l-.799.739.079-1.086-1.077-.164.899-.616-.542-.944 1.04.319.4-1.013.401 1.013 1.041-.319-.543.944.898.616-1.076.164.079 1.086zm9-2l-.799.739.079-1.086-1.077-.164.899-.616-.542-.944 1.04.319.4-1.013.401 1.013 1.041-.319-.543.944.898.616-1.076.164.079 1.086zm-5 14l-.799.739.079-1.086-1.077-.164.899-.616-.542-.944 1.04.319.4-1.013.401 1.013 1.041-.319-.543.944.898.616-1.076.164.079 1.086zM31 16l.294.596.657.095-.475.463.112.655L31 17.5l-.588.309.112-.655-.475-.463.657-.095z" fill="#FFF"/><path fill="#00247D" d="M19 18V5H4c-.32 0-.604.045-.604.045l-.004 1.754-2.73-.004S.62 6.854.535 7C.195 7.589 0 8.272 0 9v9h19z"/><path fill="#EEE" d="M19 5h-2.331L12 8.269V5H7v2.569L3.396 5.045c-.614.094-1.19.325-1.672.665L6.426 9H4.69L.967 6.391c-.11.129-.211.262-.305.404L3.813 9H0v5h3.885L0 16.766V18h3.332L7 15.432V18h5v-3.269L16.668 18H19v-2.029L16.185 14H19V9h-2.814L19 7.029V5z"/><path fill="#CF1B2B" d="M11 5H8v5H0v3h8v5h3v-5h8v-3h-8z"/><path fill="#CF1B2B" d="M19 5h-1.461L12 8.879V9h1.571L19 5.198zm-17.276.71c-.281.195-.534.423-.757.681L4.69 9h1.735L1.724 5.71zM6.437 14L.734 18h1.727L7 14.822V14zM19 17.802v-1.22L15.313 14H13.57z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="PAL-A.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs6" />
|
||||
<sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<path
|
||||
fill="#00247d"
|
||||
d="M 32,0 H 4 C 3.795,0 3.593,0.015 3.396,0.045 L 3.392,1.799 0.662,1.795 C 0.244,2.427 0,3.185 0,4 v 18 c 0,2.209 1.791,4 4,4 h 28 c 2.209,0 4,-1.791 4,-4 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
d="M 9,21.023 7.778,22.152 7.899,20.492 6.254,20.241 7.627,19.301 6.798,17.858 8.389,18.346 9,16.797 l 0.612,1.549 1.591,-0.488 -0.83,1.443 1.374,0.94 -1.645,0.251 0.121,1.66 z M 27.95,4.562 27.151,5.3 27.23,4.214 26.153,4.05 27.052,3.435 26.51,2.491 27.55,2.81 27.95,1.797 28.351,2.81 29.392,2.491 28.849,3.435 29.747,4.05 28.671,4.214 28.75,5.3 Z m -4,6 -0.799,0.739 0.079,-1.086 -1.077,-0.164 0.899,-0.616 -0.542,-0.944 1.04,0.319 0.4,-1.013 0.401,1.013 1.041,-0.319 -0.543,0.944 0.898,0.616 -1.076,0.164 0.079,1.086 z m 9,-2 -0.799,0.739 0.079,-1.086 -1.077,-0.164 0.899,-0.616 -0.542,-0.944 1.04,0.319 0.4,-1.013 0.401,1.013 1.041,-0.319 -0.543,0.944 0.898,0.616 -1.076,0.164 0.079,1.086 z m -5,14 -0.799,0.739 0.079,-1.086 -1.077,-0.164 0.899,-0.616 -0.542,-0.944 1.04,0.319 0.4,-1.013 0.401,1.013 1.041,-0.319 -0.543,0.944 0.898,0.616 -1.076,0.164 0.079,1.086 z M 31,11 l 0.294,0.596 0.657,0.095 -0.475,0.463 0.112,0.655 L 31,12.5 l -0.588,0.309 0.112,-0.655 -0.475,-0.463 0.657,-0.095 z"
|
||||
fill="#ffffff"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#00247d"
|
||||
d="M 19,13 V 0 H 4 C 3.68,0 3.396,0.045 3.396,0.045 L 3.392,1.799 0.662,1.795 C 0.662,1.795 0.62,1.854 0.535,2 0.195,2.589 0,3.272 0,4 v 9 z"
|
||||
id="path3" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 19,0 H 16.669 L 12,3.269 V 0 H 7 V 2.569 L 3.396,0.045 C 2.782,0.139 2.206,0.37 1.724,0.71 L 6.426,4 H 4.69 L 0.967,1.391 C 0.857,1.52 0.756,1.653 0.662,1.795 L 3.813,4 H 0 V 9 H 3.885 L 0,11.766 V 13 H 3.332 L 7,10.432 V 13 h 5 V 9.731 L 16.668,13 H 19 V 10.971 L 16.185,9 H 19 V 4 H 16.186 L 19,2.029 Z"
|
||||
id="path4" />
|
||||
<path
|
||||
fill="#cf1b2b"
|
||||
d="M 11,0 H 8 V 5 H 0 v 3 h 8 v 5 h 3 V 8 h 8 V 5 h -8 z"
|
||||
id="path5" />
|
||||
<path
|
||||
fill="#cf1b2b"
|
||||
d="M 19,0 H 17.539 L 12,3.879 V 4 h 1.571 L 19,0.198 Z M 1.724,0.71 C 1.443,0.905 1.19,1.133 0.967,1.391 L 4.69,4 H 6.425 Z M 6.437,9 0.734,13 H 2.461 L 7,9.822 V 9 Z M 19,12.802 v -1.22 L 15.313,9 H 13.57 Z"
|
||||
id="path6" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -1 +1,58 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DE3830" d="M32 5H6.5L19 13.5h17V9c0-2.209-1.791-4-4-4z"/><path fill="#002395" d="M6.5 31H32c2.209 0 4-1.791 4-4v-4.5H19L6.5 31z"/><path fill="#141414" d="M0 11v14l10.5-7z"/><path fill="#FFB611" d="M0 9v2l10.5 7L0 25v2l13.5-9z"/><path fill="#007A4D" d="M3.541 5.028C1.548 5.257 0 6.947 0 9l13.5 9L0 27c0 2.053 1.548 3.743 3.541 3.972L18.5 20.5H36v-5H18.5L3.541 5.028z"/><path fill="#EEE" d="M6.5 5H4c-.156 0-.308.011-.459.028L18.5 15.5H36v-2H19L6.5 5zM3.541 30.972c.151.017.303.028.459.028h2.5L19 22.5h17v-2H18.5L3.541 30.972z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="PAL-AF.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs6" />
|
||||
<sodipodi:namedview
|
||||
id="namedview6"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<path
|
||||
fill="#de3830"
|
||||
d="M 32,0 H 6.5 L 19,8.5 H 36 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#002395"
|
||||
d="M 6.5,26 H 32 c 2.209,0 4,-1.791 4,-4 V 17.5 H 19 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#141414"
|
||||
d="M 0,6 V 20 L 10.5,13 Z"
|
||||
id="path3" />
|
||||
<path
|
||||
fill="#ffb611"
|
||||
d="M 0,4 V 6 L 10.5,13 0,20 v 2 l 13.5,-9 z"
|
||||
id="path4" />
|
||||
<path
|
||||
fill="#007a4d"
|
||||
d="M 3.541,0.028 C 1.548,0.257 0,1.947 0,4 L 13.5,13 0,22 c 0,2.053 1.548,3.743 3.541,3.972 L 18.5,15.5 H 36 v -5 H 18.5 Z"
|
||||
id="path5" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 6.5,0 H 4 C 3.844,0 3.692,0.011 3.541,0.028 L 18.5,10.5 H 36 v -2 H 19 Z M 3.541,25.972 C 3.692,25.989 3.844,26 4,26 H 6.5 L 19,17.5 h 17 v -2 H 18.5 Z"
|
||||
id="path6" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 607 B After Width: | Height: | Size: 1.7 KiB |
@@ -1,2 +1,48 @@
|
||||
<?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 36 36" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--twemoji" preserveAspectRatio="xMidYMid meet"><path fill="#EEE" d="M0 13h36v10H0z"></path><path fill="#ED2939" d="M32 5H4a4 4 0 0 0-4 4v4h36V9a4 4 0 0 0-4-4zM4 31h28a4 4 0 0 0 4-4v-4H0v4a4 4 0 0 0 4 4z"></path></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
width="800"
|
||||
height="577.77777"
|
||||
viewBox="0 0 36 26"
|
||||
aria-hidden="true"
|
||||
role="img"
|
||||
class="iconify iconify--twemoji"
|
||||
preserveAspectRatio="xMidYMid"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="PAL-AU.svg"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="0.96875"
|
||||
inkscape:cx="400"
|
||||
inkscape:cy="289.03226"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 0,8 H 36 V 18 H 0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#ed2939"
|
||||
d="M 32,0 H 4 A 4,4 0 0 0 0,4 V 8 H 36 V 4 A 4,4 0 0 0 32,0 Z M 4,26 h 28 a 4,4 0 0 0 4,-4 V 18 H 0 v 4 a 4,4 0 0 0 4,4 z"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 520 B After Width: | Height: | Size: 1.4 KiB |
@@ -1 +1,46 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#141414" d="M4 5C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h8V5H4z"/><path fill="#FEE833" d="M12 5h12v26H12z"/><path fill="#EE232C" d="M32 5h-8v26h8c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="PAL-BE.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" />
|
||||
<path
|
||||
fill="#141414"
|
||||
d="M 4,0 C 1.791,0 0,1.791 0,4 v 18 c 0,2.209 1.791,4 4,4 h 8 V 0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#fee833"
|
||||
d="M 12,0 H 24 V 26 H 12 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#ee232c"
|
||||
d="m 32,0 h -8 v 26 h 8 c 2.209,0 4,-1.791 4,-4 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path3" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 272 B After Width: | Height: | Size: 1.3 KiB |
@@ -1 +1,42 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#039" d="M32 5H4C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><path d="M18.539 9.705l.849-.617h-1.049l-.325-.998-.324.998h-1.049l.849.617-.325.998.849-.617.849.617zm0 17.333l.849-.617h-1.049l-.325-.998-.324.998h-1.049l.849.617-.325.998.849-.617.849.617zm-8.666-8.667l.849-.617h-1.05l-.324-.998-.325.998H7.974l.849.617-.324.998.849-.617.849.617zm1.107-4.285l.849-.617h-1.05l-.324-.998-.324.998h-1.05l.849.617-.324.998.849-.617.849.617zm0 8.619l.849-.617h-1.05l-.324-.998-.324.998h-1.05l.849.617-.324.998.849-.617.849.617zm3.226-11.839l.849-.617h-1.05l-.324-.998-.324.998h-1.05l.849.617-.324.998.849-.617.849.617zm0 15.067l.849-.617h-1.05l-.324-.998-.324.998h-1.05l.849.617-.324.998.849-.616.849.616zm11.921-7.562l-.849-.617h1.05l.324-.998.325.998h1.049l-.849.617.324.998-.849-.617-.849.617zm-1.107-4.285l-.849-.617h1.05l.324-.998.324.998h1.05l-.849.617.324.998-.849-.617-.849.617zm0 8.619l-.849-.617h1.05l.324-.998.324.998h1.05l-.849.617.324.998-.849-.617-.849.617zm-3.226-11.839l-.849-.617h1.05l.324-.998.324.998h1.05l-.849.617.324.998-.849-.617-.849.617zm0 15.067l-.849-.617h1.05l.324-.998.324.998h1.05l-.849.617.324.998-.849-.616-.849.616z" fill="#FC0"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="PAL-E.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
fill="#003399"
|
||||
d="M 32,0 H 4 C 1.791,0 0,1.791 0,4 v 18 c 0,2.209 1.791,4 4,4 h 28 c 2.209,0 4,-1.791 4,-4 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
d="M 18.539,4.705 19.388,4.088 H 18.339 L 18.014,3.09 17.69,4.088 h -1.049 l 0.849,0.617 -0.325,0.998 0.849,-0.617 0.849,0.617 z m 0,17.333 0.849,-0.617 h -1.049 l -0.325,-0.998 -0.324,0.998 h -1.049 l 0.849,0.617 -0.325,0.998 0.849,-0.617 0.849,0.617 z M 9.873,13.371 10.722,12.754 H 9.672 L 9.348,11.756 9.023,12.754 H 7.974 l 0.849,0.617 -0.324,0.998 0.849,-0.617 0.849,0.617 z M 10.98,9.086 11.829,8.469 h -1.05 L 10.455,7.471 10.131,8.469 h -1.05 l 0.849,0.617 -0.324,0.998 0.849,-0.617 0.849,0.617 z m 0,8.619 0.849,-0.617 h -1.05 l -0.324,-0.998 -0.324,0.998 h -1.05 l 0.849,0.617 -0.324,0.998 0.849,-0.617 0.849,0.617 z M 14.206,5.866 15.055,5.249 h -1.05 L 13.681,4.251 13.357,5.249 h -1.05 l 0.849,0.617 -0.324,0.998 0.849,-0.617 0.849,0.617 z m 0,15.067 0.849,-0.617 h -1.05 l -0.324,-0.998 -0.324,0.998 h -1.05 l 0.849,0.617 -0.324,0.998 0.849,-0.616 0.849,0.616 z m 11.921,-7.562 -0.849,-0.617 h 1.05 l 0.324,-0.998 0.325,0.998 h 1.049 l -0.849,0.617 0.324,0.998 -0.849,-0.617 -0.849,0.617 z M 25.02,9.086 24.171,8.469 h 1.05 l 0.324,-0.998 0.324,0.998 h 1.05 l -0.849,0.617 0.324,0.998 -0.849,-0.617 -0.849,0.617 z m 0,8.619 -0.849,-0.617 h 1.05 l 0.324,-0.998 0.324,0.998 h 1.05 l -0.849,0.617 0.324,0.998 -0.849,-0.617 -0.849,0.617 z M 21.794,5.866 20.945,5.249 h 1.05 l 0.324,-0.998 0.324,0.998 h 1.05 L 22.844,5.866 23.168,6.864 22.319,6.247 21.47,6.864 Z m 0,15.067 -0.849,-0.617 h 1.05 l 0.324,-0.998 0.324,0.998 h 1.05 l -0.849,0.617 0.324,0.998 -0.849,-0.616 -0.849,0.616 z"
|
||||
fill="#ffcc00"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.7 KiB |
@@ -1 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 45 45" style="enable-background:new 0 0 45 45;" xml:space="preserve" version="1.1" id="svg2"><metadata id="metadata8"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/></cc:Work></rdf:RDF></metadata><defs id="defs6"><clipPath id="clipPath16" clipPathUnits="userSpaceOnUse"><path id="path18" d="M 0,36 36,36 36,0 0,0 0,36 Z"/></clipPath></defs><g transform="matrix(1.25,0,0,-1.25,0,45)" id="g10"><g id="g12"><g clip-path="url(#clipPath16)" id="g14"><g transform="translate(36,9)" id="g20"><path id="path22" style="fill:#ed2939;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c 0,-2.209 -1.791,-4 -4,-4 l -8,0 0,26 8,0 c 2.209,0 4,-1.791 4,-4 L 0,0 Z"/></g><g transform="translate(4,31)" id="g24"><path id="path26" style="fill:#002495;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c -2.209,0 -4,-1.791 -4,-4 l 0,-18 c 0,-2.209 1.791,-4 4,-4 l 8,0 0,26 -8,0 z"/></g><path id="path28" style="fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" d="M 24,5 12,5 12,31 24,31 24,5 Z"/></g></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 45 32.5"
|
||||
xml:space="preserve"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="PAL-F.svg"
|
||||
width="45"
|
||||
height="32.5"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="17.222222"
|
||||
inkscape:cx="22.5"
|
||||
inkscape:cy="16.258065"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
id="clipPath16"
|
||||
clipPathUnits="userSpaceOnUse"><path
|
||||
id="path18"
|
||||
d="M 0,36 H 36 V 0 H 0 Z" /></clipPath></defs><g
|
||||
transform="matrix(1.25,0,0,-1.25,0,38.75)"
|
||||
id="g10"><g
|
||||
id="g12"><g
|
||||
clip-path="url(#clipPath16)"
|
||||
id="g14"><g
|
||||
transform="translate(36,9)"
|
||||
id="g20"><path
|
||||
id="path22"
|
||||
style="fill:#ed2939;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 0,0 c 0,-2.209 -1.791,-4 -4,-4 h -8 v 26 h 8 c 2.209,0 4,-1.791 4,-4 z" /></g><g
|
||||
transform="translate(4,31)"
|
||||
id="g24"><path
|
||||
id="path26"
|
||||
style="fill:#002495;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 0,0 c -2.209,0 -4,-1.791 -4,-4 v -18 c 0,-2.209 1.791,-4 4,-4 H 8 V 0 Z" /></g><path
|
||||
id="path28"
|
||||
style="fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 24,5 H 12 v 26 h 12 z" /></g></g></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.3 KiB |
@@ -1 +1,50 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EDECEC" d="M32 5H18v10h18V9c0-2.209-1.791-4-4-4z"/><path fill="#EEE" d="M11 5H4C1.791 5 0 6.791 0 9v6h11V5z"/><path fill="#EDECEC" d="M32 31H18V21h18v6c0 2.209-1.791 4-4 4zm-21 0H4c-2.209 0-4-1.791-4-4v-6h11v10z"/><path fill="#003580" d="M18 5h-7v10H0v6h11v10h7V21h18v-6H18z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="PAL-FI.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="namedview4"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
fill="#edecec"
|
||||
d="M 32,0 H 18 V 10 H 36 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 11,0 H 4 C 1.791,0 0,1.791 0,4 v 6 h 11 z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#edecec"
|
||||
d="M 32,26 H 18 V 16 h 18 v 6 c 0,2.209 -1.791,4 -4,4 z M 11,26 H 4 C 1.791,26 0,24.209 0,22 v -6 h 11 z"
|
||||
id="path3" />
|
||||
<path
|
||||
fill="#003580"
|
||||
d="M 18,0 H 11 V 10 H 0 v 6 h 11 v 10 h 7 V 16 H 36 V 10 H 18 Z"
|
||||
id="path4" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 356 B After Width: | Height: | Size: 1.5 KiB |
@@ -1 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 45 45" style="enable-background:new 0 0 45 45;" xml:space="preserve" version="1.1" id="svg2"><metadata id="metadata8"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/></cc:Work></rdf:RDF></metadata><defs id="defs6"><clipPath id="clipPath16" clipPathUnits="userSpaceOnUse"><path id="path18" d="M 0,36 36,36 36,0 0,0 0,36 Z"/></clipPath></defs><g transform="matrix(1.25,0,0,-1.25,0,45)" id="g10"><g id="g12"><g clip-path="url(#clipPath16)" id="g14"><g transform="translate(0,9)" id="g20"><path id="path22" style="fill:#ffcd05;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c 0,-2.209 1.791,-4 4,-4 l 28,0 c 2.209,0 4,1.791 4,4 L 36,4 0,4 0,0 Z"/></g><path id="path24" style="fill:#ed1f24;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,13 36,0 0,9 -36,0 0,-9 z"/><g transform="translate(32,31)" id="g26"><path id="path28" style="fill:#141414;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 -28,0 c -2.209,0 -4,-1.791 -4,-4 l 0,-5 36,0 0,5 C 4,-1.791 2.209,0 0,0"/></g></g></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 45 32.5"
|
||||
xml:space="preserve"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="PAL-G.svg"
|
||||
width="45"
|
||||
height="32.5"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="17.222222"
|
||||
inkscape:cx="22.5"
|
||||
inkscape:cy="16.258065"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
id="clipPath16"
|
||||
clipPathUnits="userSpaceOnUse"><path
|
||||
id="path18"
|
||||
d="M 0,36 H 36 V 0 H 0 Z" /></clipPath></defs><g
|
||||
transform="matrix(1.25,0,0,-1.25,0,38.75)"
|
||||
id="g10"><g
|
||||
id="g12"><g
|
||||
clip-path="url(#clipPath16)"
|
||||
id="g14"><g
|
||||
transform="translate(0,9)"
|
||||
id="g20"><path
|
||||
id="path22"
|
||||
style="fill:#ffcd05;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 0,0 c 0,-2.209 1.791,-4 4,-4 h 28 c 2.209,0 4,1.791 4,4 V 4 H 0 Z" /></g><path
|
||||
id="path24"
|
||||
style="fill:#ed1f24;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 0,13 h 36 v 9 H 0 Z" /><g
|
||||
transform="translate(32,31)"
|
||||
id="g26"><path
|
||||
id="path28"
|
||||
style="fill:#141414;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 0,0 h -28 c -2.209,0 -4,-1.791 -4,-4 V -9 H 4 v 5 C 4,-1.791 2.209,0 0,0" /></g></g></g></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.3 KiB |
@@ -1,2 +1,56 @@
|
||||
<?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 36 36" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--twemoji" preserveAspectRatio="xMidYMid meet"><path fill="#0D5EB0" d="M4 31h28a3.98 3.98 0 0 0 1.935-.5H2.065A3.98 3.98 0 0 0 4 31z"></path><path fill="#EEE" d="M8.5 19.5H0V22h36v-2.5H14zM0 27c0 .17.014.336.035.5h35.931c.02-.164.034-.33.034-.5v-2H0v2zm14-13h22v2.5H14zm0-5.5V11h22V9c0-.17-.014-.336-.035-.5H14z"></path><path fill="#0D5EB0" d="M14 11h22v3H14zM0 22h36v3H0zm2.065 8.5h31.87a4.002 4.002 0 0 0 2.031-3H.035a3.998 3.998 0 0 0 2.03 3zM0 14h5.5v5.5H0zm14 2.5V14H8.5v5.5H36v-3zm19.935-11A3.98 3.98 0 0 0 32 5H4A4.002 4.002 0 0 0 .034 8.5C.014 8.664 0 8.83 0 9v2h5.5V5.5h3V11H14V8.5h21.965a3.998 3.998 0 0 0-2.03-3z"></path><path fill="#EEE" d="M8.5 11V5h-3v6H0v3h5.5v5.5h3V14H14v-3z"></path></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
width="800"
|
||||
height="577.77783"
|
||||
viewBox="0 0 36 26.000002"
|
||||
aria-hidden="true"
|
||||
role="img"
|
||||
class="iconify iconify--twemoji"
|
||||
preserveAspectRatio="xMidYMid"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="PAL-GR.svg"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="namedview4"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="0.96875"
|
||||
inkscape:cx="400"
|
||||
inkscape:cy="289.03226"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
fill="#0d5eb0"
|
||||
d="m 4,26.000002 h 28 a 3.98,3.98 0 0 0 1.935,-0.5 H 2.065 a 3.98,3.98 0 0 0 1.935,0.5 z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 8.5,14.500002 H 0 v 2.5 h 36 v -2.5 H 14 Z m -8.5,7.5 c 0,0.17 0.014,0.336 0.035,0.5 h 35.931 c 0.02,-0.164 0.034,-0.33 0.034,-0.5 v -2 H 0 Z M 14,9.0000017 H 36 V 11.500002 H 14 Z m 0,-5.5 v 2.5 h 22 v -2 c 0,-0.17 -0.014,-0.336 -0.035,-0.5 z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#0d5eb0"
|
||||
d="m 14,6.0000017 h 22 v 3 H 14 Z M 0,17.000002 h 36 v 3 H 0 Z m 2.065,8.5 h 31.87 a 4.002,4.002 0 0 0 2.031,-3 H 0.035 a 3.998,3.998 0 0 0 2.03,3 z M 0,9.0000017 H 5.5 V 14.500002 H 0 Z M 14,11.500002 V 9.0000017 H 8.5 V 14.500002 H 36 v -3 z M 33.935,0.5000017 A 3.98,3.98 0 0 0 32,1.6977483e-6 H 4 A 4.002,4.002 0 0 0 0.034,3.5000017 c -0.02,0.164 -0.034,0.33 -0.034,0.5 v 2 h 5.5 v -5.5 h 3 v 5.5 H 14 v -2.5 h 21.965 a 3.998,3.998 0 0 0 -2.03,-3 z"
|
||||
id="path3" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 8.5,6.0000017 V 1.6977483e-6 h -3 V 6.0000017 H 0 v 3 h 5.5 v 5.5000003 h 3 V 9.0000017 H 14 v -3 z"
|
||||
id="path4" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1009 B After Width: | Height: | Size: 2.3 KiB |
@@ -1 +1,46 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CE2B37" d="M36 27c0 2.209-1.791 4-4 4h-8V5h8c2.209 0 4 1.791 4 4v18z"/><path fill="#009246" d="M4 5C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h8V5H4z"/><path fill="#EEE" d="M12 5h12v26H12z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="PAL-I.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" />
|
||||
<path
|
||||
fill="#ce2b37"
|
||||
d="m 36,22 c 0,2.209 -1.791,4 -4,4 H 24 V 0 h 8 c 2.209,0 4,1.791 4,4 z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#009246"
|
||||
d="M 4,0 C 1.791,0 0,1.791 0,4 v 18 c 0,2.209 1.791,4 4,4 h 8 V 0 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 12,0 H 24 V 26 H 12 Z"
|
||||
id="path3" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 270 B After Width: | Height: | Size: 1.3 KiB |
@@ -1 +1,68 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#138808" d="M0 27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-4H0v4z"/><path fill="#EEE" d="M0 13h36v10H0z"/><path fill="#F93" d="M36 13V9c0-2.209-1.791-4-4-4H4C1.791 5 0 6.791 0 9v4h36z"/><circle fill="navy" cx="18" cy="18" r="4"/><circle fill="#EEE" cx="18" cy="18" r="3"/><path fill="#6666B3" d="M18 15l.146 2.264 1.001-2.035-.73 2.147 1.704-1.498-1.497 1.705 2.147-.731-2.035 1.002L21 18l-2.264.146 2.035 1.001-2.147-.73 1.497 1.704-1.704-1.497.73 2.147-1.001-2.035L18 21l-.146-2.264-1.002 2.035.731-2.147-1.705 1.497 1.498-1.704-2.147.73 2.035-1.001L15 18l2.264-.146-2.035-1.002 2.147.731-1.498-1.705 1.705 1.498-.731-2.147 1.002 2.035z"/><circle fill="navy" cx="18" cy="18" r="1"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
sodipodi:docname="PAL-IN.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs5" />
|
||||
<sodipodi:namedview
|
||||
id="namedview5"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5" />
|
||||
<path
|
||||
fill="#138808"
|
||||
d="m 0,22 c 0,2.209 1.791,4 4,4 h 28 c 2.209,0 4,-1.791 4,-4 V 18 H 0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 0,8 H 36 V 18 H 0 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#ff9933"
|
||||
d="M 36,8 V 4 C 36,1.791 34.209,0 32,0 H 4 C 1.791,0 0,1.791 0,4 v 4 z"
|
||||
id="path3" />
|
||||
<circle
|
||||
fill="#000080"
|
||||
cx="18"
|
||||
cy="13"
|
||||
r="4"
|
||||
id="circle3" />
|
||||
<circle
|
||||
fill="#eeeeee"
|
||||
cx="18"
|
||||
cy="13"
|
||||
r="3"
|
||||
id="circle4" />
|
||||
<path
|
||||
fill="#6666b3"
|
||||
d="m 18,10 0.146,2.264 1.001,-2.035 -0.73,2.147 1.704,-1.498 -1.497,1.705 2.147,-0.731 -2.035,1.002 L 21,13 l -2.264,0.146 2.035,1.001 -2.147,-0.73 1.497,1.704 -1.704,-1.497 0.73,2.147 L 18.146,13.736 18,16 l -0.146,-2.264 -1.002,2.035 0.731,-2.147 -1.705,1.497 1.498,-1.704 -2.147,0.73 2.035,-1.001 L 15,13 l 2.264,-0.146 -2.035,-1.002 2.147,0.731 -1.498,-1.705 1.705,1.498 -0.731,-2.147 1.002,2.035 z"
|
||||
id="path4" />
|
||||
<circle
|
||||
fill="#000080"
|
||||
cx="18"
|
||||
cy="13"
|
||||
r="1"
|
||||
id="circle5" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 765 B After Width: | Height: | Size: 2.0 KiB |
@@ -1 +1,42 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#039" d="M32 5H4C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><path d="M18.539 9.705l.849-.617h-1.049l-.325-.998-.324.998h-1.049l.849.617-.325.998.849-.617.849.617zm0 17.333l.849-.617h-1.049l-.325-.998-.324.998h-1.049l.849.617-.325.998.849-.617.849.617zm-8.666-8.667l.849-.617h-1.05l-.324-.998-.325.998H7.974l.849.617-.324.998.849-.617.849.617zm1.107-4.285l.849-.617h-1.05l-.324-.998-.324.998h-1.05l.849.617-.324.998.849-.617.849.617zm0 8.619l.849-.617h-1.05l-.324-.998-.324.998h-1.05l.849.617-.324.998.849-.617.849.617zm3.226-11.839l.849-.617h-1.05l-.324-.998-.324.998h-1.05l.849.617-.324.998.849-.617.849.617zm0 15.067l.849-.617h-1.05l-.324-.998-.324.998h-1.05l.849.617-.324.998.849-.616.849.616zm11.921-7.562l-.849-.617h1.05l.324-.998.325.998h1.049l-.849.617.324.998-.849-.617-.849.617zm-1.107-4.285l-.849-.617h1.05l.324-.998.324.998h1.05l-.849.617.324.998-.849-.617-.849.617zm0 8.619l-.849-.617h1.05l.324-.998.324.998h1.05l-.849.617.324.998-.849-.617-.849.617zm-3.226-11.839l-.849-.617h1.05l.324-.998.324.998h1.05l-.849.617.324.998-.849-.617-.849.617zm0 15.067l-.849-.617h1.05l.324-.998.324.998h1.05l-.849.617.324.998-.849-.616-.849.616z" fill="#FC0"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="PAL-M.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
fill="#003399"
|
||||
d="M 32,0 H 4 C 1.791,0 0,1.791 0,4 v 18 c 0,2.209 1.791,4 4,4 h 28 c 2.209,0 4,-1.791 4,-4 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
d="M 18.539,4.705 19.388,4.088 H 18.339 L 18.014,3.09 17.69,4.088 h -1.049 l 0.849,0.617 -0.325,0.998 0.849,-0.617 0.849,0.617 z m 0,17.333 0.849,-0.617 h -1.049 l -0.325,-0.998 -0.324,0.998 h -1.049 l 0.849,0.617 -0.325,0.998 0.849,-0.617 0.849,0.617 z M 9.873,13.371 10.722,12.754 H 9.672 L 9.348,11.756 9.023,12.754 H 7.974 l 0.849,0.617 -0.324,0.998 0.849,-0.617 0.849,0.617 z M 10.98,9.086 11.829,8.469 h -1.05 L 10.455,7.471 10.131,8.469 h -1.05 l 0.849,0.617 -0.324,0.998 0.849,-0.617 0.849,0.617 z m 0,8.619 0.849,-0.617 h -1.05 l -0.324,-0.998 -0.324,0.998 h -1.05 l 0.849,0.617 -0.324,0.998 0.849,-0.617 0.849,0.617 z M 14.206,5.866 15.055,5.249 h -1.05 L 13.681,4.251 13.357,5.249 h -1.05 l 0.849,0.617 -0.324,0.998 0.849,-0.617 0.849,0.617 z m 0,15.067 0.849,-0.617 h -1.05 l -0.324,-0.998 -0.324,0.998 h -1.05 l 0.849,0.617 -0.324,0.998 0.849,-0.616 0.849,0.616 z m 11.921,-7.562 -0.849,-0.617 h 1.05 l 0.324,-0.998 0.325,0.998 h 1.049 l -0.849,0.617 0.324,0.998 -0.849,-0.617 -0.849,0.617 z M 25.02,9.086 24.171,8.469 h 1.05 l 0.324,-0.998 0.324,0.998 h 1.05 l -0.849,0.617 0.324,0.998 -0.849,-0.617 -0.849,0.617 z m 0,8.619 -0.849,-0.617 h 1.05 l 0.324,-0.998 0.324,0.998 h 1.05 l -0.849,0.617 0.324,0.998 -0.849,-0.617 -0.849,0.617 z M 21.794,5.866 20.945,5.249 h 1.05 l 0.324,-0.998 0.324,0.998 h 1.05 L 22.844,5.866 23.168,6.864 22.319,6.247 21.47,6.864 Z m 0,15.067 -0.849,-0.617 h 1.05 l 0.324,-0.998 0.324,0.998 h 1.05 l -0.849,0.617 0.324,0.998 -0.849,-0.616 -0.849,0.616 z"
|
||||
fill="#ffcc00"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.7 KiB |
@@ -1 +1,46 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEE" d="M0 14h36v8H0z"/><path fill="#AE1F28" d="M32 5H4C1.791 5 0 6.791 0 9v5h36V9c0-2.209-1.791-4-4-4z"/><path fill="#20478B" d="M4 31h28c2.209 0 4-1.791 4-4v-5H0v5c0 2.209 1.791 4 4 4z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="PAL-NL.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="m 0,9 h 36 v 8 H 0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#ae1f28"
|
||||
d="M 32,0 H 4 C 1.791,0 0,1.791 0,4 V 9 H 36 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#20478b"
|
||||
d="m 4,26 h 28 c 2.209,0 4,-1.791 4,-4 V 17 H 0 v 5 c 0,2.209 1.791,4 4,4 z"
|
||||
id="path3" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 1.3 KiB |
@@ -1 +1,46 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF2B2D" d="M10 5H4C1.791 5 0 6.791 0 9v6h10V5zm22 0H16v10h20V9c0-2.209-1.791-4-4-4zM16 31h16c2.209 0 4-1.791 4-4.5V21H16v10zM0 21v5.5C0 29.209 1.791 31 4 31h6V21H0z"/><path fill="#002868" d="M14.5 5h-2.944l-.025 11.5H0v3h11.525L11.5 31h3V19.5H36v-3H14.5z"/><path fill="#EDECEC" d="M14.5 31H16V21h20v-1.5H14.5zM16 5h-1.5v11.5H36V15H16zm-4.5 0H10v10H0v1.5h11.5zM0 19.5V21h10v10h1.5V19.5z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg3"
|
||||
sodipodi:docname="PAL-NO.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs3" />
|
||||
<sodipodi:namedview
|
||||
id="namedview3"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3" />
|
||||
<path
|
||||
fill="#ef2b2d"
|
||||
d="M 10,0 H 4 C 1.791,0 0,1.791 0,4 v 6 H 10 Z M 32,0 H 16 V 10 H 36 V 4 C 36,1.791 34.209,0 32,0 Z M 16,26 h 16 c 2.209,0 4,-1.791 4,-4.5 V 16 H 16 Z M 0,16 v 5.5 C 0,24.209 1.791,26 4,26 h 6 V 16 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#002868"
|
||||
d="M 14.5,0 H 11.556 L 11.531,11.5 H 0 v 3 H 11.525 L 11.5,26 h 3 V 14.5 H 36 v -3 H 14.5 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#edecec"
|
||||
d="M 14.5,26 H 16 V 16 H 36 V 14.5 H 14.5 Z M 16,0 H 14.5 V 11.5 H 36 V 10 H 16 Z M 11.5,0 H 10 V 10 H 0 v 1.5 H 11.5 Z M 0,14.5 V 16 h 10 v 10 h 1.5 V 14.5 Z"
|
||||
id="path3" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 467 B After Width: | Height: | Size: 1.6 KiB |
@@ -1 +1,66 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#060" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#D52B1E" d="M32 5H15v26h17c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><path fill="#FFCC4D" d="M15 10c-4.419 0-8 3.581-8 8 0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8 0-4.419-3.582-8-8-8zm-6.113 4.594l1.602 1.602-2.46 1.23c.083-1.022.383-1.981.858-2.832zm-.858 3.979l4.4 2.207-2.706 1.804.014.021c-.96-1.097-1.583-2.492-1.708-4.032zM14 24.92c-.937-.134-1.813-.453-2.592-.92H14v.92zM14 23h-3.099L14 20.934V23zm0-3.268l-.607.405L9.118 18l2.116-1.058L14 19.707v.025zm0-1.439l-3.543-3.543 3.543.59v2.953zm0-3.992l-4.432-.713c1.084-1.333 2.65-2.253 4.432-2.508v3.221zm7.113.293c.475.851.775 1.81.858 2.833l-2.46-1.23 1.602-1.603zM16 11.08c1.782.256 3.348 1.175 4.432 2.508L16 14.301V11.08zm0 4.26l3.543-.591L16 18.293V15.34zm0 4.367l2.765-2.765L20.882 18l-4.274 2.137-.608-.405v-.025zm0 5.213V24h2.592c-.779.467-1.655.786-2.592.92zM16 23v-2.066L19.099 23H16zm4.264-.395l.014-.021-2.706-1.804 4.4-2.207c-.126 1.54-.749 2.935-1.708 4.032z"/><path fill="#D52B1E" d="M11 13v7c0 2.209 1.791 4 4 4s4-1.791 4-4v-7h-8z"/><path fill="#FFF" d="M12 14v6c0 1.656 1.343 3 3 3s3-1.344 3-3v-6h-6z"/><path fill="#829ACD" d="M13 17h4v2h-4z"/><path fill="#829ACD" d="M14 16h2v4h-2z"/><path fill="#039" d="M12 17h1v2h-1zm2 0h2v2h-2zm3 0h1v2h-1zm-3 3h2v2h-2zm0-6h2v2h-2z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="PAL-P.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<path
|
||||
fill="#006600"
|
||||
d="m 36,22 c 0,2.209 -1.791,4 -4,4 H 4 C 1.791,26 0,24.209 0,22 V 4 C 0,1.791 1.791,0 4,0 h 28 c 2.209,0 4,1.791 4,4 z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#d52b1e"
|
||||
d="M 32,0 H 15 v 26 h 17 c 2.209,0 4,-1.791 4,-4 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#ffcc4d"
|
||||
d="m 15,5 c -4.419,0 -8,3.581 -8,8 0,4.418 3.581,8 8,8 4.418,0 8,-3.582 8,-8 0,-4.419 -3.582,-8 -8,-8 z m -6.113,4.594 1.602,1.602 -2.46,1.23 C 8.112,11.404 8.412,10.445 8.887,9.594 Z m -0.858,3.979 4.4,2.207 -2.706,1.804 0.014,0.021 C 8.777,16.508 8.154,15.113 8.029,13.573 Z M 14,19.92 C 13.063,19.786 12.187,19.467 11.408,19 H 14 Z M 14,18 H 10.901 L 14,15.934 Z M 14,14.732 13.393,15.137 9.118,13 11.234,11.942 14,14.707 Z M 14,13.293 10.457,9.75 14,10.34 Z M 14,9.301 9.568,8.588 C 10.652,7.255 12.218,6.335 14,6.08 Z m 7.113,0.293 c 0.475,0.851 0.775,1.81 0.858,2.833 l -2.46,-1.23 z M 16,6.08 c 1.782,0.256 3.348,1.175 4.432,2.508 L 16,9.301 Z M 16,10.34 19.543,9.749 16,13.293 Z m 0,4.367 2.765,-2.765 L 20.882,13 16.608,15.137 16,14.732 Z m 0,5.213 V 19 h 2.592 C 17.813,19.467 16.937,19.786 16,19.92 Z M 16,18 V 15.934 L 19.099,18 Z m 4.264,-0.395 0.014,-0.021 -2.706,-1.804 4.4,-2.207 c -0.126,1.54 -0.749,2.935 -1.708,4.032 z"
|
||||
id="path3" />
|
||||
<path
|
||||
fill="#d52b1e"
|
||||
d="m 11,8 v 7 c 0,2.209 1.791,4 4,4 2.209,0 4,-1.791 4,-4 V 8 Z"
|
||||
id="path4" />
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 12,9 v 6 c 0,1.656 1.343,3 3,3 1.657,0 3,-1.344 3,-3 V 9 Z"
|
||||
id="path5" />
|
||||
<path
|
||||
fill="#829acd"
|
||||
d="m 13,12 h 4 v 2 h -4 z"
|
||||
id="path6" />
|
||||
<path
|
||||
fill="#829acd"
|
||||
d="m 14,11 h 2 v 4 h -2 z"
|
||||
id="path7" />
|
||||
<path
|
||||
fill="#003399"
|
||||
d="m 12,12 h 1 v 2 h -1 z m 2,0 h 2 v 2 h -2 z m 3,0 h 1 v 2 h -1 z m -3,3 h 2 v 2 h -2 z m 0,-6 h 2 v 2 h -2 z"
|
||||
id="path8" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.8 KiB |
@@ -1 +1,42 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEE" d="M32 5H4C1.791 5 0 6.791 0 9v9h36V9c0-2.209-1.791-4-4-4z"/><path fill="#DC143C" d="M0 27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-9H0v9z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="PAL-PL.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 32,0 H 4 C 1.791,0 0,1.791 0,4 v 9 H 36 V 4 C 36,1.791 34.209,0 32,0 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#dc143c"
|
||||
d="m 0,22 c 0,2.209 1.791,4 4,4 h 28 c 2.209,0 4,-1.791 4,-4 V 13 H 0 Z"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 228 B After Width: | Height: | Size: 1.2 KiB |
@@ -1 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 47.5 47.5" style="enable-background:new 0 0 47.5 47.5;" id="svg2" xml:space="preserve"><defs id="defs6"><clipPath id="clipPath18"><path d="M 0,38 38,38 38,0 0,0 0,38 z" id="path20"/></clipPath></defs><g transform="matrix(1.25,0,0,-1.25,0,47.5)" id="g12"><g id="g14"><g clip-path="url(#clipPath18)" id="g16"><g transform="translate(37,10)" id="g22"><path d="m 0,0 c 0,-2.209 -1.791,-4 -4,-4 l -28,0 c -2.209,0 -4,1.791 -4,4 l 0,4 36,0 0,-4 z" id="path24" style="fill:#dd2e44;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g><path d="M 37,14 1,14 1,24 37,24 37,14 z" id="path26" style="fill:#3b88c3;fill-opacity:1;fill-rule:nonzero;stroke:none"/><g transform="translate(33,32)" id="g28"><path d="m 0,0 -28,0 c -2.209,0 -4,-1.791 -4,-4 l 0,-4 36,0 0,4 C 4,-1.791 2.209,0 0,0" id="path30" style="fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g></g></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
viewBox="0 0 45 32.5"
|
||||
id="svg2"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="PAL-R.svg"
|
||||
width="45"
|
||||
height="32.5"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="16.315789"
|
||||
inkscape:cx="22.524194"
|
||||
inkscape:cy="16.303226"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><defs
|
||||
id="defs6"><clipPath
|
||||
id="clipPath18"><path
|
||||
d="M 0,38 H 38 V 0 H 0 Z"
|
||||
id="path20" /></clipPath></defs><g
|
||||
transform="matrix(1.25,0,0,-1.25,-1.25,40)"
|
||||
id="g12"><g
|
||||
id="g14"><g
|
||||
clip-path="url(#clipPath18)"
|
||||
id="g16"><g
|
||||
transform="translate(37,10)"
|
||||
id="g22"><path
|
||||
d="m 0,0 c 0,-2.209 -1.791,-4 -4,-4 h -28 c -2.209,0 -4,1.791 -4,4 V 4 H 0 Z"
|
||||
id="path24"
|
||||
style="fill:#dd2e44;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><path
|
||||
d="M 37,14 H 1 v 10 h 36 z"
|
||||
id="path26"
|
||||
style="fill:#3b88c3;fill-opacity:1;fill-rule:nonzero;stroke:none" /><g
|
||||
transform="translate(33,32)"
|
||||
id="g28"><path
|
||||
d="m 0,0 h -28 c -2.209,0 -4,-1.791 -4,-4 V -8 H 4 v 4 C 4,-1.791 2.209,0 0,0"
|
||||
id="path30"
|
||||
style="fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g></g></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -1 +1,87 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 47.5 47.5" style="enable-background:new 0 0 47.5 47.5;" id="svg2" xml:space="preserve"><defs id="defs6"><clipPath id="clipPath18"><path d="M 0,38 38,38 38,0 0,0 0,38 z" id="path20"/></clipPath></defs><g transform="matrix(1.25,0,0,-1.25,0,47.5)" id="g12"><g id="g14"><g clip-path="url(#clipPath18)" id="g16"><g transform="translate(37,10)" id="g22"><path d="m 0,0 c 0,-2.209 -1.791,-4 -4,-4 l -28,0 c -2.209,0 -4,1.791 -4,4 l 0,18 c 0,2.209 1.791,4 4,4 l 28,0 c 2.209,0 4,-1.791 4,-4 L 0,0 z" id="path24" style="fill:#dd2e44;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g><path d="M 37,13 1,13 1,25 37,25 37,13 z" id="path26" style="fill:#ffcc4d;fill-opacity:1;fill-rule:nonzero;stroke:none"/><g transform="translate(10,20)" id="g28"><path d="m 0,0 0,-3 c 0,-1.657 1.343,-3 3,-3 1.657,0 3,1.343 3,3 L 6,0 0,0 z" id="path30" style="fill:#ea596e;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g><path d="m 13,18 3,0 0,3 -3,0 0,-3 z" id="path32" style="fill:#f4a2b2;fill-opacity:1;fill-rule:nonzero;stroke:none"/><path d="m 13,18 -3,0 0,3 3,0 0,-3 z" id="path34" style="fill:#dd2e44;fill-opacity:1;fill-rule:nonzero;stroke:none"/><g transform="translate(16,22.5)" id="g36"><path d="m 0,0 c 0,-0.829 -1.343,-1.5 -3,-1.5 -1.657,0 -3,0.671 -3,1.5 0,0.829 1.343,1.5 3,1.5 1.657,0 3,-0.671 3,-1.5" id="path38" style="fill:#ea596e;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g><g transform="translate(16,23.25)" id="g40"><path d="m 0,0 c 0,0.414 -1.343,0.75 -3,0.75 -1.657,0 -3,-0.336 -3,-0.75 0,-0.414 1.343,-0.75 3,-0.75 1.657,0 3,0.336 3,0.75" id="path42" style="fill:#ffac33;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g><path d="m 8,14 1,0 0,7 -1,0 0,-7 z" id="path44" style="fill:#99aab5;fill-opacity:1;fill-rule:nonzero;stroke:none"/><path d="m 18,14 -1,0 0,7 1,0 0,-7 z" id="path46" style="fill:#99aab5;fill-opacity:1;fill-rule:nonzero;stroke:none"/><path d="m 10,14 -3,0 0,1 3,0 0,-1 z" id="path48" style="fill:#66757f;fill-opacity:1;fill-rule:nonzero;stroke:none"/><path d="m 19,14 -3,0 0,1 3,0 0,-1 z" id="path50" style="fill:#66757f;fill-opacity:1;fill-rule:nonzero;stroke:none"/><path d="m 9,21 -1,0 0,1 1,0 0,-1 z" id="path52" style="fill:#66757f;fill-opacity:1;fill-rule:nonzero;stroke:none"/><path d="m 18,21 -1,0 0,1 1,0 0,-1 z" id="path54" style="fill:#66757f;fill-opacity:1;fill-rule:nonzero;stroke:none"/></g></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
viewBox="0 0 45 32.5"
|
||||
id="svg2"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="PAL-S.svg"
|
||||
width="45"
|
||||
height="32.5"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="16.315789"
|
||||
inkscape:cx="22.524194"
|
||||
inkscape:cy="16.303226"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><defs
|
||||
id="defs6"><clipPath
|
||||
id="clipPath18"><path
|
||||
d="M 0,38 H 38 V 0 H 0 Z"
|
||||
id="path20" /></clipPath></defs><g
|
||||
transform="matrix(1.25,0,0,-1.25,-1.25,40)"
|
||||
id="g12"><g
|
||||
id="g14"><g
|
||||
clip-path="url(#clipPath18)"
|
||||
id="g16"><g
|
||||
transform="translate(37,10)"
|
||||
id="g22"><path
|
||||
d="m 0,0 c 0,-2.209 -1.791,-4 -4,-4 h -28 c -2.209,0 -4,1.791 -4,4 v 18 c 0,2.209 1.791,4 4,4 h 28 c 2.209,0 4,-1.791 4,-4 z"
|
||||
id="path24"
|
||||
style="fill:#dd2e44;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><path
|
||||
d="M 37,13 H 1 v 12 h 36 z"
|
||||
id="path26"
|
||||
style="fill:#ffcc4d;fill-opacity:1;fill-rule:nonzero;stroke:none" /><g
|
||||
transform="translate(10,20)"
|
||||
id="g28"><path
|
||||
d="m 0,0 v -3 c 0,-1.657 1.343,-3 3,-3 1.657,0 3,1.343 3,3 v 3 z"
|
||||
id="path30"
|
||||
style="fill:#ea596e;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><path
|
||||
d="m 13,18 h 3 v 3 h -3 z"
|
||||
id="path32"
|
||||
style="fill:#f4a2b2;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
|
||||
d="m 13,18 h -3 v 3 h 3 z"
|
||||
id="path34"
|
||||
style="fill:#dd2e44;fill-opacity:1;fill-rule:nonzero;stroke:none" /><g
|
||||
transform="translate(16,22.5)"
|
||||
id="g36"><path
|
||||
d="m 0,0 c 0,-0.829 -1.343,-1.5 -3,-1.5 -1.657,0 -3,0.671 -3,1.5 0,0.829 1.343,1.5 3,1.5 1.657,0 3,-0.671 3,-1.5"
|
||||
id="path38"
|
||||
style="fill:#ea596e;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
|
||||
transform="translate(16,23.25)"
|
||||
id="g40"><path
|
||||
d="m 0,0 c 0,0.414 -1.343,0.75 -3,0.75 -1.657,0 -3,-0.336 -3,-0.75 0,-0.414 1.343,-0.75 3,-0.75 1.657,0 3,0.336 3,0.75"
|
||||
id="path42"
|
||||
style="fill:#ffac33;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><path
|
||||
d="m 8,14 h 1 v 7 H 8 Z"
|
||||
id="path44"
|
||||
style="fill:#99aab5;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
|
||||
d="m 18,14 h -1 v 7 h 1 z"
|
||||
id="path46"
|
||||
style="fill:#99aab5;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
|
||||
d="M 10,14 H 7 v 1 h 3 z"
|
||||
id="path48"
|
||||
style="fill:#66757f;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
|
||||
d="m 19,14 h -3 v 1 h 3 z"
|
||||
id="path50"
|
||||
style="fill:#66757f;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
|
||||
d="M 9,21 H 8 v 1 h 1 z"
|
||||
id="path52"
|
||||
style="fill:#66757f;fill-opacity:1;fill-rule:nonzero;stroke:none" /><path
|
||||
d="m 18,21 h -1 v 1 h 1 z"
|
||||
id="path54"
|
||||
style="fill:#66757f;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 3.7 KiB |
@@ -1 +1,42 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#006AA7" d="M15.5 31H32c2.209 0 4-1.791 4-4.5v-6H15.5V31zM32 5H15.5v10.5H36V9c0-2.209-1.791-4-4-4zM10.5 5H4C1.792 5 .002 6.789 0 8.997V15.5h10.5V5zM0 20.5v6.004C.002 29.211 1.792 31 4 31h6.5V20.5H0z"/><path fill="#FECC00" d="M15.5 5h-5v10.5H0v5h10.5V31h5V20.5H36v-5H15.5z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="PAL-SW.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
fill="#006aa7"
|
||||
d="M 15.5,26 H 32 c 2.209,0 4,-1.791 4,-4.5 v -6 H 15.5 Z M 32,0 H 15.5 V 10.5 H 36 V 4 C 36,1.791 34.209,0 32,0 Z M 10.5,0 H 4 C 1.792,0 0.002,1.789 0,3.997 V 10.5 H 10.5 Z M 0,15.5 v 6.004 C 0.002,24.211 1.792,26 4,26 h 6.5 V 15.5 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#fecc00"
|
||||
d="m 15.5,0 h -5 V 10.5 H 0 v 5 H 10.5 V 26 h 5 V 15.5 H 36 v -5 H 15.5 Z"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 352 B After Width: | Height: | Size: 1.4 KiB |
@@ -1,2 +1,48 @@
|
||||
<?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 36 36" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--twemoji" preserveAspectRatio="xMidYMid meet"><path fill="#D32D27" d="M31 27a4 4 0 0 1-4 4H9a4 4 0 0 1-4-4V9a4 4 0 0 1 4-4h18a4 4 0 0 1 4 4v18z"></path><path fill="#FFF" d="M25 16.063h-5v-5h-4v5h-5V20h5v5.063h4V20h5z"></path></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
|
||||
<svg
|
||||
width="577.77777"
|
||||
height="577.77777"
|
||||
viewBox="0 0 26 26"
|
||||
aria-hidden="true"
|
||||
role="img"
|
||||
class="iconify iconify--twemoji"
|
||||
preserveAspectRatio="xMidYMid"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="PAL-SWI.svg"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="0.96875"
|
||||
inkscape:cx="288.51613"
|
||||
inkscape:cy="289.03226"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
fill="#d32d27"
|
||||
d="m 26,22 a 4,4 0 0 1 -4,4 H 4 A 4,4 0 0 1 0,22 V 4 A 4,4 0 0 1 4,0 h 18 a 4,4 0 0 1 4,4 z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 20,11.063 h -5 v -5 h -4 v 5 H 6 V 15 h 5 v 5.063 h 4 V 15 h 5 z"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 535 B After Width: | Height: | Size: 1.4 KiB |
@@ -1 +1,50 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#00247D" d="M0 9.059V13h5.628zM4.664 31H13v-5.837zM23 25.164V31h8.335zM0 23v3.941L5.63 23zM31.337 5H23v5.837zM36 26.942V23h-5.631zM36 13V9.059L30.371 13zM13 5H4.664L13 10.837z"/><path fill="#CF1B2B" d="M25.14 23l9.712 6.801c.471-.479.808-1.082.99-1.749L28.627 23H25.14zM13 23h-2.141l-9.711 6.8c.521.53 1.189.909 1.938 1.085L13 23.943V23zm10-10h2.141l9.711-6.8c-.521-.53-1.188-.909-1.937-1.085L23 12.057V13zm-12.141 0L1.148 6.2C.677 6.68.34 7.282.157 7.949L7.372 13h3.487z"/><path fill="#EEE" d="M36 21H21v10h2v-5.836L31.335 31H32c1.117 0 2.126-.461 2.852-1.199L25.14 23h3.487l7.215 5.052c.093-.337.158-.686.158-1.052v-.058L30.369 23H36v-2zM0 21v2h5.63L0 26.941V27c0 1.091.439 2.078 1.148 2.8l9.711-6.8H13v.943l-9.914 6.941c.294.07.598.116.914.116h.664L13 25.163V31h2V21H0zM36 9c0-1.091-.439-2.078-1.148-2.8L25.141 13H23v-.943l9.915-6.942C32.62 5.046 32.316 5 32 5h-.663L23 10.837V5h-2v10h15v-2h-5.629L36 9.059V9zM13 5v5.837L4.664 5H4c-1.118 0-2.126.461-2.852 1.2l9.711 6.8H7.372L.157 7.949C.065 8.286 0 8.634 0 9v.059L5.628 13H0v2h15V5h-2z"/><path fill="#CF1B2B" d="M21 15V5h-6v10H0v6h15v10h6V21h15v-6z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 36 26"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="PAL-UK.svg"
|
||||
width="36"
|
||||
height="26"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="namedview4"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="21.527778"
|
||||
inkscape:cx="18"
|
||||
inkscape:cy="13.006452"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
fill="#00247d"
|
||||
d="M 0,4.059 V 8 H 5.628 Z M 4.664,26 H 13 V 20.163 Z M 23,20.164 V 26 h 8.335 z M 0,18 v 3.941 L 5.63,18 Z M 31.337,0 H 23 V 5.837 Z M 36,21.942 V 18 H 30.369 Z M 36,8 V 4.059 L 30.371,8 Z M 13,0 H 4.664 L 13,5.837 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
fill="#cf1b2b"
|
||||
d="m 25.14,18 9.712,6.801 c 0.471,-0.479 0.808,-1.082 0.99,-1.749 L 28.627,18 Z M 13,18 h -2.141 l -9.711,6.8 c 0.521,0.53 1.189,0.909 1.938,1.085 L 13,18.943 Z M 23,8 h 2.141 L 34.852,1.2 C 34.331,0.67 33.664,0.291 32.915,0.115 L 23,7.057 Z M 10.859,8 1.148,1.2 C 0.677,1.68 0.34,2.282 0.157,2.949 L 7.372,8 Z"
|
||||
id="path2" />
|
||||
<path
|
||||
fill="#eeeeee"
|
||||
d="M 36,16 H 21 v 10 h 2 V 20.164 L 31.335,26 H 32 c 1.117,0 2.126,-0.461 2.852,-1.199 L 25.14,18 h 3.487 l 7.215,5.052 C 35.935,22.715 36,22.366 36,22 V 21.942 L 30.369,18 H 36 Z M 0,16 v 2 H 5.63 L 0,21.941 V 22 c 0,1.091 0.439,2.078 1.148,2.8 L 10.859,18 H 13 v 0.943 L 3.086,25.884 C 3.38,25.954 3.684,26 4,26 H 4.664 L 13,20.163 V 26 h 2 V 16 Z M 36,4 C 36,2.909 35.561,1.922 34.852,1.2 L 25.141,8 H 23 V 7.057 L 32.915,0.115 C 32.62,0.046 32.316,0 32,0 H 31.337 L 23,5.837 V 0 H 21 V 10 H 36 V 8 H 30.371 L 36,4.059 Z M 13,0 V 5.837 L 4.664,0 H 4 C 2.882,0 1.874,0.461 1.148,1.2 L 10.859,8 H 7.372 L 0.157,2.949 C 0.065,3.286 0,3.634 0,4 V 4.059 L 5.628,8 H 0 v 2 H 15 V 0 Z"
|
||||
id="path3" />
|
||||
<path
|
||||
fill="#cf1b2b"
|
||||
d="M 21,10 V 0 H 15 V 10 H 0 v 6 h 15 v 10 h 6 V 16 h 15 v -6 z"
|
||||
id="path4" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 2.4 KiB |
@@ -160,10 +160,7 @@ float FxaaLuma(float4 rgba)
|
||||
|
||||
float4 FxaaPixelShader(float2 pos, FxaaTex tex, float2 fxaaRcpFrame, float fxaaSubpix, float fxaaEdgeThreshold, float fxaaEdgeThresholdMin)
|
||||
{
|
||||
float2 posM;
|
||||
posM.x = pos.x;
|
||||
posM.y = pos.y;
|
||||
|
||||
float2 posM = pos;
|
||||
float4 rgbyM = FxaaTexTop(tex, posM);
|
||||
rgbyM.w = RGBLuminance(rgbyM.xyz);
|
||||
#define lumaM rgbyM.w
|
||||
@@ -186,9 +183,10 @@ float4 FxaaPixelShader(float2 pos, FxaaTex tex, float2 fxaaRcpFrame, float fxaaS
|
||||
float rangeMaxScaled = rangeMax * fxaaEdgeThreshold;
|
||||
float rangeMaxClamped = max(fxaaEdgeThresholdMin, rangeMaxScaled);
|
||||
|
||||
bool earlyExit = range < rangeMaxClamped;
|
||||
#if (FxaaEarlyExit == 1)
|
||||
if(earlyExit) { return rgbyM; }
|
||||
// Potential optimization, early exit.
|
||||
if (range < rangeMaxClamped)
|
||||
return rgbyM;
|
||||
#endif
|
||||
|
||||
float lumaNW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1,-1), fxaaRcpFrame.xy));
|
||||
|
||||
@@ -170,7 +170,7 @@ PS_OUTPUT ps_rta_decorrection(PS_INPUT input)
|
||||
return output;
|
||||
}
|
||||
|
||||
PS_OUTPUT ps_hdr_init(PS_INPUT input)
|
||||
PS_OUTPUT ps_colclip_init(PS_INPUT input)
|
||||
{
|
||||
PS_OUTPUT output;
|
||||
float4 value = sample_c(input.t);
|
||||
@@ -178,7 +178,7 @@ PS_OUTPUT ps_hdr_init(PS_INPUT input)
|
||||
return output;
|
||||
}
|
||||
|
||||
PS_OUTPUT ps_hdr_resolve(PS_INPUT input)
|
||||
PS_OUTPUT ps_colclip_resolve(PS_INPUT input)
|
||||
{
|
||||
PS_OUTPUT output;
|
||||
float4 value = sample_c(input.t);
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
#define PS_CHANNEL_FETCH 0
|
||||
#define PS_TALES_OF_ABYSS_HLE 0
|
||||
#define PS_URBAN_CHAOS_HLE 0
|
||||
#define PS_HDR 0
|
||||
#define PS_COLCLIP_HW 0
|
||||
#define PS_RTA_CORRECTION 0
|
||||
#define PS_RTA_SRC_CORRECTION 0
|
||||
#define PS_COLCLIP 0
|
||||
@@ -767,7 +767,7 @@ float4 ps_color(PS_INPUT input)
|
||||
float4 T = sample_color(st, input.t.w);
|
||||
#endif
|
||||
|
||||
if (PS_SHUFFLE && !PS_SHUFFLE_SAME && !PS_READ16_SRC)
|
||||
if (PS_SHUFFLE && !PS_SHUFFLE_SAME && !PS_READ16_SRC && !(PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE))
|
||||
{
|
||||
uint4 denorm_c_before = uint4(T);
|
||||
if (PS_PROCESS_BA & SHUFFLE_READ)
|
||||
@@ -799,7 +799,7 @@ void ps_fbmask(inout float4 C, float2 pos_xy)
|
||||
{
|
||||
if (PS_FBMASK)
|
||||
{
|
||||
float multi = PS_HDR ? 65535.0f : 255.0f;
|
||||
float multi = PS_COLCLIP_HW ? 65535.0f : 255.0f;
|
||||
float4 RT = trunc(RtTexture.Load(int3(pos_xy, 0)) * multi + 0.1f);
|
||||
C = (float4)(((uint4)C & ~FbMask) | ((uint4)RT & FbMask));
|
||||
}
|
||||
@@ -843,13 +843,13 @@ void ps_color_clamp_wrap(inout float3 C)
|
||||
C += 7.0f; // Need to round up, not down since the shader will invert
|
||||
|
||||
// Standard Clamp
|
||||
if (PS_COLCLIP == 0 && PS_HDR == 0)
|
||||
if (PS_COLCLIP == 0 && PS_COLCLIP_HW == 0)
|
||||
C = clamp(C, (float3)0.0f, (float3)255.0f);
|
||||
|
||||
// In 16 bits format, only 5 bits of color are used. It impacts shadows computation of Castlevania
|
||||
if (PS_DST_FMT == FMT_16 && PS_DITHER != 3 && (PS_BLEND_MIX == 0 || PS_DITHER))
|
||||
C = (float3)((int3)C & (int3)0xF8);
|
||||
else if (PS_COLCLIP == 1 || PS_HDR == 1)
|
||||
else if (PS_COLCLIP == 1 || PS_COLCLIP_HW == 1)
|
||||
C = (float3)((int3)C & (int3)0xFF);
|
||||
}
|
||||
else if (PS_DST_FMT == FMT_16 && PS_DITHER != 3 && PS_BLEND_MIX == 0 && PS_BLEND_HW == 0)
|
||||
@@ -898,7 +898,7 @@ void ps_blend(inout float4 Color, inout float4 As_rgba, float2 pos_xy)
|
||||
}
|
||||
|
||||
float Ad = PS_RTA_CORRECTION ? trunc(RT.a * 128.0f + 0.1f) / 128.0f : trunc(RT.a * 255.0f + 0.1f) / 128.0f;
|
||||
float color_multi = PS_HDR ? 65535.0f : 255.0f;
|
||||
float color_multi = PS_COLCLIP_HW ? 65535.0f : 255.0f;
|
||||
float3 Cd = trunc(RT.rgb * color_multi + 0.1f);
|
||||
float3 Cs = Color.rgb;
|
||||
|
||||
@@ -1086,7 +1086,7 @@ PS_OUTPUT ps_main(PS_INPUT input)
|
||||
|
||||
if (PS_SHUFFLE)
|
||||
{
|
||||
if (!PS_SHUFFLE_SAME && !PS_READ16_SRC)
|
||||
if (!PS_SHUFFLE_SAME && !PS_READ16_SRC && !(PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE))
|
||||
{
|
||||
uint4 denorm_c_after = uint4(C);
|
||||
if (PS_PROCESS_BA & SHUFFLE_READ)
|
||||
@@ -1127,11 +1127,8 @@ PS_OUTPUT ps_main(PS_INPUT input)
|
||||
{
|
||||
if (PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE)
|
||||
{
|
||||
C.rb = C.br;
|
||||
float g_temp = C.g;
|
||||
|
||||
C.g = C.a;
|
||||
C.a = g_temp;
|
||||
C.br = C.rb;
|
||||
C.ag = C.ga;
|
||||
}
|
||||
else if(PS_PROCESS_BA & SHUFFLE_READ)
|
||||
{
|
||||
@@ -1160,7 +1157,7 @@ PS_OUTPUT ps_main(PS_INPUT input)
|
||||
|
||||
#if !PS_NO_COLOR
|
||||
output.c0.a = PS_RTA_CORRECTION ? C.a / 128.0f : C.a / 255.0f;
|
||||
output.c0.rgb = PS_HDR ? float3(C.rgb / 65535.0f) : C.rgb / 255.0f;
|
||||
output.c0.rgb = PS_COLCLIP_HW ? float3(C.rgb / 65535.0f) : C.rgb / 255.0f;
|
||||
#if !PS_NO_COLOR1
|
||||
output.c1 = alpha_blend;
|
||||
#endif
|
||||
|
||||
@@ -348,16 +348,16 @@ void ps_rta_decorrection()
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ps_hdr_init
|
||||
void ps_hdr_init()
|
||||
#ifdef ps_colclip_init
|
||||
void ps_colclip_init()
|
||||
{
|
||||
vec4 value = sample_c();
|
||||
SV_Target0 = vec4(round(value.rgb * 255.0f) / 65535.0f, value.a);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ps_hdr_resolve
|
||||
void ps_hdr_resolve()
|
||||
#ifdef ps_colclip_resolve
|
||||
void ps_colclip_resolve()
|
||||
{
|
||||
vec4 value = sample_c();
|
||||
SV_Target0 = vec4(vec3(uvec3(value.rgb * 65535.0f) & 255u) / 255.0f, value.a);
|
||||
|
||||
@@ -679,7 +679,7 @@ vec4 ps_color()
|
||||
vec4 T = sample_color(st);
|
||||
#endif
|
||||
|
||||
#if PS_SHUFFLE && !PS_READ16_SRC && !PS_SHUFFLE_SAME
|
||||
#if PS_SHUFFLE && !PS_READ16_SRC && !PS_SHUFFLE_SAME && !(PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE)
|
||||
uvec4 denorm_c_before = uvec4(T);
|
||||
#if (PS_PROCESS_BA & SHUFFLE_READ)
|
||||
T.r = float((denorm_c_before.b << 3) & 0xF8u);
|
||||
@@ -707,7 +707,7 @@ void ps_fbmask(inout vec4 C)
|
||||
{
|
||||
// FIXME do I need special case for 16 bits
|
||||
#if PS_FBMASK
|
||||
#if PS_HDR == 1
|
||||
#if PS_COLCLIP_HW == 1
|
||||
vec4 RT = trunc(sample_from_rt() * 65535.0f);
|
||||
#else
|
||||
vec4 RT = trunc(sample_from_rt() * 255.0f + 0.1f);
|
||||
@@ -757,7 +757,7 @@ void ps_color_clamp_wrap(inout vec3 C)
|
||||
#endif
|
||||
|
||||
// Correct the Color value based on the output format
|
||||
#if PS_COLCLIP == 0 && PS_HDR == 0
|
||||
#if PS_COLCLIP == 0 && PS_COLCLIP_HW == 0
|
||||
// Standard Clamp
|
||||
C = clamp(C, vec3(0.0f), vec3(255.0f));
|
||||
#endif
|
||||
@@ -771,7 +771,7 @@ void ps_color_clamp_wrap(inout vec3 C)
|
||||
#if PS_DST_FMT == FMT_16 && PS_DITHER < 3 && (PS_BLEND_MIX == 0 || PS_DITHER)
|
||||
// In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania
|
||||
C = vec3(ivec3(C) & ivec3(0xF8));
|
||||
#elif PS_COLCLIP == 1 || PS_HDR == 1
|
||||
#elif PS_COLCLIP == 1 || PS_COLCLIP_HW == 1
|
||||
C = vec3(ivec3(C) & ivec3(0xFF));
|
||||
#endif
|
||||
|
||||
@@ -828,7 +828,7 @@ float As = As_rgba.a;
|
||||
#endif
|
||||
|
||||
// Let the compiler do its jobs !
|
||||
#if PS_HDR == 1
|
||||
#if PS_COLCLIP_HW == 1
|
||||
vec3 Cd = trunc(RT.rgb * 65535.0f);
|
||||
#else
|
||||
vec3 Cd = trunc(RT.rgb * 255.0f + 0.1f);
|
||||
@@ -1064,7 +1064,7 @@ void ps_main()
|
||||
|
||||
|
||||
#if PS_SHUFFLE
|
||||
#if !PS_READ16_SRC && !PS_SHUFFLE_SAME
|
||||
#if !PS_READ16_SRC && !PS_SHUFFLE_SAME && !(PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE)
|
||||
uvec4 denorm_c_after = uvec4(C);
|
||||
#if (PS_PROCESS_BA & SHUFFLE_READ)
|
||||
C.b = float(((denorm_c_after.r >> 3) & 0x1Fu) | ((denorm_c_after.g << 2) & 0xE0u));
|
||||
@@ -1095,11 +1095,8 @@ void ps_main()
|
||||
C.ga = vec2(float((denorm_c.g >> 6) | ((denorm_c.b >> 3) << 2) | (denorm_TA.x & 0x80u)));
|
||||
#elif PS_SHUFFLE_ACROSS
|
||||
#if(PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE)
|
||||
C.rb = C.br;
|
||||
float g_temp = C.g;
|
||||
|
||||
C.g = C.a;
|
||||
C.a = g_temp;
|
||||
C.br = C.rb;
|
||||
C.ag = C.ga;
|
||||
#elif(PS_PROCESS_BA & SHUFFLE_READ)
|
||||
C.rb = C.bb;
|
||||
C.ga = C.aa;
|
||||
@@ -1128,7 +1125,7 @@ void ps_main()
|
||||
#else
|
||||
SV_Target0.a = C.a / 255.0f;
|
||||
#endif
|
||||
#if PS_HDR == 1
|
||||
#if PS_COLCLIP_HW == 1
|
||||
SV_Target0.rgb = vec3(C.rgb / 65535.0f);
|
||||
#else
|
||||
SV_Target0.rgb = C.rgb / 255.0f;
|
||||
|
||||
@@ -148,16 +148,16 @@ void ps_rta_decorrection()
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ps_hdr_init
|
||||
void ps_hdr_init()
|
||||
#ifdef ps_colclip_init
|
||||
void ps_colclip_init()
|
||||
{
|
||||
vec4 value = sample_c(v_tex);
|
||||
o_col0 = vec4(roundEven(value.rgb * 255.0f) / 65535.0f, value.a);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ps_hdr_resolve
|
||||
void ps_hdr_resolve()
|
||||
#ifdef ps_colclip_resolve
|
||||
void ps_colclip_resolve()
|
||||
{
|
||||
vec4 value = sample_c(v_tex);
|
||||
o_col0 = vec4(vec3(uvec3(value.rgb * 65535.5f) & 255u) / 255.0f, value.a);
|
||||
|
||||
@@ -281,7 +281,7 @@ void main()
|
||||
#define PS_CHANNEL_FETCH 0
|
||||
#define PS_TALES_OF_ABYSS_HLE 0
|
||||
#define PS_URBAN_CHAOS_HLE 0
|
||||
#define PS_HDR 0
|
||||
#define PS_COLCLIP_HW 0
|
||||
#define PS_COLCLIP 0
|
||||
#define PS_BLEND_A 0
|
||||
#define PS_BLEND_B 0
|
||||
@@ -946,7 +946,7 @@ vec4 ps_color()
|
||||
vec4 T = sample_color(st);
|
||||
#endif
|
||||
|
||||
#if PS_SHUFFLE && !PS_READ16_SRC && !PS_SHUFFLE_SAME
|
||||
#if PS_SHUFFLE && !PS_READ16_SRC && !PS_SHUFFLE_SAME && !(PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE)
|
||||
uvec4 denorm_c_before = uvec4(T);
|
||||
#if (PS_PROCESS_BA & SHUFFLE_READ)
|
||||
T.r = float((denorm_c_before.b << 3) & 0xF8u);
|
||||
@@ -974,7 +974,7 @@ void ps_fbmask(inout vec4 C)
|
||||
{
|
||||
#if PS_FBMASK
|
||||
|
||||
#if PS_HDR == 1
|
||||
#if PS_COLCLIP_HW == 1
|
||||
vec4 RT = trunc(sample_from_rt() * 65535.0f);
|
||||
#else
|
||||
vec4 RT = trunc(sample_from_rt() * 255.0f + 0.1f);
|
||||
@@ -1027,7 +1027,7 @@ void ps_color_clamp_wrap(inout vec3 C)
|
||||
#endif
|
||||
|
||||
// Correct the Color value based on the output format
|
||||
#if PS_COLCLIP == 0 && PS_HDR == 0
|
||||
#if PS_COLCLIP == 0 && PS_COLCLIP_HW == 0
|
||||
// Standard Clamp
|
||||
C = clamp(C, vec3(0.0f), vec3(255.0f));
|
||||
#endif
|
||||
@@ -1041,7 +1041,7 @@ void ps_color_clamp_wrap(inout vec3 C)
|
||||
#if PS_DST_FMT == FMT_16 && PS_DITHER != 3 && (PS_BLEND_MIX == 0 || PS_DITHER > 0)
|
||||
// In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania
|
||||
C = vec3(ivec3(C) & ivec3(0xF8));
|
||||
#elif PS_COLCLIP == 1 || PS_HDR == 1
|
||||
#elif PS_COLCLIP == 1 || PS_COLCLIP_HW == 1
|
||||
C = vec3(ivec3(C) & ivec3(0xFF));
|
||||
#endif
|
||||
|
||||
@@ -1098,7 +1098,7 @@ void ps_blend(inout vec4 Color, inout vec4 As_rgba)
|
||||
#endif
|
||||
|
||||
// Let the compiler do its jobs !
|
||||
#if PS_HDR == 1
|
||||
#if PS_COLCLIP_HW == 1
|
||||
vec3 Cd = trunc(RT.rgb * 65535.0f);
|
||||
#else
|
||||
vec3 Cd = trunc(RT.rgb * 255.0f + 0.1f);
|
||||
@@ -1332,7 +1332,7 @@ void main()
|
||||
ps_blend(C, alpha_blend);
|
||||
|
||||
#if PS_SHUFFLE
|
||||
#if !PS_READ16_SRC && !PS_SHUFFLE_SAME
|
||||
#if !PS_READ16_SRC && !PS_SHUFFLE_SAME && !(PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE)
|
||||
uvec4 denorm_c_after = uvec4(C);
|
||||
#if (PS_PROCESS_BA & SHUFFLE_READ)
|
||||
C.b = float(((denorm_c_after.r >> 3) & 0x1Fu) | ((denorm_c_after.g << 2) & 0xE0u));
|
||||
@@ -1343,8 +1343,6 @@ void main()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// Special case for 32bit input and 16bit output, shuffle used by The Godfather
|
||||
#if PS_SHUFFLE_SAME
|
||||
#if (PS_PROCESS_BA & SHUFFLE_READ)
|
||||
@@ -1362,11 +1360,8 @@ void main()
|
||||
// Write RB part. Mask will take care of the correct destination
|
||||
#elif PS_SHUFFLE_ACROSS
|
||||
#if(PS_PROCESS_BA == SHUFFLE_READWRITE && PS_PROCESS_RG == SHUFFLE_READWRITE)
|
||||
C.rb = C.br;
|
||||
float g_temp = C.g;
|
||||
|
||||
C.g = C.a;
|
||||
C.a = g_temp;
|
||||
C.br = C.rb;
|
||||
C.ag = C.ga;
|
||||
#elif(PS_PROCESS_BA & SHUFFLE_READ)
|
||||
C.rb = C.bb;
|
||||
C.ga = C.aa;
|
||||
@@ -1395,7 +1390,7 @@ void main()
|
||||
#else
|
||||
o_col0.a = C.a / 255.0f;
|
||||
#endif
|
||||
#if PS_HDR == 1
|
||||
#if PS_COLCLIP_HW == 1
|
||||
o_col0.rgb = vec3(C.rgb / 65535.0f);
|
||||
#else
|
||||
o_col0.rgb = C.rgb / 255.0f;
|
||||
|
||||
@@ -19,6 +19,8 @@ find_package(LZ4 REQUIRED)
|
||||
find_package(WebP REQUIRED) # v1.3.2, spews an error on Linux because no pkg-config.
|
||||
find_package(SDL3 3.2.6 REQUIRED)
|
||||
find_package(Freetype 2.11.1 REQUIRED)
|
||||
find_package(plutovg REQUIRED) # v0.0.13 is needed for building plutosvg, but we can support v1.0.0
|
||||
find_package(plutosvg 0.0.6 REQUIRED)
|
||||
|
||||
if(USE_VULKAN)
|
||||
find_package(Shaderc REQUIRED)
|
||||
|
||||
@@ -342,7 +342,7 @@ bool Log::SetFileOutputLevel(LOGLEVEL level, std::string path)
|
||||
if (!s_file_handle || s_file_path != path)
|
||||
{
|
||||
s_file_handle.reset();
|
||||
s_file_handle = FileSystem::OpenManagedCFile(path.c_str(), "wb");
|
||||
s_file_handle = FileSystem::OpenManagedSharedCFile(path.c_str(), "wb", FileSystem::FileShareMode::DenyWrite);
|
||||
if (s_file_handle)
|
||||
{
|
||||
s_file_path = std::move(path);
|
||||
|
||||
@@ -50,6 +50,32 @@ u64 GetPhysicalMemory()
|
||||
return getmem;
|
||||
}
|
||||
|
||||
u64 GetAvailablePhysicalMemory()
|
||||
{
|
||||
const mach_port_t host_port = mach_host_self();
|
||||
vm_size_t page_size;
|
||||
|
||||
// Get the system's page size.
|
||||
if (host_page_size(host_port, &page_size) != KERN_SUCCESS)
|
||||
return 0;
|
||||
|
||||
vm_statistics64_data_t vm_stat;
|
||||
mach_msg_type_number_t host_size = sizeof(vm_statistics64_data_t) / sizeof(integer_t);
|
||||
|
||||
// Get system memory statistics.
|
||||
if (host_statistics64(host_port, HOST_VM_INFO, reinterpret_cast<host_info64_t>(&vm_stat), &host_size) != KERN_SUCCESS)
|
||||
return 0;
|
||||
|
||||
// Get the number of free and inactive pages.
|
||||
const u64 free_pages = static_cast<u64>(vm_stat.free_count);
|
||||
const u64 inactive_pages = static_cast<u64>(vm_stat.inactive_count);
|
||||
|
||||
// Calculate available memory.
|
||||
const u64 get_available_mem = (free_pages + inactive_pages) * page_size;
|
||||
|
||||
return get_available_mem;
|
||||
}
|
||||
|
||||
static mach_timebase_info_data_t s_timebase_info;
|
||||
static const u64 tickfreq = []() {
|
||||
if (mach_timebase_info(&s_timebase_info) != KERN_SUCCESS)
|
||||
|
||||
@@ -181,6 +181,7 @@ private:
|
||||
extern u64 GetTickFrequency();
|
||||
extern u64 GetCPUTicks();
|
||||
extern u64 GetPhysicalMemory();
|
||||
extern u64 GetAvailablePhysicalMemory();
|
||||
/// Spin for a short period of time (call while spinning waiting for a lock)
|
||||
/// Returns the approximate number of ns that passed
|
||||
extern u32 ShortSpin();
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include <dbus/dbus.h>
|
||||
#include <spawn.h>
|
||||
#include <sys/sysinfo.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
@@ -40,6 +41,49 @@ u64 GetPhysicalMemory()
|
||||
return pages * getpagesize();
|
||||
}
|
||||
|
||||
u64 GetAvailablePhysicalMemory()
|
||||
{
|
||||
// Try to read MemAvailable from /proc/meminfo.
|
||||
FILE* file = fopen("/proc/meminfo", "r");
|
||||
if (file)
|
||||
{
|
||||
u64 mem_available = 0;
|
||||
u64 mem_free = 0, buffers = 0, cached = 0, sreclaimable = 0, shmem = 0;
|
||||
char line[256];
|
||||
|
||||
while (fgets(line, sizeof(line), file))
|
||||
{
|
||||
// Modern kernels provide MemAvailable directly - preferred and most accurate.
|
||||
if (sscanf(line, "MemAvailable: %lu kB", &mem_available) == 1)
|
||||
{
|
||||
fclose(file);
|
||||
return mem_available * _1kb;
|
||||
}
|
||||
|
||||
// Fallback values for manual approximation.
|
||||
sscanf(line, "MemFree: %lu kB", &mem_free);
|
||||
sscanf(line, "Buffers: %lu kB", &buffers);
|
||||
sscanf(line, "Cached: %lu kB", &cached);
|
||||
sscanf(line, "SReclaimable: %lu kB", &sreclaimable);
|
||||
sscanf(line, "Shmem: %lu kB", &shmem);
|
||||
}
|
||||
fclose(file);
|
||||
|
||||
// Fallback approximation: Linux-like heuristic.
|
||||
// available = MemFree + Buffers + Cached + SReclaimable - Shmem.
|
||||
const u64 available_kb = mem_free + buffers + cached + sreclaimable - shmem;
|
||||
return available_kb * _1kb;
|
||||
}
|
||||
|
||||
// Fallback to sysinfo if /proc/meminfo couldn't be read.
|
||||
struct sysinfo info = {};
|
||||
if (sysinfo(&info) != 0)
|
||||
return 0;
|
||||
|
||||
// Note: This does NOT include cached memory - only free + buffer.
|
||||
return (static_cast<u64>(info.freeram) + static_cast<u64>(info.bufferram)) * static_cast<u64>(info.mem_unit);
|
||||
}
|
||||
|
||||
u64 GetTickFrequency()
|
||||
{
|
||||
return 1000000000; // unix measures in nanoseconds
|
||||
|
||||
@@ -57,6 +57,14 @@ u64 GetPhysicalMemory()
|
||||
return status.ullTotalPhys;
|
||||
}
|
||||
|
||||
u64 GetAvailablePhysicalMemory()
|
||||
{
|
||||
MEMORYSTATUSEX status;
|
||||
status.dwLength = sizeof(status);
|
||||
GlobalMemoryStatusEx(&status);
|
||||
return status.ullAvailPhys;
|
||||
}
|
||||
|
||||
// Calculates the Windows OS Version and processor architecture, and returns it as a
|
||||
// human-readable string. :)
|
||||
std::string GetOSVersionString()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<ItemDefinitionGroup>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories>$(DepsLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);freetype.lib;jpeg.lib;libpng16.lib;libwebp.lib;lz4.lib;SDL3.lib;zlib.lib;zstd.lib;kddockwidgets-qt62.lib</AdditionalDependencies>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);freetype.lib;jpeg.lib;libpng16.lib;libwebp.lib;lz4.lib;SDL3.lib;zlib.lib;zstd.lib;kddockwidgets-qt62.lib;plutovg.lib;plutosvg.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
@@ -20,6 +20,8 @@
|
||||
<DepsDLLs Include="$(DepsBinDir)zlib1.dll" />
|
||||
<DepsDLLs Include="$(DepsBinDir)zstd.dll" />
|
||||
<DepsDLLs Include="$(DepsBinDir)kddockwidgets-qt62.dll" />
|
||||
<DepsDLLs Include="$(DepsBinDir)plutovg.dll" />
|
||||
<DepsDLLs Include="$(DepsBinDir)plutosvg.dll" />
|
||||
</ItemGroup>
|
||||
<Target Name="DepsCopyDLLs"
|
||||
AfterTargets="Build"
|
||||
|
||||
@@ -42,6 +42,7 @@ BreakpointDialog::BreakpointDialog(QWidget* parent, DebugInterface* cpu, Breakpo
|
||||
m_ui.rdoExecute->setChecked(true);
|
||||
m_ui.chkEnable->setChecked(bp->enabled);
|
||||
m_ui.txtAddress->setText(QtUtils::FilledQStringFromValue(bp->addr, 16));
|
||||
m_ui.txtDescription->setText(QString::fromStdString(bp->description));
|
||||
|
||||
if (bp->hasCond)
|
||||
m_ui.txtCondition->setText(QString::fromStdString(bp->cond.expressionString));
|
||||
@@ -53,6 +54,8 @@ BreakpointDialog::BreakpointDialog(QWidget* parent, DebugInterface* cpu, Breakpo
|
||||
m_ui.txtAddress->setText(QtUtils::FilledQStringFromValue(mc->start, 16));
|
||||
m_ui.txtSize->setText(QtUtils::FilledQStringFromValue(mc->end - mc->start, 16));
|
||||
|
||||
m_ui.txtDescription->setText(QString::fromStdString(mc->description));
|
||||
|
||||
m_ui.chkRead->setChecked(mc->memCond & MEMCHECK_READ);
|
||||
m_ui.chkWrite->setChecked(mc->memCond & MEMCHECK_WRITE);
|
||||
m_ui.chkChange->setChecked(mc->memCond & MEMCHECK_WRITE_ONCHANGE);
|
||||
@@ -102,6 +105,7 @@ void BreakpointDialog::accept()
|
||||
}
|
||||
|
||||
bp->addr = address;
|
||||
bp->description = m_ui.txtDescription->text().toStdString();
|
||||
|
||||
bp->enabled = m_ui.chkEnable->isChecked();
|
||||
|
||||
@@ -138,6 +142,7 @@ void BreakpointDialog::accept()
|
||||
|
||||
mc->start = startAddress;
|
||||
mc->end = startAddress + size;
|
||||
mc->description = m_ui.txtDescription->text().toStdString();
|
||||
|
||||
if (!m_ui.txtCondition->text().isEmpty())
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>375</width>
|
||||
<height>250</height>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@@ -22,19 +22,19 @@
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>375</width>
|
||||
<height>250</height>
|
||||
<height>300</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>375</width>
|
||||
<height>250</height>
|
||||
<height>300</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>375</width>
|
||||
<height>250</height>
|
||||
<height>300</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -44,7 +44,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>210</y>
|
||||
<y>260</y>
|
||||
<width>341</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
@@ -102,14 +102,17 @@
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<y>10</y>
|
||||
<width>251</width>
|
||||
<height>41</height>
|
||||
<width>250</width>
|
||||
<height>79</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
@@ -139,6 +142,29 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Description</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="txtDescription">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>19</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>19</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="grpMemory">
|
||||
@@ -148,7 +174,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<y>50</y>
|
||||
<y>100</y>
|
||||
<width>251</width>
|
||||
<height>91</height>
|
||||
</rect>
|
||||
@@ -224,13 +250,13 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<y>140</y>
|
||||
<y>190</y>
|
||||
<width>251</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string></string>
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_3">
|
||||
<item row="0" column="0">
|
||||
|
||||
@@ -72,11 +72,13 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
|
||||
switch (index.column())
|
||||
{
|
||||
case BreakpointColumns::ENABLED:
|
||||
return "";
|
||||
return (bp->enabled) ? tr("Enabled") : tr("Disabled");
|
||||
case BreakpointColumns::TYPE:
|
||||
return tr("Execute");
|
||||
case BreakpointColumns::OFFSET:
|
||||
return QtUtils::FilledQStringFromValue(bp->addr, 16);
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return QString::fromStdString(bp->description);
|
||||
case BreakpointColumns::SIZE_LABEL:
|
||||
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
|
||||
case BreakpointColumns::OPCODE:
|
||||
@@ -105,6 +107,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
|
||||
}
|
||||
case BreakpointColumns::OFFSET:
|
||||
return QtUtils::FilledQStringFromValue(mc->start, 16);
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return QString::fromStdString(mc->description);
|
||||
case BreakpointColumns::SIZE_LABEL:
|
||||
return QString::number(mc->end - mc->start, 16);
|
||||
case BreakpointColumns::OPCODE:
|
||||
@@ -116,6 +120,29 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (role == Qt::EditRole)
|
||||
{
|
||||
if (const auto* bp = std::get_if<BreakPoint>(&bp_mc))
|
||||
{
|
||||
switch (index.column())
|
||||
{
|
||||
case BreakpointColumns::CONDITION:
|
||||
return bp->hasCond ? QString::fromStdString(bp->cond.expressionString) : "";
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return QString::fromStdString(bp->description);
|
||||
}
|
||||
}
|
||||
else if (const auto* mc = std::get_if<MemCheck>(&bp_mc))
|
||||
{
|
||||
switch (index.column())
|
||||
{
|
||||
case BreakpointColumns::CONDITION:
|
||||
return mc->hasCond ? QString::fromStdString(mc->cond.expressionString) : "";
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return QString::fromStdString(mc->description);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (role == BreakpointModel::DataRole)
|
||||
{
|
||||
if (const auto* bp = std::get_if<BreakPoint>(&bp_mc))
|
||||
@@ -128,6 +155,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
|
||||
return MEMCHECK_INVALID;
|
||||
case BreakpointColumns::OFFSET:
|
||||
return bp->addr;
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return QString::fromStdString(bp->description);
|
||||
case BreakpointColumns::SIZE_LABEL:
|
||||
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
|
||||
case BreakpointColumns::OPCODE:
|
||||
@@ -149,6 +178,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
|
||||
return mc->memCond;
|
||||
case BreakpointColumns::OFFSET:
|
||||
return mc->start;
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return QString::fromStdString(mc->description);
|
||||
case BreakpointColumns::SIZE_LABEL:
|
||||
return mc->end - mc->start;
|
||||
case BreakpointColumns::OPCODE:
|
||||
@@ -172,6 +203,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
|
||||
return MEMCHECK_INVALID;
|
||||
case BreakpointColumns::OFFSET:
|
||||
return QtUtils::FilledQStringFromValue(bp->addr, 16);
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return QString::fromStdString(bp->description);
|
||||
case BreakpointColumns::SIZE_LABEL:
|
||||
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
|
||||
case BreakpointColumns::OPCODE:
|
||||
@@ -191,6 +224,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
|
||||
return mc->memCond;
|
||||
case BreakpointColumns::OFFSET:
|
||||
return QtUtils::FilledQStringFromValue(mc->start, 16);
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return QString::fromStdString(mc->description);
|
||||
case BreakpointColumns::SIZE_LABEL:
|
||||
return mc->end - mc->start;
|
||||
case BreakpointColumns::OPCODE:
|
||||
@@ -233,6 +268,8 @@ QVariant BreakpointModel::headerData(int section, Qt::Orientation orientation, i
|
||||
case BreakpointColumns::OFFSET:
|
||||
//: Warning: limited space available. Abbreviate if needed.
|
||||
return tr("OFFSET");
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return "DESCRIPTION";
|
||||
case BreakpointColumns::SIZE_LABEL:
|
||||
//: Warning: limited space available. Abbreviate if needed.
|
||||
return tr("SIZE / LABEL");
|
||||
@@ -260,6 +297,8 @@ QVariant BreakpointModel::headerData(int section, Qt::Orientation orientation, i
|
||||
return "TYPE";
|
||||
case BreakpointColumns::OFFSET:
|
||||
return "OFFSET";
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return "DESCRIPTION";
|
||||
case BreakpointColumns::SIZE_LABEL:
|
||||
return "SIZE / LABEL";
|
||||
case BreakpointColumns::OPCODE:
|
||||
@@ -282,6 +321,7 @@ Qt::ItemFlags BreakpointModel::flags(const QModelIndex& index) const
|
||||
switch (index.column())
|
||||
{
|
||||
case BreakpointColumns::CONDITION:
|
||||
case BreakpointColumns::DESCRIPTION:
|
||||
return Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsSelectable | Qt::ItemFlag::ItemIsEditable;
|
||||
case BreakpointColumns::TYPE:
|
||||
case BreakpointColumns::OPCODE:
|
||||
@@ -395,6 +435,27 @@ bool BreakpointModel::setData(const QModelIndex& index, const QVariant& value, i
|
||||
emit dataChanged(index, index);
|
||||
return true;
|
||||
}
|
||||
else if (role == Qt::EditRole && index.column() == BreakpointColumns::DESCRIPTION)
|
||||
{
|
||||
// Update BreakPoint description
|
||||
if (auto* bp = std::get_if<BreakPoint>(&bp_mc))
|
||||
{
|
||||
const QString descValue = value.toString();
|
||||
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), bp, descValue] {
|
||||
CBreakPoints::ChangeBreakPointDescription(cpu, bp->addr, descValue.toStdString());
|
||||
});
|
||||
}
|
||||
// Update MemCheck description
|
||||
else if (auto* mc = std::get_if<MemCheck>(&bp_mc))
|
||||
{
|
||||
const QString descValue = value.toString();
|
||||
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), mc, descValue] {
|
||||
CBreakPoints::ChangeMemCheckDescription(cpu, mc->start, mc->end, descValue.toStdString());
|
||||
});
|
||||
}
|
||||
emit dataChanged(index, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -451,7 +512,7 @@ bool BreakpointModel::insertBreakpointRows(int row, int count, std::vector<Break
|
||||
{
|
||||
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), bp = *bp] {
|
||||
CBreakPoints::AddBreakPoint(cpu, bp.addr, false, bp.enabled);
|
||||
|
||||
CBreakPoints::ChangeBreakPointDescription(cpu, bp.addr, bp.description);
|
||||
if (bp.hasCond)
|
||||
{
|
||||
CBreakPoints::ChangeBreakPointAddCond(cpu, bp.addr, bp.cond);
|
||||
@@ -462,6 +523,7 @@ bool BreakpointModel::insertBreakpointRows(int row, int count, std::vector<Break
|
||||
{
|
||||
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), mc = *mc] {
|
||||
CBreakPoints::AddMemCheck(cpu, mc.start, mc.end, mc.memCond, mc.result);
|
||||
CBreakPoints::ChangeMemCheckDescription(cpu, mc.start, mc.end, mc.description);
|
||||
if (mc.hasCond)
|
||||
{
|
||||
CBreakPoints::ChangeMemCheckAddCond(cpu, mc.start, mc.end, mc.cond);
|
||||
@@ -548,6 +610,12 @@ void BreakpointModel::loadBreakpointFromFieldList(QStringList fields)
|
||||
return;
|
||||
}
|
||||
|
||||
// Description
|
||||
if (!fields[BreakpointColumns::DESCRIPTION].isEmpty())
|
||||
{
|
||||
bp.description = fields[BreakpointColumns::DESCRIPTION].toStdString();
|
||||
}
|
||||
|
||||
insertBreakpointRows(0, 1, {bp});
|
||||
}
|
||||
else
|
||||
@@ -608,6 +676,12 @@ void BreakpointModel::loadBreakpointFromFieldList(QStringList fields)
|
||||
}
|
||||
mc.result = static_cast<MemCheckResult>(result);
|
||||
|
||||
// Description
|
||||
if (!fields[BreakpointColumns::DESCRIPTION].isEmpty())
|
||||
{
|
||||
mc.description = fields[BreakpointColumns::DESCRIPTION].toStdString();
|
||||
}
|
||||
|
||||
insertBreakpointRows(0, 1, {mc});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ public:
|
||||
ENABLED = 0,
|
||||
TYPE,
|
||||
OFFSET,
|
||||
DESCRIPTION,
|
||||
SIZE_LABEL,
|
||||
OPCODE,
|
||||
CONDITION,
|
||||
@@ -38,6 +39,7 @@ public:
|
||||
QHeaderView::ResizeMode::ResizeToContents,
|
||||
QHeaderView::ResizeMode::ResizeToContents,
|
||||
QHeaderView::ResizeMode::ResizeToContents,
|
||||
QHeaderView::ResizeMode::ResizeToContents,
|
||||
QHeaderView::ResizeMode::Stretch,
|
||||
QHeaderView::ResizeMode::Stretch,
|
||||
QHeaderView::ResizeMode::ResizeToContents,
|
||||
|
||||
@@ -21,11 +21,7 @@ BreakpointView::BreakpointView(const DebuggerViewParameters& parameters)
|
||||
connect(m_ui.breakpointList, &QTableView::doubleClicked, this, &BreakpointView::onDoubleClicked);
|
||||
|
||||
m_ui.breakpointList->setModel(m_model);
|
||||
for (std::size_t i = 0; auto mode : BreakpointModel::HeaderResizeModes)
|
||||
{
|
||||
m_ui.breakpointList->horizontalHeader()->setSectionResizeMode(i, mode);
|
||||
i++;
|
||||
}
|
||||
this->resizeColumns();
|
||||
}
|
||||
|
||||
void BreakpointView::onDoubleClicked(const QModelIndex& index)
|
||||
@@ -124,6 +120,7 @@ void BreakpointView::contextDelete()
|
||||
void BreakpointView::contextNew()
|
||||
{
|
||||
BreakpointDialog* bpDialog = new BreakpointDialog(this, &cpu(), *m_model);
|
||||
connect(bpDialog, &QDialog::accepted, this, &BreakpointView::resizeColumns);
|
||||
bpDialog->setAttribute(Qt::WA_DeleteOnClose);
|
||||
bpDialog->show();
|
||||
}
|
||||
@@ -140,6 +137,7 @@ void BreakpointView::contextEdit()
|
||||
auto bpObject = m_model->at(selectedRow);
|
||||
|
||||
BreakpointDialog* bpDialog = new BreakpointDialog(this, &cpu(), *m_model, bpObject, selectedRow);
|
||||
connect(bpDialog, &QDialog::accepted, this, &BreakpointView::resizeColumns);
|
||||
bpDialog->setAttribute(Qt::WA_DeleteOnClose);
|
||||
bpDialog->show();
|
||||
}
|
||||
@@ -172,3 +170,12 @@ void BreakpointView::saveBreakpointsToDebuggerSettings()
|
||||
{
|
||||
DebuggerSettingsManager::saveGameSettings(m_model);
|
||||
}
|
||||
|
||||
void BreakpointView::resizeColumns()
|
||||
{
|
||||
for (std::size_t i = 0; auto mode : BreakpointModel::HeaderResizeModes)
|
||||
{
|
||||
m_ui.breakpointList->horizontalHeader()->setSectionResizeMode(i, mode);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@ public:
|
||||
void contextEdit();
|
||||
void contextPasteCSV();
|
||||
|
||||
void resizeColumns();
|
||||
|
||||
void saveBreakpointsToDebuggerSettings();
|
||||
|
||||
private:
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
#include "VMManager.h"
|
||||
|
||||
std::mutex DebuggerSettingsManager::writeLock;
|
||||
const QString DebuggerSettingsManager::settingsFileVersion = "0.00";
|
||||
const QString DebuggerSettingsManager::settingsFileVersion = "0.01";
|
||||
|
||||
QJsonObject DebuggerSettingsManager::loadGameSettingsJSON()
|
||||
{
|
||||
@@ -62,6 +62,17 @@ void DebuggerSettingsManager::loadGameSettings(BreakpointModel* bpModel)
|
||||
return;
|
||||
}
|
||||
|
||||
// Breakpoint descriptions were added at debugger settings file version 0.01. If loading
|
||||
// saved breakpoints from a previous version (only 0.00 existed prior), the breakpoints will be
|
||||
// missing a description. This code will add in an empty description so that the previous
|
||||
// version, 0.00, is compatible with 0.01.
|
||||
bool isMissingDescription = false;
|
||||
const QJsonValue savedVersionValue = loadGameSettingsJSON().value("Version");
|
||||
if (!savedVersionValue.isUndefined())
|
||||
{
|
||||
isMissingDescription = savedVersionValue.toString().toStdString() == "0.00";
|
||||
}
|
||||
|
||||
const QJsonArray breakpointsArray = breakpointsValue.toArray();
|
||||
for (u32 row = 0; row < breakpointsArray.size(); row++)
|
||||
{
|
||||
@@ -71,7 +82,13 @@ void DebuggerSettingsManager::loadGameSettings(BreakpointModel* bpModel)
|
||||
Console.WriteLn("Debugger Settings Manager: Failed to load invalid Breakpoint object.");
|
||||
continue;
|
||||
}
|
||||
const QJsonObject rowObject = rowValue.toObject();
|
||||
QJsonObject rowObject = rowValue.toObject();
|
||||
|
||||
// Add empty description for saved breakpoints from debugger settings versions prior to 0.01
|
||||
if (isMissingDescription)
|
||||
{
|
||||
rowObject.insert(QString("DESCRIPTION"), QJsonValue(""));
|
||||
}
|
||||
|
||||
QStringList fields;
|
||||
u32 col = 0;
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1000</width>
|
||||
<height>20</height>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
@@ -50,6 +50,7 @@
|
||||
<property name="title">
|
||||
<string>Windows</string>
|
||||
</property>
|
||||
<addaction name="actionWindowsDummy"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuView">
|
||||
<property name="title">
|
||||
@@ -72,6 +73,7 @@
|
||||
<property name="title">
|
||||
<string>Tools</string>
|
||||
</property>
|
||||
<addaction name="actionToolsDummy"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
<addaction name="menuView"/>
|
||||
@@ -318,6 +320,16 @@
|
||||
<enum>QAction::NoRole</enum>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionToolsDummy">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionWindowsDummy">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
||||
@@ -298,7 +298,10 @@ void DockManager::resetAllLayouts()
|
||||
m_layouts.clear();
|
||||
|
||||
for (const DockTables::DefaultDockLayout& layout : DockTables::DEFAULT_DOCK_LAYOUTS)
|
||||
createLayout(tr(layout.name.c_str()), layout.cpu, true, layout.name);
|
||||
{
|
||||
QString name = QCoreApplication::translate("DebuggerLayout", layout.name.c_str());
|
||||
createLayout(name, layout.cpu, true, layout.name);
|
||||
}
|
||||
|
||||
switchToLayout(0);
|
||||
updateLayoutSwitcher();
|
||||
@@ -313,7 +316,10 @@ void DockManager::resetDefaultLayouts()
|
||||
m_layouts = std::vector<DockLayout>();
|
||||
|
||||
for (const DockTables::DefaultDockLayout& layout : DockTables::DEFAULT_DOCK_LAYOUTS)
|
||||
createLayout(tr(layout.name.c_str()), layout.cpu, true, layout.name);
|
||||
{
|
||||
QString name = QCoreApplication::translate("DebuggerLayout", layout.name.c_str());
|
||||
createLayout(name, layout.cpu, true, layout.name);
|
||||
}
|
||||
|
||||
for (DockLayout& layout : old_layouts)
|
||||
if (!layout.isDefault())
|
||||
|
||||
@@ -578,7 +578,7 @@ void GameListModel::loadThemeSpecificImages()
|
||||
m_type_pixmaps[type] = getIconForType(static_cast<GameList::EntryType>(type)).pixmap(QSize(24, 24));
|
||||
|
||||
for (u32 i = 0; i < static_cast<u32>(GameList::Region::Count); i++)
|
||||
m_region_pixmaps[i] = getIconForRegion(static_cast<GameList::Region>(i)).pixmap(QSize(42, 30));
|
||||
m_region_pixmaps[i] = getIconForRegion(static_cast<GameList::Region>(i)).pixmap(QSize(36, 26));
|
||||
}
|
||||
|
||||
void GameListModel::loadCommonImages()
|
||||
|
||||
@@ -2819,7 +2819,7 @@ QString MainWindow::getDiscDevicePath(const QString& title)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void MainWindow::startGameListEntry(const GameList::Entry* entry, std::optional<s32> save_slot, std::optional<bool> fast_boot)
|
||||
void MainWindow::startGameListEntry(const GameList::Entry* entry, std::optional<s32> save_slot, std::optional<bool> fast_boot, bool load_backup)
|
||||
{
|
||||
std::shared_ptr<VMBootParameters> params = std::make_shared<VMBootParameters>();
|
||||
params->fast_boot = fast_boot;
|
||||
@@ -2828,7 +2828,7 @@ void MainWindow::startGameListEntry(const GameList::Entry* entry, std::optional<
|
||||
|
||||
if (save_slot.has_value() && !entry->serial.empty())
|
||||
{
|
||||
std::string state_filename = VMManager::GetSaveStateFileName(entry->serial.c_str(), entry->crc, save_slot.value());
|
||||
std::string state_filename = VMManager::GetSaveStateFileName(entry->serial.c_str(), entry->crc, save_slot.value(), load_backup);
|
||||
if (!FileSystem::FileExists(state_filename.c_str()))
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), tr("This save state does not exist."));
|
||||
@@ -2953,12 +2953,12 @@ std::optional<bool> MainWindow::promptForResumeState(const QString& save_state_p
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
void MainWindow::loadSaveStateSlot(s32 slot)
|
||||
void MainWindow::loadSaveStateSlot(s32 slot, bool load_backup)
|
||||
{
|
||||
if (s_vm_valid)
|
||||
{
|
||||
// easy when we're running
|
||||
g_emu_thread->loadStateFromSlot(slot);
|
||||
g_emu_thread->loadStateFromSlot(slot, load_backup);
|
||||
return;
|
||||
}
|
||||
else
|
||||
@@ -2968,7 +2968,7 @@ void MainWindow::loadSaveStateSlot(s32 slot)
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
startGameListEntry(entry, slot, std::nullopt);
|
||||
startGameListEntry(entry, slot, std::nullopt, load_backup);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3015,15 +3015,6 @@ void MainWindow::populateLoadStateMenu(QMenu* menu, const QString& filename, con
|
||||
|
||||
QAction* delete_save_states_action = menu->addAction(tr("Delete Save States..."));
|
||||
|
||||
// don't include undo in the right click menu
|
||||
if (!is_right_click_menu)
|
||||
{
|
||||
QAction* load_undo_state = menu->addAction(tr("Undo Load State"));
|
||||
load_undo_state->setEnabled(false); // CanUndoLoadState()
|
||||
// connect(load_undo_state, &QAction::triggered, this, &QtHostInterface::undoLoadState);
|
||||
menu->addSeparator();
|
||||
}
|
||||
|
||||
const QByteArray game_serial_utf8(serial.toUtf8());
|
||||
std::string state_filename;
|
||||
FILESYSTEM_STAT_DATA sd;
|
||||
@@ -3053,6 +3044,18 @@ void MainWindow::populateLoadStateMenu(QMenu* menu, const QString& filename, con
|
||||
has_any_states = true;
|
||||
}
|
||||
|
||||
for (s32 i = 1; i <= VMManager::NUM_SAVE_STATE_SLOTS; i++)
|
||||
{
|
||||
FILESYSTEM_STAT_DATA sd;
|
||||
state_filename = VMManager::GetSaveStateFileName(game_serial_utf8.constData(), crc, i, true);
|
||||
if (!FileSystem::StatFile(state_filename.c_str(), &sd))
|
||||
continue;
|
||||
|
||||
action = menu->addAction(tr("Load Backup Slot %1 (%2)").arg(i).arg(formatTimestampForSaveStateMenu(sd.ModificationTime)));
|
||||
connect(action, &QAction::triggered, [this, i]() { loadSaveStateSlot(i, true); });
|
||||
has_any_states = true;
|
||||
}
|
||||
|
||||
delete_save_states_action->setEnabled(has_any_states);
|
||||
if (has_any_states)
|
||||
{
|
||||
|
||||
@@ -267,13 +267,13 @@ private:
|
||||
QString getDiscDevicePath(const QString& title);
|
||||
|
||||
void startGameListEntry(
|
||||
const GameList::Entry* entry, std::optional<s32> save_slot = std::nullopt, std::optional<bool> fast_boot = std::nullopt);
|
||||
const GameList::Entry* entry, std::optional<s32> save_slot = std::nullopt, std::optional<bool> fast_boot = std::nullopt, bool load_backup = false);
|
||||
void setGameListEntryCoverImage(const GameList::Entry* entry);
|
||||
void clearGameListEntryPlayTime(const GameList::Entry* entry);
|
||||
void goToWikiPage(const GameList::Entry* entry);
|
||||
|
||||
std::optional<bool> promptForResumeState(const QString& save_state_path);
|
||||
void loadSaveStateSlot(s32 slot);
|
||||
void loadSaveStateSlot(s32 slot, bool load_backup = false);
|
||||
void loadSaveStateFile(const QString& filename, const QString& state_filename);
|
||||
void populateLoadStateMenu(QMenu* menu, const QString& filename, const QString& serial, quint32 crc);
|
||||
void populateSaveStateMenu(QMenu* menu, const QString& serial, quint32 crc);
|
||||
|
||||
@@ -320,18 +320,18 @@ void EmuThread::loadState(const QString& filename)
|
||||
VMManager::LoadState(filename.toUtf8().constData());
|
||||
}
|
||||
|
||||
void EmuThread::loadStateFromSlot(qint32 slot)
|
||||
void EmuThread::loadStateFromSlot(qint32 slot, bool load_backup)
|
||||
{
|
||||
if (!isOnEmuThread())
|
||||
{
|
||||
QMetaObject::invokeMethod(this, "loadStateFromSlot", Qt::QueuedConnection, Q_ARG(qint32, slot));
|
||||
QMetaObject::invokeMethod(this, "loadStateFromSlot", Qt::QueuedConnection, Q_ARG(qint32, slot), Q_ARG(bool, load_backup));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!VMManager::HasValidVM())
|
||||
return;
|
||||
|
||||
VMManager::LoadStateFromSlot(slot);
|
||||
VMManager::LoadStateFromSlot(slot, load_backup);
|
||||
}
|
||||
|
||||
void EmuThread::saveState(const QString& filename)
|
||||
|
||||
@@ -87,7 +87,7 @@ public Q_SLOTS:
|
||||
void setVMPaused(bool paused);
|
||||
void shutdownVM(bool save_state = true);
|
||||
void loadState(const QString& filename);
|
||||
void loadStateFromSlot(qint32 slot);
|
||||
void loadStateFromSlot(qint32 slot, bool load_backup = false);
|
||||
void saveState(const QString& filename);
|
||||
void saveStateToSlot(qint32 slot);
|
||||
void toggleFullscreen();
|
||||
|
||||
@@ -117,21 +117,26 @@ void AchievementSettingsWidget::updateEnableState()
|
||||
m_ui.achievementNotificationsDurationLabel->setEnabled(notifications);
|
||||
m_ui.leaderboardNotificationsDuration->setEnabled(lb_notifications);
|
||||
m_ui.leaderboardNotificationsDurationLabel->setEnabled(lb_notifications);
|
||||
m_ui.notificationSoundPath->setEnabled(info);
|
||||
m_ui.notificationSoundBrowse->setEnabled(info);
|
||||
m_ui.notificationSoundOpen->setEnabled(info);
|
||||
m_ui.notificationSoundReset->setEnabled(info);
|
||||
m_ui.notificationSound->setEnabled(enabled);
|
||||
m_ui.unlockSoundPath->setEnabled(unlock);
|
||||
m_ui.unlockSoundBrowse->setEnabled(unlock);
|
||||
m_ui.unlockSoundOpen->setEnabled(unlock);
|
||||
m_ui.unlockSoundReset->setEnabled(unlock);
|
||||
m_ui.unlockSound->setEnabled(enabled);
|
||||
m_ui.lbSoundPath->setEnabled(lbsound);
|
||||
m_ui.lbSoundOpen->setEnabled(lbsound);
|
||||
m_ui.lbSoundBrowse->setEnabled(lbsound);
|
||||
m_ui.lbSoundReset->setEnabled(lbsound);
|
||||
m_ui.lbSound->setEnabled(enabled);
|
||||
|
||||
if (!m_dialog->isPerGameSettings())
|
||||
{
|
||||
m_ui.notificationSoundPath->setEnabled(info);
|
||||
m_ui.notificationSoundBrowse->setEnabled(info);
|
||||
m_ui.notificationSoundOpen->setEnabled(info);
|
||||
m_ui.notificationSoundReset->setEnabled(info);
|
||||
m_ui.notificationSound->setEnabled(enabled);
|
||||
m_ui.unlockSoundPath->setEnabled(unlock);
|
||||
m_ui.unlockSoundBrowse->setEnabled(unlock);
|
||||
m_ui.unlockSoundOpen->setEnabled(unlock);
|
||||
m_ui.unlockSoundReset->setEnabled(unlock);
|
||||
m_ui.unlockSound->setEnabled(enabled);
|
||||
m_ui.lbSoundPath->setEnabled(lbsound);
|
||||
m_ui.lbSoundOpen->setEnabled(lbsound);
|
||||
m_ui.lbSoundBrowse->setEnabled(lbsound);
|
||||
m_ui.lbSoundReset->setEnabled(lbsound);
|
||||
m_ui.lbSound->setEnabled(enabled);
|
||||
}
|
||||
|
||||
m_ui.soundEffects->setEnabled(enabled);
|
||||
m_ui.overlays->setEnabled(enabled);
|
||||
m_ui.encoreMode->setEnabled(enabled);
|
||||
|
||||
@@ -502,7 +502,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
|
||||
|
||||
dialog->registerWidgetHelp(m_ui.aspectRatio, tr("Aspect Ratio"), tr("Auto Standard (4:3/3:2 Progressive)"),
|
||||
tr("Changes the aspect ratio used to display the console's output to the screen. The default is Auto Standard (4:3/3:2 "
|
||||
"Progressive) which automatically adjusts the aspect ratio to match how a game would be shown on a typical TV of the era."));
|
||||
"Progressive) which automatically adjusts the aspect ratio to match how a game would be shown on a typical TV of the era, and adapts to widescreen/ultrawide game patches."));
|
||||
|
||||
dialog->registerWidgetHelp(m_ui.interlacing, tr("Deinterlacing"), tr("Automatic (Default)"), tr("Determines the deinterlacing method to be used on the interlaced screen of the emulated console. Automatic should be able to correctly deinterlace most games, but if you see visibly shaky graphics, try one of the available options."));
|
||||
|
||||
@@ -1240,13 +1240,8 @@ void GraphicsSettingsWidget::populateUpscaleMultipliers(u32 max_upscale_multipli
|
||||
{
|
||||
static constexpr std::pair<const char*, float> templates[] = {
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "Native (PS2) (Default)"), 1.0f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "1.25x Native (~450px)"), 1.25f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "1.5x Native (~540px)"), 1.5f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "1.75x Native (~630px)"), 1.75f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "2x Native (~720px/HD)"), 2.0f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "2.5x Native (~900px/HD+)"), 2.5f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "3x Native (~1080px/FHD)"), 3.0f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "3.5x Native (~1260px)"), 3.5f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "4x Native (~1440px/QHD)"), 4.0f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "5x Native (~1800px/QHD+)"), 5.0f},
|
||||
{QT_TRANSLATE_NOOP("GraphicsSettingsWidget", "6x Native (~2160px/4K UHD)"), 6.0f},
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Native (10:7)</string>
|
||||
<string>Native/Full (10:7)</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
@@ -142,7 +142,7 @@
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Native (10:7)</string>
|
||||
<string>Native/Full (10:7)</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
|
||||
@@ -28,7 +28,7 @@ const char* QtHost::GetDefaultThemeName()
|
||||
#ifdef __APPLE__
|
||||
return "";
|
||||
#else
|
||||
return "darkfusion";
|
||||
return "darkfusionblue";
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// SPDX-FileCopyrightText: 2002-2025 PCSX2 Dev Team
|
||||
// SPDX-License-Identifier: GPL-3.0+
|
||||
|
||||
#define IMGUI_DEFINE_MATH_OPERATORS
|
||||
|
||||
#include "Achievements.h"
|
||||
#include "BuildVersion.h"
|
||||
#include "CDVD/CDVD.h"
|
||||
|
||||
@@ -266,15 +266,17 @@ bool ThreadedFileReader::Precache2(ProgressCallback* progress, Error* error)
|
||||
|
||||
bool ThreadedFileReader::CheckAvailableMemoryForPrecaching(u64 required_size, Error* error)
|
||||
{
|
||||
// Don't allow precaching to use more than 50% of system memory.
|
||||
// Hopefully nobody's running 2-4GB potatoes anymore....
|
||||
const u64 memory_size = GetPhysicalMemory();
|
||||
const u64 max_precache_size = memory_size / 2;
|
||||
// We want to check available physical memory instead of total.
|
||||
const u64 memory_available = GetAvailablePhysicalMemory();
|
||||
// Reserve 2GB of available memory for headroom.
|
||||
constexpr u64 memory_reserve = 2147483648;
|
||||
const u64 max_precache_size = std::max(s64{0}, static_cast<s64>(memory_available - memory_reserve));
|
||||
|
||||
if (required_size > max_precache_size)
|
||||
{
|
||||
Error::SetStringFmt(error,
|
||||
TRANSLATE_FS("CDVD", "Required memory ({}GB) is the above the maximum allowed ({}GB)."),
|
||||
required_size / _1gb, max_precache_size / _1gb);
|
||||
TRANSLATE_FS("CDVD", "Not enough memory available for precaching ({:.2f} GB required)."),
|
||||
static_cast<double>(required_size + memory_reserve) / static_cast<double>(_1gb));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -309,6 +309,7 @@ set(pcsx2DEV9Sources
|
||||
DEV9/Sessions/TCP_Session/TCP_Session.cpp
|
||||
DEV9/Sessions/TCP_Session/TCP_Session_In.cpp
|
||||
DEV9/Sessions/TCP_Session/TCP_Session_Out.cpp
|
||||
DEV9/Sessions/UDP_Session/UDP_Common.cpp
|
||||
DEV9/Sessions/UDP_Session/UDP_FixedPort.cpp
|
||||
DEV9/Sessions/UDP_Session/UDP_Session.cpp
|
||||
DEV9/smap.cpp
|
||||
@@ -354,6 +355,7 @@ set(pcsx2DEV9Headers
|
||||
DEV9/Sessions/BaseSession.h
|
||||
DEV9/Sessions/ICMP_Session/ICMP_Session.h
|
||||
DEV9/Sessions/TCP_Session/TCP_Session.h
|
||||
DEV9/Sessions/UDP_Session/UDP_Common.h
|
||||
DEV9/Sessions/UDP_Session/UDP_FixedPort.h
|
||||
DEV9/Sessions/UDP_Session/UDP_BaseSession.h
|
||||
DEV9/Sessions/UDP_Session/UDP_Session.h
|
||||
@@ -1155,6 +1157,8 @@ target_link_libraries(PCSX2_FLAGS INTERFACE
|
||||
Zstd::Zstd
|
||||
demanglegnu
|
||||
ccc
|
||||
plutovg::plutovg
|
||||
plutosvg::plutosvg
|
||||
${LIBC_LIBRARIES}
|
||||
)
|
||||
|
||||
@@ -1282,7 +1286,7 @@ function(setup_main_executable target)
|
||||
|
||||
# Copy dependency libraries.
|
||||
set(DEPS_BINDIR "${CMAKE_SOURCE_DIR}/deps/bin")
|
||||
set(DEPS_TO_COPY freetype.dll harfbuzz.dll jpeg62.dll libpng16.dll libsharpyuv.dll libwebp.dll lz4.dll SDL3.dll shaderc_shared.dll zlib1.dll zstd.dll kddockwidgets-qt62.dll)
|
||||
set(DEPS_TO_COPY freetype.dll harfbuzz.dll jpeg62.dll libpng16.dll libsharpyuv.dll libwebp.dll lz4.dll SDL3.dll shaderc_shared.dll zlib1.dll zstd.dll kddockwidgets-qt62.dll plutovg.dll plutosvg.dll)
|
||||
foreach(DEP_TO_COPY ${DEPS_TO_COPY})
|
||||
install(FILES "${DEPS_BINDIR}/${DEP_TO_COPY}" DESTINATION "${CMAKE_SOURCE_DIR}/bin")
|
||||
endforeach()
|
||||
|
||||
@@ -223,8 +223,8 @@ enum class DebugFunctionScanMode
|
||||
|
||||
enum class AspectRatioType : u8
|
||||
{
|
||||
Stretch,
|
||||
RAuto4_3_3_2,
|
||||
Stretch, // Stretches to the whole window/display size
|
||||
RAuto4_3_3_2, // Automatically scales to the target aspect ratio if there's a widescreen patch
|
||||
R4_3,
|
||||
R16_9,
|
||||
R10_7,
|
||||
@@ -233,7 +233,7 @@ enum class AspectRatioType : u8
|
||||
|
||||
enum class FMVAspectRatioSwitchType : u8
|
||||
{
|
||||
Off,
|
||||
Off, // Falls back on the selected generic aspect ratio type
|
||||
RAuto4_3_3_2,
|
||||
R4_3,
|
||||
R16_9,
|
||||
@@ -1324,6 +1324,8 @@ struct Pcsx2Config
|
||||
std::string CurrentIRX;
|
||||
std::string CurrentGameArgs;
|
||||
AspectRatioType CurrentAspectRatio = AspectRatioType::RAuto4_3_3_2;
|
||||
// Fall back aspect ratio for games that have patches (when AspectRatioType::RAuto4_3_3_2) is active.
|
||||
float CurrentCustomAspectRatio = 0.f;
|
||||
bool IsPortableMode = false;
|
||||
|
||||
Pcsx2Config();
|
||||
|
||||
@@ -16,5 +16,6 @@ namespace Sessions
|
||||
}
|
||||
|
||||
virtual bool WillRecive(PacketReader::IP::IP_Address parDestIP) = 0;
|
||||
virtual void ForceClose() { RaiseEventConnectionClosed(); };
|
||||
};
|
||||
} // namespace Sessions
|
||||
|
||||
193
pcsx2/DEV9/Sessions/UDP_Session/UDP_Common.cpp
Normal file
@@ -0,0 +1,193 @@
|
||||
// SPDX-FileCopyrightText: 2002-2025 PCSX2 Dev Team
|
||||
// SPDX-License-Identifier: GPL-3.0+
|
||||
|
||||
#include <bit>
|
||||
|
||||
#include "common/Console.h"
|
||||
|
||||
#ifdef __POSIX__
|
||||
#define SOCKET_ERROR -1
|
||||
#define INVALID_SOCKET -1
|
||||
#include <errno.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/select.h>
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "common/RedtapeWindows.h"
|
||||
#include <winsock2.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "UDP_Common.h"
|
||||
#include "DEV9/PacketReader/IP/UDP/UDP_Packet.h"
|
||||
|
||||
using namespace PacketReader;
|
||||
using namespace PacketReader::IP;
|
||||
using namespace PacketReader::IP::UDP;
|
||||
|
||||
namespace Sessions::UDP_Common
|
||||
{
|
||||
#ifdef _WIN32
|
||||
SOCKET CreateSocket(IP_Address adapterIP, std::optional<u16> port)
|
||||
{
|
||||
SOCKET client = INVALID_SOCKET;
|
||||
#elif defined(__POSIX__)
|
||||
int CreateSocket(IP_Address adapterIP, std::optional<u16> port)
|
||||
{
|
||||
int client = INVALID_SOCKET;
|
||||
#endif
|
||||
|
||||
int ret;
|
||||
client = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
if (client == INVALID_SOCKET)
|
||||
{
|
||||
Console.Error("DEV9: UDP: Failed to open socket. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
return INVALID_SOCKET;
|
||||
}
|
||||
|
||||
constexpr int reuseAddress = true; // BOOL on Windows
|
||||
ret = setsockopt(client, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<const char*>(&reuseAddress), sizeof(reuseAddress));
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
Console.Error("DEV9: UDP: Failed to set SO_REUSEADDR. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
|
||||
if (port.has_value() || adapterIP != IP_Address{{{0, 0, 0, 0}}})
|
||||
{
|
||||
sockaddr_in endpoint{};
|
||||
endpoint.sin_family = AF_INET;
|
||||
endpoint.sin_addr = std::bit_cast<in_addr>(adapterIP);
|
||||
if (port.has_value())
|
||||
endpoint.sin_port = htons(port.value());
|
||||
|
||||
ret = bind(client, reinterpret_cast<const sockaddr*>(&endpoint), sizeof(endpoint));
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
Console.Error("DEV9: UDP: Failed to bind socket. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
}
|
||||
return client;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
std::tuple<std::optional<ReceivedPayload>, bool> RecvFrom(SOCKET client, u16 port)
|
||||
#elif defined(__POSIX__)
|
||||
std::tuple<std::optional<ReceivedPayload>, bool> RecvFrom(int client, u16 port)
|
||||
#endif
|
||||
{
|
||||
int ret;
|
||||
fd_set sReady;
|
||||
fd_set sExcept;
|
||||
|
||||
// not const Linux
|
||||
timeval nowait{};
|
||||
FD_ZERO(&sReady);
|
||||
FD_ZERO(&sExcept);
|
||||
FD_SET(client, &sReady);
|
||||
FD_SET(client, &sExcept);
|
||||
ret = select(client + 1, &sReady, nullptr, &sExcept, &nowait);
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
{
|
||||
Console.Error("DEV9: UDP: select failed. Error code: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
return {std::nullopt, true};
|
||||
}
|
||||
else if (FD_ISSET(client, &sExcept))
|
||||
{
|
||||
#ifdef _WIN32
|
||||
int len = sizeof(ret);
|
||||
if (getsockopt(client, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&ret), &len) < 0)
|
||||
{
|
||||
Console.Error("DEV9: UDP: Unknown UDP connection error (getsockopt error: %d)", WSAGetLastError());
|
||||
}
|
||||
#elif defined(__POSIX__)
|
||||
socklen_t len = sizeof(ret);
|
||||
if (getsockopt(client, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&ret), &len) < 0)
|
||||
Console.Error("DEV9: UDP: Unknown UDP connection error (getsockopt error: %d)", errno);
|
||||
#endif
|
||||
else
|
||||
Console.Error("DEV9: UDP: Socket error: %d", ret);
|
||||
|
||||
// All socket errors assumed fatal.
|
||||
return {std::nullopt, false};
|
||||
}
|
||||
else if (FD_ISSET(client, &sReady))
|
||||
{
|
||||
unsigned long available = 0;
|
||||
PayloadData* recived = nullptr;
|
||||
std::unique_ptr<u8[]> buffer;
|
||||
sockaddr_in endpoint{};
|
||||
|
||||
// FIONREAD returns total size of all available messages
|
||||
// however, we only read one message at a time
|
||||
#ifdef _WIN32
|
||||
ret = ioctlsocket(client, FIONREAD, &available);
|
||||
#elif defined(__POSIX__)
|
||||
ret = ioctl(client, FIONREAD, &available);
|
||||
#endif
|
||||
if (ret != SOCKET_ERROR)
|
||||
{
|
||||
buffer = std::make_unique<u8[]>(available);
|
||||
|
||||
#ifdef _WIN32
|
||||
int fromlen = sizeof(endpoint);
|
||||
#elif defined(__POSIX__)
|
||||
socklen_t fromlen = sizeof(endpoint);
|
||||
#endif
|
||||
ret = recvfrom(client, reinterpret_cast<char*>(buffer.get()), available, 0, reinterpret_cast<sockaddr*>(&endpoint), &fromlen);
|
||||
}
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
ret = WSAGetLastError();
|
||||
#elif defined(__POSIX__)
|
||||
ret = errno;
|
||||
#endif
|
||||
Console.Error("DEV9: UDP: recvfrom error: %d", ret);
|
||||
|
||||
/*
|
||||
* We can receive an ICMP Port Unreacable error as a WSAECONNRESET/ECONNREFUSED error
|
||||
* Ignore the error, recv will be retried next loop
|
||||
*/
|
||||
return {std::nullopt,
|
||||
#ifdef _WIN32
|
||||
ret == WSAECONNRESET};
|
||||
#elif defined(__POSIX__)
|
||||
ret == ECONNREFUSED};
|
||||
#endif
|
||||
}
|
||||
|
||||
recived = new PayloadData(ret);
|
||||
memcpy(recived->data.get(), buffer.get(), ret);
|
||||
|
||||
std::unique_ptr<UDP_Packet> iRet = std::make_unique<UDP_Packet>(recived);
|
||||
iRet->destinationPort = port;
|
||||
iRet->sourcePort = ntohs(endpoint.sin_port);
|
||||
|
||||
return {ReceivedPayload{std::bit_cast<IP_Address>(endpoint.sin_addr), std::move(iRet)}, true};
|
||||
}
|
||||
return {std::nullopt, true};
|
||||
}
|
||||
} // namespace Sessions::UDP_Common
|
||||
31
pcsx2/DEV9/Sessions/UDP_Session/UDP_Common.h
Normal file
@@ -0,0 +1,31 @@
|
||||
// SPDX-FileCopyrightText: 2002-2025 PCSX2 Dev Team
|
||||
// SPDX-License-Identifier: GPL-3.0+
|
||||
|
||||
#pragma once
|
||||
#include <tuple>
|
||||
#ifdef _WIN32
|
||||
#include <winsock2.h>
|
||||
#elif defined(__POSIX__)
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
|
||||
#include "common/Pcsx2Defs.h"
|
||||
#include "DEV9/Sessions/BaseSession.h"
|
||||
|
||||
namespace Sessions::UDP_Common
|
||||
{
|
||||
// Binds the socket when provided with an IP
|
||||
#ifdef _WIN32
|
||||
SOCKET CreateSocket(PacketReader::IP::IP_Address adapterIP, std::optional<u16> port);
|
||||
#elif defined(__POSIX__)
|
||||
int CreateSocket(PacketReader::IP::IP_Address adapterIP, std::optional<u16> port);
|
||||
#endif
|
||||
|
||||
// Receives from the client and packages the data into ReceivedPayload
|
||||
// port is the local port to be written to the UDP header in ReceivedPayload
|
||||
#ifdef _WIN32
|
||||
std::tuple<std::optional<ReceivedPayload>, bool> RecvFrom(SOCKET client, u16 port);
|
||||
#elif defined(__POSIX__)
|
||||
std::tuple<std::optional<ReceivedPayload>, bool> RecvFrom(int client, u16 port);
|
||||
#endif
|
||||
} // namespace Sessions::UDP_Common
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "UDP_Common.h"
|
||||
#include "UDP_FixedPort.h"
|
||||
#include "DEV9/PacketReader/IP/UDP/UDP_Packet.h"
|
||||
|
||||
@@ -51,33 +52,15 @@ namespace Sessions
|
||||
|
||||
void UDP_FixedPort::Init()
|
||||
{
|
||||
int ret;
|
||||
client = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
client = UDP_Common::CreateSocket(adapterIP, port);
|
||||
if (client == INVALID_SOCKET)
|
||||
{
|
||||
Console.Error("DEV9: UDP: Failed to open socket. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
RaiseEventConnectionClosed();
|
||||
return;
|
||||
}
|
||||
|
||||
constexpr int reuseAddress = true; // BOOL on Windows
|
||||
ret = setsockopt(client, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<const char*>(&reuseAddress), sizeof(reuseAddress));
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
Console.Error("DEV9: UDP: Failed to set SO_REUSEADDR. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
|
||||
constexpr int broadcastEnable = true; // BOOL on Windows
|
||||
ret = setsockopt(client, SOL_SOCKET, SO_BROADCAST, reinterpret_cast<const char*>(&broadcastEnable), sizeof(broadcastEnable));
|
||||
const int ret = setsockopt(client, SOL_SOCKET, SO_BROADCAST, reinterpret_cast<const char*>(&broadcastEnable), sizeof(broadcastEnable));
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
Console.Error("DEV9: UDP: Failed to set SO_BROADCAST. Error: %d",
|
||||
@@ -87,25 +70,6 @@ namespace Sessions
|
||||
errno);
|
||||
#endif
|
||||
|
||||
sockaddr_in endpoint{};
|
||||
endpoint.sin_family = AF_INET;
|
||||
endpoint.sin_addr = std::bit_cast<in_addr>(adapterIP);
|
||||
endpoint.sin_port = htons(port);
|
||||
|
||||
ret = bind(client, reinterpret_cast<const sockaddr*>(&endpoint), sizeof(endpoint));
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
{
|
||||
Console.Error("DEV9: UDP: Failed to bind socket. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
RaiseEventConnectionClosed();
|
||||
return;
|
||||
}
|
||||
|
||||
open.store(true);
|
||||
}
|
||||
|
||||
@@ -114,102 +78,45 @@ namespace Sessions
|
||||
if (!open.load())
|
||||
return std::nullopt;
|
||||
|
||||
int ret;
|
||||
fd_set sReady;
|
||||
fd_set sExcept;
|
||||
std::optional<ReceivedPayload> ret;
|
||||
bool success;
|
||||
std::tie(ret, success) = UDP_Common::RecvFrom(client, port);
|
||||
|
||||
timeval nowait{};
|
||||
FD_ZERO(&sReady);
|
||||
FD_ZERO(&sExcept);
|
||||
FD_SET(client, &sReady);
|
||||
FD_SET(client, &sExcept);
|
||||
ret = select(client + 1, &sReady, nullptr, &sExcept, &nowait);
|
||||
|
||||
bool hasData;
|
||||
if (ret == SOCKET_ERROR)
|
||||
if (!success)
|
||||
{
|
||||
hasData = false;
|
||||
Console.Error("DEV9: UDP: select failed. Error code: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
}
|
||||
else if (FD_ISSET(client, &sExcept))
|
||||
{
|
||||
hasData = false;
|
||||
|
||||
int error = 0;
|
||||
#ifdef _WIN32
|
||||
int len = sizeof(error);
|
||||
if (getsockopt(client, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&error), &len) < 0)
|
||||
Console.Error("DEV9: UDP: Unknown UDP connection error (getsockopt error: %d)", WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
socklen_t len = sizeof(error);
|
||||
if (getsockopt(client, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&error), &len) < 0)
|
||||
Console.Error("DEV9: UDP: Unknown UDP connection error (getsockopt error: %d)", errno);
|
||||
#endif
|
||||
else
|
||||
Console.Error("DEV9: UDP: Recv error: %d", error);
|
||||
}
|
||||
else
|
||||
hasData = FD_ISSET(client, &sReady);
|
||||
|
||||
if (hasData)
|
||||
{
|
||||
unsigned long available = 0;
|
||||
PayloadData* recived = nullptr;
|
||||
std::unique_ptr<u8[]> buffer;
|
||||
sockaddr_in endpoint{};
|
||||
|
||||
// FIONREAD returns total size of all available messages
|
||||
// however, we only read one message at a time
|
||||
#ifdef _WIN32
|
||||
ret = ioctlsocket(client, FIONREAD, &available);
|
||||
#elif defined(__POSIX__)
|
||||
ret = ioctl(client, FIONREAD, &available);
|
||||
#endif
|
||||
if (ret != SOCKET_ERROR)
|
||||
// See Reset() for why we copy the vector.
|
||||
std::vector<UDP_BaseSession*> connectionsCopy;
|
||||
{
|
||||
buffer = std::make_unique<u8[]>(available);
|
||||
|
||||
#ifdef _WIN32
|
||||
int fromlen = sizeof(endpoint);
|
||||
#elif defined(__POSIX__)
|
||||
socklen_t fromlen = sizeof(endpoint);
|
||||
#endif
|
||||
ret = recvfrom(client, reinterpret_cast<char*>(buffer.get()), available, 0, reinterpret_cast<sockaddr*>(&endpoint), &fromlen);
|
||||
std::lock_guard numberlock(connectionSentry);
|
||||
open.store(false);
|
||||
connectionsCopy = connections;
|
||||
}
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
if (connectionsCopy.size() == 0)
|
||||
{
|
||||
Console.Error("DEV9: UDP: UDP recv error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
// Can close immediately.
|
||||
RaiseEventConnectionClosed();
|
||||
return std::nullopt;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Need to wait for child connections to close.
|
||||
for (size_t i = 0; i < connectionsCopy.size(); i++)
|
||||
connectionsCopy[i]->ForceClose();
|
||||
|
||||
recived = new PayloadData(ret);
|
||||
memcpy(recived->data.get(), buffer.get(), ret);
|
||||
|
||||
std::unique_ptr<UDP_Packet> iRet = std::make_unique<UDP_Packet>(recived);
|
||||
iRet->destinationPort = port;
|
||||
iRet->sourcePort = ntohs(endpoint.sin_port);
|
||||
|
||||
IP_Address srvIP = std::bit_cast<IP_Address>(endpoint.sin_addr);
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
else if (ret.has_value())
|
||||
{
|
||||
{
|
||||
std::lock_guard numberlock(connectionSentry);
|
||||
|
||||
for (size_t i = 0; i < connections.size(); i++)
|
||||
{
|
||||
UDP_BaseSession* s = connections[i];
|
||||
if (s->WillRecive(srvIP))
|
||||
return ReceivedPayload{srvIP, std::move(iRet)};
|
||||
if (s->WillRecive(ret.value().sourceIP))
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
Console.Error("DEV9: UDP: Unexpected packet, dropping");
|
||||
@@ -225,10 +132,12 @@ namespace Sessions
|
||||
|
||||
void UDP_FixedPort::Reset()
|
||||
{
|
||||
// Reseting a session may cause that session to close itself,
|
||||
// when that happens, the connections vector gets modified via our close handler.
|
||||
// Duplicate the vector to avoid iterating over a modified collection,
|
||||
// this also avoids the issue of recursive locking when our close handler takes a lock.
|
||||
/*
|
||||
* Reseting a session may cause that session to close itself,
|
||||
* when that happens, the connections vector gets modified via our close handler.
|
||||
* Duplicate the vector to avoid iterating over a modified collection,
|
||||
* this also avoids the issue of recursive locking when our close handler takes a lock.
|
||||
*/
|
||||
std::vector<UDP_BaseSession*> connectionsCopy;
|
||||
{
|
||||
std::lock_guard numberlock(connectionSentry);
|
||||
@@ -241,16 +150,15 @@ namespace Sessions
|
||||
|
||||
UDP_Session* UDP_FixedPort::NewClientSession(ConnectionKey parNewKey, bool parIsBrodcast, bool parIsMulticast)
|
||||
{
|
||||
// Lock the whole function so we can't race between the open check and creating the session
|
||||
std::lock_guard numberlock(connectionSentry);
|
||||
if (!open.load())
|
||||
return nullptr;
|
||||
|
||||
UDP_Session* s = new UDP_Session(parNewKey, adapterIP, parIsBrodcast, parIsMulticast, client);
|
||||
|
||||
s->AddConnectionClosedHandler([&](BaseSession* session) { HandleChildConnectionClosed(session); });
|
||||
{
|
||||
std::lock_guard numberlock(connectionSentry);
|
||||
connections.push_back(s);
|
||||
}
|
||||
connections.push_back(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
@@ -272,6 +180,8 @@ namespace Sessions
|
||||
|
||||
UDP_FixedPort::~UDP_FixedPort()
|
||||
{
|
||||
DevCon.WriteLn("DEV9: Socket: UDPFixedPort %d had %d child connections", port, connections.size());
|
||||
|
||||
open.store(false);
|
||||
if (client != INVALID_SOCKET)
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#endif
|
||||
|
||||
#include "UDP_Session.h"
|
||||
#include "UDP_Common.h"
|
||||
#include "DEV9/PacketReader/IP/UDP/UDP_Packet.h"
|
||||
|
||||
using namespace PacketReader;
|
||||
@@ -75,97 +76,17 @@ namespace Sessions
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
int ret;
|
||||
fd_set sReady;
|
||||
fd_set sExcept;
|
||||
std::optional<ReceivedPayload> ret;
|
||||
bool success;
|
||||
std::tie(ret, success) = UDP_Common::RecvFrom(client, srcPort);
|
||||
|
||||
timeval nowait{};
|
||||
FD_ZERO(&sReady);
|
||||
FD_ZERO(&sExcept);
|
||||
FD_SET(client, &sReady);
|
||||
FD_SET(client, &sExcept);
|
||||
ret = select(client + 1, &sReady, nullptr, &sExcept, &nowait);
|
||||
|
||||
bool hasData;
|
||||
if (ret == SOCKET_ERROR)
|
||||
if (!success)
|
||||
{
|
||||
hasData = false;
|
||||
Console.Error("DEV9: UDP: Select failed. Error code: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
}
|
||||
else if (FD_ISSET(client, &sExcept))
|
||||
{
|
||||
hasData = false;
|
||||
|
||||
int error = 0;
|
||||
#ifdef _WIN32
|
||||
int len = sizeof(error);
|
||||
if (getsockopt(client, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&error), &len) < 0)
|
||||
Console.Error("DEV9: UDP: Unknown UDP connection error (getsockopt error: %d)", WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
socklen_t len = sizeof(error);
|
||||
if (getsockopt(client, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&error), &len) < 0)
|
||||
Console.Error("DEV9: UDP: Unknown UDP connection error (getsockopt error: %d)", errno);
|
||||
#endif
|
||||
else
|
||||
Console.Error("DEV9: UDP: Recv error: %d", error);
|
||||
}
|
||||
else
|
||||
hasData = FD_ISSET(client, &sReady);
|
||||
|
||||
if (hasData)
|
||||
{
|
||||
unsigned long available = 0;
|
||||
PayloadData* recived = nullptr;
|
||||
std::unique_ptr<u8[]> buffer;
|
||||
sockaddr_in endpoint{};
|
||||
|
||||
// FIONREAD returns total size of all available messages
|
||||
// however, we only read one message at a time
|
||||
#ifdef _WIN32
|
||||
ret = ioctlsocket(client, FIONREAD, &available);
|
||||
#elif defined(__POSIX__)
|
||||
ret = ioctl(client, FIONREAD, &available);
|
||||
#endif
|
||||
if (ret != SOCKET_ERROR)
|
||||
{
|
||||
buffer = std::make_unique<u8[]>(available);
|
||||
|
||||
#ifdef _WIN32
|
||||
int fromlen = sizeof(endpoint);
|
||||
#elif defined(__POSIX__)
|
||||
socklen_t fromlen = sizeof(endpoint);
|
||||
#endif
|
||||
ret = recvfrom(client, reinterpret_cast<char*>(buffer.get()), available, 0, reinterpret_cast<sockaddr*>(&endpoint), &fromlen);
|
||||
}
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
{
|
||||
Console.Error("DEV9: UDP: Recv error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
RaiseEventConnectionClosed();
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
recived = new PayloadData(ret);
|
||||
memcpy(recived->data.get(), buffer.get(), ret);
|
||||
|
||||
std::unique_ptr<UDP_Packet> iRet = std::make_unique<UDP_Packet>(recived);
|
||||
iRet->destinationPort = srcPort;
|
||||
iRet->sourcePort = destPort;
|
||||
|
||||
deathClockStart.store(std::chrono::steady_clock::now());
|
||||
|
||||
return ReceivedPayload{destIP, std::move(iRet)};
|
||||
RaiseEventConnectionClosed();
|
||||
return std::nullopt;
|
||||
}
|
||||
else if (ret.has_value())
|
||||
return ret;
|
||||
|
||||
if (std::chrono::steady_clock::now() - deathClockStart.load() > MAX_IDLE)
|
||||
{
|
||||
@@ -211,54 +132,19 @@ namespace Sessions
|
||||
destPort = udp.destinationPort;
|
||||
srcPort = udp.sourcePort;
|
||||
|
||||
int ret;
|
||||
client = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
client = UDP_Common::CreateSocket(adapterIP, std::nullopt);
|
||||
if (client == INVALID_SOCKET)
|
||||
{
|
||||
Console.Error("DEV9: UDP: Failed to open socket. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
RaiseEventConnectionClosed();
|
||||
return false;
|
||||
}
|
||||
|
||||
constexpr int reuseAddress = true; // BOOL on Windows
|
||||
ret = setsockopt(client, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<const char*>(&reuseAddress), sizeof(reuseAddress));
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
Console.Error("DEV9: UDP: Failed to set SO_REUSEADDR. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
|
||||
if (adapterIP.integer != 0)
|
||||
{
|
||||
sockaddr_in endpoint{};
|
||||
endpoint.sin_family = AF_INET;
|
||||
endpoint.sin_addr = std::bit_cast<in_addr>(adapterIP);
|
||||
|
||||
ret = bind(client, reinterpret_cast<const sockaddr*>(&endpoint), sizeof(endpoint));
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
Console.Error("DEV9: UDP: Failed to bind socket. Error: %d",
|
||||
#ifdef _WIN32
|
||||
WSAGetLastError());
|
||||
#elif defined(__POSIX__)
|
||||
errno);
|
||||
#endif
|
||||
}
|
||||
|
||||
sockaddr_in endpoint{};
|
||||
endpoint.sin_family = AF_INET;
|
||||
endpoint.sin_addr = std::bit_cast<in_addr>(destIP);
|
||||
endpoint.sin_port = htons(destPort);
|
||||
|
||||
ret = connect(client, reinterpret_cast<const sockaddr*>(&endpoint), sizeof(endpoint));
|
||||
const int ret = connect(client, reinterpret_cast<const sockaddr*>(&endpoint), sizeof(endpoint));
|
||||
|
||||
if (ret == SOCKET_ERROR)
|
||||
{
|
||||
|
||||
@@ -203,14 +203,19 @@ bool SocketAdapter::recv(NetPacket* pkt)
|
||||
|
||||
ScopedGuard cleanup([&]() {
|
||||
// Garbage collect closed connections
|
||||
for (BaseSession* s : deleteQueueRecvThread)
|
||||
delete s;
|
||||
deleteQueueRecvThread.clear();
|
||||
if (deleteQueueRecvThread.size() != 0)
|
||||
{
|
||||
std::lock_guard deletelock(deleteRecvSentry);
|
||||
for (BaseSession* s : deleteQueueRecvThread)
|
||||
delete s;
|
||||
deleteQueueRecvThread.clear();
|
||||
}
|
||||
});
|
||||
|
||||
EthernetFrame* bFrame;
|
||||
if (!vRecBuffer.Dequeue(&bFrame))
|
||||
{
|
||||
std::lock_guard deletelock(deleteSendSentry);
|
||||
std::vector<ConnectionKey> keys = connections.GetKeys();
|
||||
for (size_t i = 0; i < keys.size(); i++)
|
||||
{
|
||||
@@ -259,9 +264,13 @@ bool SocketAdapter::send(NetPacket* pkt)
|
||||
pxAssert(std::this_thread::get_id() == sendThreadId);
|
||||
ScopedGuard cleanup([&]() {
|
||||
// Garbage collect closed connections
|
||||
for (BaseSession* s : deleteQueueSendThread)
|
||||
delete s;
|
||||
deleteQueueSendThread.clear();
|
||||
if (deleteQueueSendThread.size() != 0)
|
||||
{
|
||||
std::lock_guard deletelock(deleteSendSentry);
|
||||
for (BaseSession* s : deleteQueueSendThread)
|
||||
delete s;
|
||||
deleteQueueSendThread.clear();
|
||||
}
|
||||
});
|
||||
|
||||
EthernetFrame frame(pkt);
|
||||
@@ -375,6 +384,7 @@ bool SocketAdapter::SendIP(IP_Packet* ipPkt)
|
||||
Key.ip = ipPkt->destinationIP;
|
||||
Key.protocol = ipPkt->protocol;
|
||||
|
||||
std::lock_guard deletelock(deleteRecvSentry);
|
||||
switch (ipPkt->protocol) //(Prase Payload)
|
||||
{
|
||||
case (u8)IP_Type::ICMP:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0+
|
||||
|
||||
#pragma once
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
|
||||
#include "net.h"
|
||||
@@ -23,14 +24,17 @@ class SocketAdapter : public NetAdapter
|
||||
bool initialized = false;
|
||||
PacketReader::IP::IP_Address adapterIP;
|
||||
|
||||
//Sentrys replaced by the requirment for each session class to have thread safe destructor
|
||||
|
||||
ThreadSafeMap<Sessions::ConnectionKey, Sessions::BaseSession*> connections;
|
||||
ThreadSafeMap<u16, Sessions::BaseSession*> fixedUDPPorts;
|
||||
|
||||
std::thread::id sendThreadId;
|
||||
std::vector<Sessions::BaseSession*> deleteQueueSendThread;
|
||||
std::vector<Sessions::BaseSession*> deleteQueueRecvThread;
|
||||
//Mutex to be held when processing the delete queue.
|
||||
//The Send thread will lock the RecvSentry to prevent the recv thread
|
||||
//from deleting a session the send thread might be currently working on.
|
||||
std::mutex deleteSendSentry;
|
||||
std::mutex deleteRecvSentry;
|
||||
|
||||
public:
|
||||
SocketAdapter();
|
||||
|
||||
@@ -285,6 +285,16 @@ BreakPointCond* CBreakPoints::GetBreakPointCondition(BreakPointCpu cpu, u32 addr
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void CBreakPoints::ChangeBreakPointDescription(BreakPointCpu cpu, u32 addr, const std::string& description)
|
||||
{
|
||||
const size_t bp = FindBreakpoint(cpu, addr, true, false);
|
||||
if (bp != INVALID_BREAKPOINT)
|
||||
{
|
||||
breakPoints_[bp].description = description;
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
||||
void CBreakPoints::AddMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result)
|
||||
{
|
||||
// This will ruin any pending memchecks.
|
||||
@@ -356,6 +366,16 @@ void CBreakPoints::ChangeMemCheckAddCond(BreakPointCpu cpu, u32 start, u32 end,
|
||||
}
|
||||
}
|
||||
|
||||
void CBreakPoints::ChangeMemCheckDescription(BreakPointCpu cpu, u32 start, u32 end, const std::string& description)
|
||||
{
|
||||
const size_t mc = FindMemCheck(cpu, start, end);
|
||||
if (mc != INVALID_MEMCHECK)
|
||||
{
|
||||
memChecks_[mc].description = description;
|
||||
Update(cpu);
|
||||
}
|
||||
}
|
||||
|
||||
void CBreakPoints::ClearAllMemChecks()
|
||||
{
|
||||
// This will ruin any pending memchecks.
|
||||
|
||||
@@ -37,6 +37,8 @@ struct BreakPoint
|
||||
BreakPointCond cond;
|
||||
BreakPointCpu cpu;
|
||||
|
||||
std::string description;
|
||||
|
||||
bool operator==(const BreakPoint& other) const
|
||||
{
|
||||
return addr == other.addr;
|
||||
@@ -78,6 +80,8 @@ struct MemCheck
|
||||
MemCheckResult result;
|
||||
BreakPointCpu cpu;
|
||||
|
||||
std::string description;
|
||||
|
||||
u32 numHits;
|
||||
|
||||
u32 lastPC;
|
||||
@@ -119,12 +123,14 @@ public:
|
||||
static void ChangeBreakPointAddCond(BreakPointCpu cpu, u32 addr, const BreakPointCond& cond);
|
||||
static void ChangeBreakPointRemoveCond(BreakPointCpu cpu, u32 addr);
|
||||
static BreakPointCond* GetBreakPointCondition(BreakPointCpu cpu, u32 addr);
|
||||
static void ChangeBreakPointDescription(BreakPointCpu cpu, u32 addr, const std::string& description);
|
||||
|
||||
static void AddMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result);
|
||||
static void RemoveMemCheck(BreakPointCpu cpu, u32 start, u32 end);
|
||||
static void ChangeMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result);
|
||||
static void ChangeMemCheckRemoveCond(BreakPointCpu cpu, u32 start, u32 end);
|
||||
static void ChangeMemCheckAddCond(BreakPointCpu cpu, u32 start, u32 end, const BreakPointCond& cond);
|
||||
static void ChangeMemCheckDescription(BreakPointCpu cpu, u32 start, u32 end, const std::string& description);
|
||||
static void ClearAllMemChecks();
|
||||
|
||||
static void SetSkipFirst(BreakPointCpu cpu, u32 pc);
|
||||
|
||||
@@ -1,19 +1,12 @@
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
[This file contains the template for the PCSX2 code rights license. For the full
|
||||
rant-like preamble of the GPL, see GPL.txt]
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
|
||||
/* PCSX2 - PS2 Emulator for PCs
|
||||
* Copyright (C) 2002-2019 PCSX2 Dev Team
|
||||
*
|
||||
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU Lesser General Public License as published by the Free Software Found-
|
||||
* ation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with PCSX2.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
@@ -435,6 +435,15 @@ void GSgifTransfer3(u8* mem, u32 size)
|
||||
|
||||
void GSvsync(u32 field, bool registers_written)
|
||||
{
|
||||
// Update this here because we need to check if the pending draw affects the current frame, so our regs need to be updated.
|
||||
g_gs_renderer->PCRTCDisplays.SetVideoMode(g_gs_renderer->GetVideoMode());
|
||||
g_gs_renderer->PCRTCDisplays.EnableDisplays(g_gs_renderer->m_regs->PMODE, g_gs_renderer->m_regs->SMODE2, g_gs_renderer->isReallyInterlaced());
|
||||
g_gs_renderer->PCRTCDisplays.CheckSameSource();
|
||||
g_gs_renderer->PCRTCDisplays.SetRects(0, g_gs_renderer->m_regs->DISP[0].DISPLAY, g_gs_renderer->m_regs->DISP[0].DISPFB);
|
||||
g_gs_renderer->PCRTCDisplays.SetRects(1, g_gs_renderer->m_regs->DISP[1].DISPLAY, g_gs_renderer->m_regs->DISP[1].DISPFB);
|
||||
g_gs_renderer->PCRTCDisplays.CalculateDisplayOffset(g_gs_renderer->m_scanmask_used);
|
||||
g_gs_renderer->PCRTCDisplays.CalculateFramebufferOffset(g_gs_renderer->m_scanmask_used);
|
||||
|
||||
// Do not move the flush into the VSync() method. It's here because EE transfers
|
||||
// get cleared in HW VSync, and may be needed for a buffered draw (FFX FMVs).
|
||||
g_gs_renderer->Flush(GSState::VSYNC);
|
||||
|
||||
@@ -119,6 +119,10 @@ GSState::~GSState()
|
||||
_aligned_free(m_vertex.buff);
|
||||
if (m_index.buff)
|
||||
_aligned_free(m_index.buff);
|
||||
if (m_draw_vertex.buff)
|
||||
_aligned_free(m_draw_vertex.buff);
|
||||
if (m_draw_index.buff)
|
||||
_aligned_free(m_draw_index.buff);
|
||||
}
|
||||
|
||||
std::string GSState::GetDrawDumpPath(const char* format, ...)
|
||||
@@ -467,7 +471,8 @@ void GSState::DumpVertices(const std::string& filename)
|
||||
file << std::setfill('0') << std::setw(3) << unsigned(v.RGBAQ.R) << DEL;
|
||||
file << std::setfill('0') << std::setw(3) << unsigned(v.RGBAQ.G) << DEL;
|
||||
file << std::setfill('0') << std::setw(3) << unsigned(v.RGBAQ.B) << DEL;
|
||||
file << std::setfill('0') << std::setw(3) << unsigned(v.RGBAQ.A);
|
||||
file << std::setfill('0') << std::setw(3) << unsigned(v.RGBAQ.A) << DEL;
|
||||
file << "FOG: " << std::setfill('0') << std::setw(3) << unsigned(v.FOG);
|
||||
file << std::endl;
|
||||
}
|
||||
|
||||
@@ -849,7 +854,7 @@ void GSState::ApplyTEX0(GIFRegTEX0& TEX0)
|
||||
// Urban Chaos writes to the memory backing the CLUT in the middle of a shuffle, and
|
||||
// it's unclear whether the CLUT would actually get reloaded in that case.
|
||||
if (TEX0.CBP != m_mem.m_clut.GetCLUTCBP())
|
||||
m_channel_shuffle = false;
|
||||
m_channel_shuffle_abort = true;
|
||||
}
|
||||
|
||||
TEX0.CPSM &= 0xa; // 1010b
|
||||
@@ -1472,6 +1477,35 @@ void GSState::Flush(GSFlushReason reason)
|
||||
|
||||
if (m_index.tail > 0)
|
||||
{
|
||||
// Unless Vsync really needs the pending draw, don't do it when VSync happens as it can really screw up our heuristics when looking ahead.
|
||||
if (reason == VSYNC)
|
||||
{
|
||||
GSDrawingContext* draw_ctx = &m_prev_env.CTXT[m_prev_env.PRIM.CTXT];
|
||||
const u32 start_bp = GSLocalMemory::GetStartBlockAddress(draw_ctx->FRAME.Block(), draw_ctx->FRAME.FBW, draw_ctx->FRAME.PSM, temp_draw_rect);
|
||||
const u32 end_bp = GSLocalMemory::GetEndBlockAddress(draw_ctx->FRAME.Block(), draw_ctx->FRAME.FBW, draw_ctx->FRAME.PSM, temp_draw_rect);
|
||||
bool needs_flush[2] = {PCRTCDisplays.PCRTCDisplays[0].enabled, PCRTCDisplays.PCRTCDisplays[1].enabled};
|
||||
|
||||
if (PCRTCDisplays.PCRTCDisplays[1].enabled)
|
||||
{
|
||||
const u32 out_start_bp = GSLocalMemory::GetStartBlockAddress(PCRTCDisplays.PCRTCDisplays[1].Block(), PCRTCDisplays.PCRTCDisplays[1].FBW, PCRTCDisplays.PCRTCDisplays[1].PSM, PCRTCDisplays.PCRTCDisplays[1].framebufferRect);
|
||||
const u32 out_end_bp = GSLocalMemory::GetEndBlockAddress(PCRTCDisplays.PCRTCDisplays[1].Block(), PCRTCDisplays.PCRTCDisplays[1].FBW, PCRTCDisplays.PCRTCDisplays[1].PSM, PCRTCDisplays.PCRTCDisplays[1].framebufferRect);
|
||||
|
||||
if (out_start_bp > end_bp || out_end_bp < start_bp)
|
||||
needs_flush[1] = false;
|
||||
}
|
||||
|
||||
if (PCRTCDisplays.PCRTCDisplays[0].enabled)
|
||||
{
|
||||
const u32 out_start_bp = GSLocalMemory::GetStartBlockAddress(PCRTCDisplays.PCRTCDisplays[0].Block(), PCRTCDisplays.PCRTCDisplays[0].FBW, PCRTCDisplays.PCRTCDisplays[0].PSM, PCRTCDisplays.PCRTCDisplays[0].framebufferRect);
|
||||
const u32 out_end_bp = GSLocalMemory::GetEndBlockAddress(PCRTCDisplays.PCRTCDisplays[0].Block(), PCRTCDisplays.PCRTCDisplays[0].FBW, PCRTCDisplays.PCRTCDisplays[0].PSM, PCRTCDisplays.PCRTCDisplays[0].framebufferRect);
|
||||
|
||||
if (out_start_bp > end_bp || out_end_bp < start_bp)
|
||||
needs_flush[0] = false;
|
||||
}
|
||||
|
||||
if (!needs_flush[0] && !needs_flush[1])
|
||||
return;
|
||||
}
|
||||
m_state_flush_reason = reason;
|
||||
|
||||
// Used to prompt the current draw that it's modifying its own CLUT.
|
||||
@@ -1674,7 +1708,8 @@ void GSState::FlushPrim()
|
||||
Console.Warning("GS: Possible invalid draw, Frame PSM %x ZPSM %x", m_context->FRAME.PSM, m_context->ZBUF.PSM);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Update scissor, it may have been modified by a previous draw
|
||||
m_env.CTXT[PRIM->CTXT].UpdateScissor();
|
||||
m_vt.Update(m_vertex.buff, m_index.buff, m_vertex.tail, m_index.tail, GSUtil::GetPrimClass(PRIM->PRIM));
|
||||
|
||||
// Texel coordinate rounding
|
||||
@@ -1723,6 +1758,7 @@ void GSState::FlushPrim()
|
||||
|
||||
// Skip draw if Z test is enabled, but set to fail all pixels.
|
||||
const bool skip_draw = (m_context->TEST.ZTE && m_context->TEST.ZTST == ZTST_NEVER);
|
||||
m_quad_check_valid = false;
|
||||
|
||||
if (!skip_draw)
|
||||
Draw();
|
||||
@@ -1936,10 +1972,10 @@ void GSState::Write(const u8* mem, int len)
|
||||
m_draw_transfers.push_back(new_transfer);
|
||||
}
|
||||
|
||||
GL_CACHE("Write! %u ... => 0x%x W:%d F:%s (DIR %d%d), dPos(%d %d) size(%d %d)", s_transfer_n,
|
||||
GL_CACHE("Write! %u ... => 0x%x W:%d F:%s (DIR %d%d), dPos(%d %d) size(%d %d) draw %d", s_transfer_n,
|
||||
blit.DBP, blit.DBW, psm_str(blit.DPSM),
|
||||
m_env.TRXPOS.DIRX, m_env.TRXPOS.DIRY,
|
||||
m_env.TRXPOS.DSAX, m_env.TRXPOS.DSAY, w, h);
|
||||
m_env.TRXPOS.DSAX, m_env.TRXPOS.DSAY, w, h, s_n);
|
||||
|
||||
if (len >= m_tr.total)
|
||||
{
|
||||
@@ -2794,8 +2830,10 @@ void GSState::GrowVertexBuffer()
|
||||
const u32 maxcount = std::max<u32>(m_vertex.maxcount * 3 / 2, 10000);
|
||||
|
||||
GSVertex* vertex = static_cast<GSVertex*>(_aligned_malloc(sizeof(GSVertex) * maxcount, 32));
|
||||
GSVertex* draw_vertex = static_cast<GSVertex*>(_aligned_malloc(sizeof(GSVertex) * maxcount, 32));
|
||||
// Worst case index list is a list of points with vs expansion, 6 indices per point
|
||||
u16* index = static_cast<u16*>(_aligned_malloc(sizeof(u16) * maxcount * 6, 32));
|
||||
u16* draw_index = static_cast<u16*>(_aligned_malloc(sizeof(u16) * maxcount * 6, 32));
|
||||
|
||||
if (!vertex || !index)
|
||||
{
|
||||
@@ -2821,16 +2859,38 @@ void GSState::GrowVertexBuffer()
|
||||
_aligned_free(m_index.buff);
|
||||
}
|
||||
|
||||
if (m_draw_vertex.buff)
|
||||
{
|
||||
std::memcpy(draw_vertex, m_draw_vertex.buff, sizeof(GSVertex) * m_vertex.tail);
|
||||
|
||||
_aligned_free(m_draw_vertex.buff);
|
||||
}
|
||||
|
||||
if (m_draw_index.buff)
|
||||
{
|
||||
std::memcpy(draw_index, m_draw_index.buff, sizeof(u16) * m_index.tail);
|
||||
|
||||
_aligned_free(m_draw_index.buff);
|
||||
}
|
||||
|
||||
m_draw_vertex.buff = draw_vertex;
|
||||
m_draw_index.buff = draw_index;
|
||||
m_vertex.buff = vertex;
|
||||
m_vertex.maxcount = maxcount - 3; // -3 to have some space at the end of the buffer before DrawingKick can grow it
|
||||
m_index.buff = index;
|
||||
}
|
||||
|
||||
bool GSState::TrianglesAreQuads(bool shuffle_check) const
|
||||
bool GSState::TrianglesAreQuads(bool shuffle_check)
|
||||
{
|
||||
// If this is a quad, there should only be two distinct values for both X and Y, which
|
||||
// also happen to be the minimum/maximum bounds of the primitive.
|
||||
if (!shuffle_check && m_quad_check_valid)
|
||||
return m_are_quads;
|
||||
|
||||
const GSVertex* const v = m_vertex.buff;
|
||||
m_are_quads = false;
|
||||
m_quad_check_valid = !shuffle_check;
|
||||
|
||||
for (u32 idx = 0; idx < m_index.tail; idx += 6)
|
||||
{
|
||||
const u16* const i = m_index.buff + idx;
|
||||
@@ -2839,29 +2899,65 @@ bool GSState::TrianglesAreQuads(bool shuffle_check) const
|
||||
if (idx > 0)
|
||||
{
|
||||
const u16* const prev_tri= m_index.buff + (idx - 3);
|
||||
GIFRegXYZ vert = v[i[0]].XYZ;
|
||||
GIFRegXYZ last_vert = v[i[2]].XYZ;
|
||||
GIFRegXYZ new_verts[3] = {v[i[0]].XYZ, v[i[1]].XYZ, v[i[2]].XYZ};
|
||||
|
||||
if (shuffle_check)
|
||||
{
|
||||
vert.X -= 8 << 4;
|
||||
last_vert.X -= 8 << 4;
|
||||
new_verts[0].X -= 8 << 4;
|
||||
new_verts[1].X -= 8 << 4;
|
||||
new_verts[2].X -= 8 << 4;
|
||||
}
|
||||
u32 match_vert_count = 0;
|
||||
|
||||
if (vert != m_vertex.buff[prev_tri[0]].XYZ && vert != m_vertex.buff[prev_tri[1]].XYZ && vert != m_vertex.buff[prev_tri[2]].XYZ &&
|
||||
last_vert != m_vertex.buff[prev_tri[0]].XYZ && last_vert != m_vertex.buff[prev_tri[1]].XYZ && last_vert != m_vertex.buff[prev_tri[2]].XYZ)
|
||||
if (!(new_verts[0] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[0] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[0] != m_vertex.buff[prev_tri[2]].XYZ))
|
||||
match_vert_count++;
|
||||
if (!(new_verts[1] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[1] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[1] != m_vertex.buff[prev_tri[2]].XYZ))
|
||||
match_vert_count++;
|
||||
if (!(new_verts[2] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[2] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[2] != m_vertex.buff[prev_tri[2]].XYZ))
|
||||
match_vert_count++;
|
||||
|
||||
if (match_vert_count != 2)
|
||||
return false;
|
||||
}
|
||||
// Degenerate triangles should've been culled already, so we can check indices.
|
||||
u32 extra_verts = 0;
|
||||
for (u32 j = 3; j < 6; j++)
|
||||
// This doesn't really make much sense when it's a triangle strip as it will always have 1 extra vert, so check for distinct values for them.
|
||||
if (PRIM->PRIM != GS_TRIANGLESTRIP)
|
||||
{
|
||||
const u16 tri2_idx = i[j];
|
||||
if (tri2_idx != i[0] && tri2_idx != i[1] && tri2_idx != i[2])
|
||||
extra_verts++;
|
||||
u32 extra_verts = 0;
|
||||
for (u32 j = 3; j < 6; j++)
|
||||
{
|
||||
const u16 tri2_idx = i[j];
|
||||
if (tri2_idx != i[0] && tri2_idx != i[1] && tri2_idx != i[2])
|
||||
extra_verts++;
|
||||
}
|
||||
if (extra_verts == 1)
|
||||
continue;
|
||||
}
|
||||
else if (m_index.tail == 6)
|
||||
{
|
||||
const int first_X = m_vertex.buff[m_index.buff[0]].XYZ.X;
|
||||
const int first_Y = m_vertex.buff[m_index.buff[0]].XYZ.Y;
|
||||
const int second_X = m_vertex.buff[m_index.buff[1]].XYZ.X;
|
||||
const int second_Y = m_vertex.buff[m_index.buff[1]].XYZ.Y;
|
||||
const int third_X = m_vertex.buff[m_index.buff[2]].XYZ.X;
|
||||
const int third_Y = m_vertex.buff[m_index.buff[2]].XYZ.Y;
|
||||
const int new_X = m_vertex.buff[m_index.buff[5]].XYZ.X;
|
||||
const int new_Y = m_vertex.buff[m_index.buff[5]].XYZ.Y;
|
||||
|
||||
const int middle_Y = (second_Y >= third_Y) ? (third_Y + ((second_Y - third_Y) / 2)) : (second_Y + ((third_Y - second_Y) / 2));
|
||||
const int middle_X = (second_X >= third_X) ? (third_X + ((second_X - third_X) / 2)) : (second_X + ((third_X - second_X) / 2));
|
||||
const bool first_lt_X = first_X <= middle_X;
|
||||
const bool first_lt_Y = first_Y <= middle_Y;
|
||||
const bool new_lt_X = new_X <= middle_X;
|
||||
const bool new_lt_Y = new_Y <= middle_Y;
|
||||
|
||||
// Check if verts are on the same side. Not totally accurate, but should be good enough.
|
||||
if (first_lt_X == new_lt_X && new_lt_Y == first_lt_Y)
|
||||
return false;
|
||||
|
||||
m_prim_overlap = PRIM_OVERLAP_NO;
|
||||
break;
|
||||
}
|
||||
if (extra_verts == 1)
|
||||
continue;
|
||||
|
||||
// As a fallback, they might've used different vertices with a tri list, not strip.
|
||||
// Note that this won't work unless the quad is axis-aligned.
|
||||
@@ -2889,6 +2985,7 @@ bool GSState::TrianglesAreQuads(bool shuffle_check) const
|
||||
}
|
||||
}
|
||||
|
||||
m_are_quads = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -3051,6 +3148,46 @@ bool GSState::SpriteDrawWithoutGaps()
|
||||
return true;
|
||||
}
|
||||
|
||||
// Assume it's small sprites. NFSMW and a few other games draw 32x32 sprites in rows to fill the screen.
|
||||
if (((first_dpY + 8) >> 4) == GSLocalMemory::m_psm[m_context->FRAME.PSM].pgs.y)
|
||||
{
|
||||
int lastXEdge = std::max(v[1].XYZ.X, v[0].XYZ.X);
|
||||
int lastYEdge = std::max(v[1].XYZ.Y, v[0].XYZ.Y);
|
||||
for (u32 i = 2; i < m_vertex.next; i += 2)
|
||||
{
|
||||
const int dpY = v[i + 1].XYZ.Y - v[i].XYZ.Y;
|
||||
|
||||
if (first_dpY != dpY)
|
||||
return false;
|
||||
|
||||
const int newYStart = std::min(v[i + 1].XYZ.Y, v[i].XYZ.Y);
|
||||
const int newXEdge = std::max(v[i + 1].XYZ.X, v[i].XYZ.X);
|
||||
if (lastYEdge != newYStart)
|
||||
{
|
||||
if (newYStart != static_cast<int>(m_context->XYOFFSET.OFY))
|
||||
return false;
|
||||
|
||||
const int newXStart = std::min(v[i + 1].XYZ.X, v[i].XYZ.X);
|
||||
|
||||
if (newXStart != lastXEdge)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
const int dpX = v[i + 1].XYZ.X - v[i].XYZ.X;
|
||||
if (first_dpX != dpX || lastXEdge != newXEdge)
|
||||
return false;
|
||||
}
|
||||
|
||||
lastXEdge = newXEdge;
|
||||
lastYEdge = std::max(v[i + 1].XYZ.Y, v[i].XYZ.Y);
|
||||
}
|
||||
|
||||
m_prim_overlap = PRIM_OVERLAP_NO;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -3069,7 +3206,7 @@ void GSState::CalculatePrimitiveCoversWithoutGaps()
|
||||
}
|
||||
else if (m_vt.m_primclass == GS_TRIANGLE_CLASS)
|
||||
{
|
||||
m_primitive_covers_without_gaps = (m_index.tail == 6 && TrianglesAreQuads()) ? m_primitive_covers_without_gaps : GapsFound;
|
||||
m_primitive_covers_without_gaps = ((m_index.tail == 6 || ((m_index.tail % 6) == 0 && m_primitive_covers_without_gaps == FullCover)) && TrianglesAreQuads()) ? m_primitive_covers_without_gaps : GapsFound;
|
||||
return;
|
||||
}
|
||||
else if (m_vt.m_primclass != GS_SPRITE_CLASS)
|
||||
@@ -3094,6 +3231,16 @@ __forceinline bool GSState::IsAutoFlushDraw(u32 prim)
|
||||
if (!(GSUtil::GetChannelMask(m_context->TEX0.PSM) & GSUtil::GetChannelMask(m_context->FRAME.PSM, m_context->FRAME.FBMSK | ~(GSLocalMemory::m_psm[m_context->FRAME.PSM].fmsk))))
|
||||
return false;
|
||||
|
||||
// Try to detect shuffles, because these will not autoflush, they by design clash.
|
||||
if (GSLocalMemory::m_psm[m_context->FRAME.PSM].bpp == 16 && GSLocalMemory::m_psm[m_context->TEX0.PSM].bpp == 16)
|
||||
{
|
||||
// Pretty confident here...
|
||||
GSVertex* buffer = &m_vertex.buff[0];
|
||||
const bool const_spacing = std::abs(buffer[m_index.buff[0]].U - buffer[m_index.buff[0]].XYZ.X) == std::abs(m_v.U - m_v.XYZ.X) && std::abs(buffer[m_index.buff[1]].XYZ.X - buffer[m_index.buff[0]].XYZ.X) <= 256; // Lequal to 16 pixels apart.
|
||||
|
||||
if (const_spacing)
|
||||
return false;
|
||||
}
|
||||
const u32 frame_mask = GSLocalMemory::m_psm[m_context->FRAME.PSM].fmsk;
|
||||
const bool frame_hit = m_context->FRAME.Block() == m_context->TEX0.TBP0 && !(m_context->TEST.ATE && m_context->TEST.ATST == 0 && m_context->TEST.AFAIL == 2) && ((m_context->FRAME.FBMSK & frame_mask) != frame_mask);
|
||||
// There's a strange behaviour we need to test on a PS2 here, if the FRAME is a Z format, like Powerdrome something swaps over, and it seems Alpha Fail of "FB Only" writes to the Z.. it's odd.
|
||||
@@ -3859,7 +4006,8 @@ GSState::TextureMinMaxResult GSState::GetTextureMinMax(GIFRegTEX0 TEX0, GIFRegCL
|
||||
const GSVector2 grad(uv_range / pos_range);
|
||||
// Adjust texture range when sprites get scissor clipped. Since we linearly interpolate, this
|
||||
// optimization doesn't work when perspective correction is enabled.
|
||||
if (m_vt.m_primclass == GS_SPRITE_CLASS && PRIM->FST == 1 && m_primitive_covers_without_gaps != NoGapsType::GapsFound)
|
||||
// Allowing for quads when the gradiant is 1. It's not guaranteed (would need to check the grandient on each vector), but should be close enough.
|
||||
if (m_primitive_covers_without_gaps != NoGapsType::GapsFound && (m_vt.m_primclass == GS_SPRITE_CLASS || (m_vt.m_primclass == GS_TRIANGLE_CLASS && grad.x == 1.0f && grad.y == 1.0f && TrianglesAreQuads(false))))
|
||||
{
|
||||
// When coordinates are fractional, GS appears to draw to the right/bottom (effectively
|
||||
// taking the ceiling), not to the top/left (taking the floor).
|
||||
@@ -3870,11 +4018,24 @@ GSState::TextureMinMaxResult GSState::GetTextureMinMax(GIFRegTEX0 TEX0, GIFRegCL
|
||||
|
||||
const GSVertex* vert_first = &m_vertex.buff[m_index.buff[0]];
|
||||
const GSVertex* vert_second = &m_vertex.buff[m_index.buff[1]];
|
||||
const GSVertex* vert_third = &m_vertex.buff[m_index.buff[2]];
|
||||
|
||||
GSVector4 new_st = st;
|
||||
bool u_forward_check = false;
|
||||
bool x_forward_check = false;
|
||||
if (m_vt.m_primclass == GS_TRIANGLE_CLASS)
|
||||
{
|
||||
u_forward_check = PRIM->FST ? ((vert_first->U < vert_second->U) || (vert_first->U < vert_third->U)) : (((vert_first->ST.S / vert_first->RGBAQ.Q) < (vert_second->ST.S / vert_second->RGBAQ.Q)) || ((vert_first->ST.S / vert_first->RGBAQ.Q) < (vert_third->ST.S / vert_third->RGBAQ.Q)));
|
||||
x_forward_check = (vert_first->XYZ.X < vert_second->XYZ.X) || (vert_first->XYZ.X < vert_third->XYZ.X);
|
||||
}
|
||||
else
|
||||
{
|
||||
u_forward_check = PRIM->FST ? (vert_first->U < vert_second->U) : ((vert_first->ST.T / vert_first->RGBAQ.Q) < (vert_second->ST.T / vert_first->RGBAQ.Q));
|
||||
x_forward_check = vert_first->XYZ.Y < vert_second->XYZ.Y;
|
||||
}
|
||||
// Check if the UV coords are going in a different direction to the verts, if they match direction, no need to swap
|
||||
const bool u_forward = vert_first->U < vert_second->U;
|
||||
const bool x_forward = vert_first->XYZ.X < vert_second->XYZ.X;
|
||||
const bool u_forward = u_forward_check;
|
||||
const bool x_forward = x_forward_check;
|
||||
const bool swap_x = u_forward != x_forward;
|
||||
|
||||
if (int_rc.left < scissored_rc.left)
|
||||
@@ -3897,9 +4058,20 @@ GSState::TextureMinMaxResult GSState::GetTextureMinMax(GIFRegTEX0 TEX0, GIFRegCL
|
||||
st.x = new_st.x;
|
||||
st.z = new_st.z;
|
||||
}
|
||||
|
||||
const bool v_forward = vert_first->V < vert_second->V;
|
||||
const bool y_forward = vert_first->XYZ.Y < vert_second->XYZ.Y;
|
||||
bool v_forward_check = false;
|
||||
bool y_forward_check = false;
|
||||
if (m_vt.m_primclass == GS_TRIANGLE_CLASS)
|
||||
{
|
||||
v_forward_check = PRIM->FST ? ((vert_first->V < vert_second->V) || (vert_first->V < vert_third->V)) : (((vert_first->ST.T / vert_first->RGBAQ.Q) < (vert_second->ST.T / vert_second->RGBAQ.Q)) || ((vert_first->ST.T / vert_first->RGBAQ.Q) < (vert_third->ST.T / vert_third->RGBAQ.Q)));
|
||||
y_forward_check = (vert_first->XYZ.Y < vert_second->XYZ.Y) || (vert_first->XYZ.Y < vert_third->XYZ.Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
v_forward_check = PRIM->FST ? (vert_first->V < vert_second->V) : ((vert_first->ST.T / vert_first->RGBAQ.Q) < (vert_second->ST.T / vert_first->RGBAQ.Q));
|
||||
y_forward_check = vert_first->XYZ.Y < vert_second->XYZ.Y;
|
||||
}
|
||||
const bool v_forward = v_forward_check;
|
||||
const bool y_forward = y_forward_check;
|
||||
const bool swap_y = v_forward != y_forward;
|
||||
|
||||
if (int_rc.top < scissored_rc.top)
|
||||
@@ -4409,7 +4581,7 @@ bool GSState::GSTransferBuffer::Update(int tw, int th, int bpp, int& len)
|
||||
{
|
||||
if (len > packet_size)
|
||||
{
|
||||
#if defined(PCSX2_DEVBUILD) || defined(_DEBUG)
|
||||
#if defined(_DEBUG)
|
||||
Console.Warning("GS transfer buffer overflow len %d remaining %d, tex_size %d tw %d th %d bpp %d", len, remaining, tex_size, tw, th, bpp);
|
||||
#endif
|
||||
}
|
||||
@@ -4669,10 +4841,16 @@ GSVector2i GSState::GSPCRTCRegs::GetFramebufferSize(int display)
|
||||
void GSState::GSPCRTCRegs::SetRects(int display, GSRegDISPLAY displayReg, GSRegDISPFB framebufferReg)
|
||||
{
|
||||
// Save framebuffer information first, while we're here.
|
||||
PCRTCDisplays[display].prevFramebufferReg.FBP = PCRTCDisplays[display].FBP;
|
||||
PCRTCDisplays[display].prevFramebufferReg.FBW = PCRTCDisplays[display].FBW;
|
||||
PCRTCDisplays[display].prevFramebufferReg.PSM = PCRTCDisplays[display].PSM;
|
||||
PCRTCDisplays[display].prevFramebufferReg.DBX = PCRTCDisplays[display].DBX;
|
||||
PCRTCDisplays[display].prevFramebufferReg.DBY = PCRTCDisplays[display].DBY;
|
||||
PCRTCDisplays[display].FBP = framebufferReg.FBP;
|
||||
PCRTCDisplays[display].FBW = framebufferReg.FBW;
|
||||
PCRTCDisplays[display].PSM = framebufferReg.PSM;
|
||||
PCRTCDisplays[display].prevFramebufferReg = framebufferReg;
|
||||
PCRTCDisplays[display].DBX = framebufferReg.DBX;
|
||||
PCRTCDisplays[display].DBY = framebufferReg.DBY;
|
||||
// Probably not really enabled but will cause a mess.
|
||||
// Q-Ball Billiards enables both circuits but doesn't set one of them up.
|
||||
if (PCRTCDisplays[display].FBW == 0 && displayReg.DW == 0 && displayReg.DH == 0 && displayReg.MAGH == 0)
|
||||
|
||||
@@ -145,6 +145,21 @@ protected:
|
||||
u32 tail;
|
||||
} m_index = {};
|
||||
|
||||
struct
|
||||
{
|
||||
GSVertex* buff;
|
||||
u32 head, tail, next, maxcount; // head: first vertex, tail: last vertex + 1, next: last indexed + 1
|
||||
u32 xy_tail;
|
||||
GSVector4i xy[4];
|
||||
GSVector4i xyhead;
|
||||
} m_draw_vertex = {};
|
||||
|
||||
struct
|
||||
{
|
||||
u16* buff;
|
||||
u32 tail;
|
||||
} m_draw_index = {};
|
||||
|
||||
void UpdateContext();
|
||||
void UpdateScissor();
|
||||
|
||||
@@ -219,11 +234,19 @@ public:
|
||||
GSVector4i temp_draw_rect = {};
|
||||
std::unique_ptr<GSDumpBase> m_dump;
|
||||
bool m_scissor_invalid = false;
|
||||
bool m_quad_check_valid = false;
|
||||
bool m_are_quads = false;
|
||||
bool m_nativeres = false;
|
||||
bool m_mipmap = false;
|
||||
bool m_texflush_flag = false;
|
||||
bool m_isPackedUV_HackFlag = false;
|
||||
bool m_channel_shuffle = false;
|
||||
bool m_using_temp_z = false;
|
||||
bool m_temp_z_full_copy = false;
|
||||
bool m_in_target_draw = false;
|
||||
bool m_channel_shuffle_abort = false;
|
||||
|
||||
u32 m_target_offset = 0;
|
||||
u8 m_scanmask_used = 0;
|
||||
u32 m_dirty_gs_regs = 0;
|
||||
int m_backed_up_ctx = 0;
|
||||
@@ -302,6 +325,8 @@ public:
|
||||
int FBP;
|
||||
int FBW;
|
||||
int PSM;
|
||||
int DBY;
|
||||
int DBX;
|
||||
GSRegDISPFB prevFramebufferReg;
|
||||
GSVector2i prevDisplayOffset;
|
||||
GSVector2i displayOffset;
|
||||
@@ -416,7 +441,7 @@ public:
|
||||
|
||||
void DumpVertices(const std::string& filename);
|
||||
|
||||
bool TrianglesAreQuads(bool shuffle_check = false) const;
|
||||
bool TrianglesAreQuads(bool shuffle_check = false);
|
||||
PRIM_OVERLAP PrimitiveOverlap();
|
||||
bool SpriteDrawWithoutGaps();
|
||||
void CalculatePrimitiveCoversWithoutGaps();
|
||||
|
||||
@@ -1599,6 +1599,11 @@ public:
|
||||
return loadh(&v);
|
||||
}
|
||||
|
||||
__forceinline static GSVector4i loadl(const GSVector2i& v)
|
||||
{
|
||||
return loadl(&v);
|
||||
}
|
||||
|
||||
__forceinline static GSVector4i load(const void* pl, const void* ph)
|
||||
{
|
||||
return loadh(ph, loadl(pl));
|
||||
|
||||