Compare commits

...

40 Commits

Author SHA1 Message Date
Ty Lamontagne
97c098b1ff QT: Adjust mouse grab help text 2025-02-19 11:18:17 -05:00
Ty
e252cb6643 HostSys: Implement platform Specific mouse lock osx/windows/x11 2025-02-19 11:18:17 -05:00
Gonzalosilvalde
75c0236e1e Qt: Add mouse grab/lock feature when PCSX2 is in focus 2025-02-19 11:18:17 -05:00
KamFretoZ
9c4a98bc25 Qt: Add AMOLED Theme 2025-02-19 10:34:44 -05:00
GovanifY
9cba11cde5 appimage: revert #11667 , switch back to upstream appimagetool 2025-02-19 01:44:18 +01:00
GovanifY
fac5512b04 flatpak: misc additions to the metainfo 2025-02-19 01:44:18 +01:00
GovanifY
ed9bf05971 bin: update icons to be centered 2025-02-18 20:44:43 +01:00
GovanifY
19d0f3bdc5 flatpak: add branding colors 2025-02-18 20:44:43 +01:00
GovanifY
2abe53de43 flatpak: remove wild caps in summary 2025-02-18 20:44:43 +01:00
GovanifY
37a25750d7 flatpak: update default screenshots
This fixes a few issues in our flathub review report
2025-02-18 20:44:43 +01:00
lightningterror
d3e288447f GS/HW: Cleanup gl and vk shaders.
gl: Rename fetch_rt to sample_from_rt to match vk shaders, remove old atst call.

vk: Make sure shuffle values have correct unsigned type.
2025-02-17 21:27:34 +01:00
Ziemas
4a44d2668c SDL Audio: Set app name hint 2025-02-16 16:41:51 -05:00
Ty
752b1420a3 CI: Increase flatpak cron job timeout to 3 hours instead of 1
[ci skip]
2025-02-16 16:17:11 -05:00
PCSX2 Bot
71705fc91f [ci skip] Qt: Update Base Translation. 2025-02-16 22:12:45 +01:00
Ty
645efc7520 CI: Skip macos signing on forks 2025-02-16 12:03:14 -05:00
Ty
b6ee0e5219 CI: Bump our ccache size from 100M to 500M 2025-02-16 12:03:14 -05:00
Ty
7acf32debc CI: Sign and notarize our macos binaries 2025-02-16 12:03:14 -05:00
Ty
13397f68a3 CI: Update the node version for announce-release try #2 2025-02-16 11:39:54 -05:00
Ty
79250722d6 CI: Update the node version for announce-release 2025-02-16 11:30:47 -05:00
Ty
04b8748a8f CI: Update the announce-release script to use node-fetch (#12310) 2025-02-15 15:14:28 -05:00
dependabot[bot]
2dab8053ea CI: Bump deps in announce-release (#12308)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 11:03:07 -05:00
refractionpcsx2
f8bab2e465 Build/VS: Fix change in latest VS 2022 update with std::chrono
For more information see: https://learn.microsoft.com/en-us/cpp/overview/what-s-new-for-visual-cpp-in-visual-studio?view=msvc-170#:~:text=Moved%20system_clock%2C%20high_resolution_clock%2C%20and%20chrono_literals%20from%20a%20commonly%20included%20internal%20header%20to%20%3Cchrono%3E.%20If%20you%20see%20compiler%20errors%20that%20types%20like%20system_clock%20or%20user%2Ddefined%20literals%20like%201729ms%20aren%27t%20recognized%2C%20include%20%3Cchrono%3E.
2025-02-14 02:40:24 +00:00
TJnotJT
46221a8500 Tools: Fix typos in GS dump runner help. 2025-02-12 17:40:49 -05:00
TJnotJT
8b0e61af8c Tools: Remove debug preprocessor check around dumping of HW renderer frames. 2025-02-12 17:40:49 -05:00
TJnotJT
2b0a78811a Tools: Add additional options for dumping in GS runner. Other formatting fixes. 2025-02-12 17:40:49 -05:00
TheTechnician27
5798cd7176 Qt: End memcard conversion progress at 100% instead of 99% 2025-02-12 17:40:17 -05:00
JordanTheToaster
5c25637381 GameDB: Knights of the Temple 2 fixes 2025-02-12 17:39:56 -05:00
TheLastRar
8316228771 iR5900: Reset manual protection counters 2025-02-12 12:12:05 -05:00
JordanTheToaster
695250155e GameDB: Even more fixes 2025-02-12 12:09:05 -05:00
PCSX2 Bot
545e606c11 [ci skip] PAD: Update to latest controller database. 2025-02-10 17:26:03 +01:00
refractionpcsx2
52771fdb17 GS/HW: Add CRC fixes for DT Carnage/Racer/Axel Impact 2025-02-10 15:06:29 +00:00
JordanTheToaster
de631a1052 PerformanceMetrics: Increase update rate
Increases update rate of OSD stats from 0.5 per poll to 0.25 seconds per poll.
2025-02-09 12:29:54 -05:00
JordanTheToaster
605398db67 GameDB: Various fixes 2025-02-09 12:29:54 -05:00
TheLastRar
407c989860 Vif: Fixes to non-volatile SSE backup and restore logic 2025-02-09 12:28:04 -05:00
lightningterror
9b4b112a97 GS/HW: Adjust max valid tex size.
Account for index 0.
2025-02-08 23:56:42 +01:00
PCSX2 Bot
865b75bcbb [ci skip] Qt: Update Base Translation. 2025-02-07 19:04:10 -05:00
Ty
795b0813cc Debugger: Only validate memory search value when needed 2025-02-07 13:40:13 -05:00
Ty
3e1f2b8b9d Debugger: Support 'unknown initial value' search types 2025-02-07 13:40:13 -05:00
Ty
1f0d6f0ac7 VMManager: Avoid use-after-move conditions 2025-02-05 10:25:24 -05:00
JordanTheToaster
4ab4f4a67c GameDB: Various fixes 2025-02-04 14:58:40 -05:00
55 changed files with 1598 additions and 485 deletions

View File

@@ -10,6 +10,7 @@ jobs:
if: github.repository == 'PCSX2/pcsx2'
name: "Check if release is needed"
runs-on: ubuntu-latest
timeout-minutes: 180
outputs:
PCSX2_RELEASE: ${{ steps.getinfo.outputs.PCSX2_RELEASE }}
FLATHUB_RELEASE: ${{ steps.getinfo.outputs.FLATHUB_RELEASE }}

View File

@@ -55,7 +55,7 @@ jobs:
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_COMPRESS: true
CCACHE_COMPRESSLEVEL: 9
CCACHE_MAXSIZE: 100M
CCACHE_MAXSIZE: 500M
steps:
- name: Checkout Repository

View File

@@ -25,6 +25,10 @@ on:
required: false
type: boolean
default: false
sign_and_notarize:
required: false
type: boolean
default: false
jobs:
build_macos:
@@ -38,7 +42,9 @@ jobs:
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_COMPRESS: true
CCACHE_COMPRESSLEVEL: 9
CCACHE_MAXSIZE: 100M
CCACHE_MAXSIZE: 500M
# Only way to use a secret in an if statement
SIGN_KEY: ${{ secrets.APPLE_SIGN_P12_B64 }}
steps:
- name: Checkout Repository
@@ -143,6 +149,38 @@ jobs:
run: make -j$(getconf _NPROCESSORS_ONLN) unittests
- name: Prepare Build Artifacts
run: |
mv build/pcsx2*/PCSX2.app PCSX2.app
- name: Pull the Signing Keys and Notarization Credentials
if: ${{ inputs.sign_and_notarize == true && env.SIGN_KEY }}
run: |
echo "${{ secrets.APPLE_SIGN_P12_B64 }}" | base64 -d > cert.p12
echo "${{ secrets.APPLE_APPSTORECONNECT_CFG }}" | base64 -d > key.json
- name: Sign the Application
if: ${{ inputs.sign_and_notarize == true && env.SIGN_KEY }}
uses: indygreg/apple-code-sign-action@v1.1
with:
input_path: 'PCSX2.app'
p12_file: cert.p12
p12_password: "${{ secrets.APPLE_SIGN_P12_PASS }}"
sign_args: |
--for-notarization
--code-signature-flags=runtime
--entitlements-xml-file=pcsx2/Resources/PCSX2.entitlements
notarize: true
# max_wait_seconds is only present on my fork located at F0bes/apple-code-sign-action@demo4
# If we are timing out we should switch to the newest upstream (if I get it upstreamed)
# or use my fork.
# max_wait_seconds: '2000'
staple: true
# Generated using rcodesign
# Despite what the docs say, I found that this file is required and I had 0 luck
# passing the issuer id, key, etc through arguments.
app_store_connect_api_key_json_file: 'key.json'
- name: Zip Build Artifacts
run: |
TAG="$(git tag --points-at HEAD)"
if [ -z "$TAG" ]; then
@@ -150,7 +188,7 @@ jobs:
else
APPNAME="PCSX2-$TAG"
fi
mv build/pcsx2*/PCSX2.app "$APPNAME.app"
mv PCSX2.app "$APPNAME.app"
tar --options xz:compression-level=9 -cvJf "${{ steps.artifact-metadata.outputs.artifact-name }}.tar.xz" "$APPNAME.app"
mkdir ci-artifacts
cp "${{ steps.artifact-metadata.outputs.artifact-name }}.tar.xz" ci-artifacts/macOS.tar.xz

View File

@@ -16,4 +16,5 @@ jobs:
with:
jobName: "MacOS Build"
artifactPrefixName: "PCSX2-macos-Qt"
sign_and_notarize: true # If we find that notarization takes a long time we should disable that on PR builds
secrets: inherit

View File

@@ -148,6 +148,7 @@ jobs:
artifactPrefixName: "PCSX2-macos-Qt"
fetchTags: true
stableBuild: ${{ github.event_name == 'workflow_dispatch' && inputs.is_prelease == 'false' }}
sign_and_notarize: true
secrets: inherit
# Upload the Artifacts
@@ -204,7 +205,7 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: 16
node-version: 22
- name: Announce Release
env:

View File

@@ -63,9 +63,9 @@ declare -a REMOVE_LIBS=(
set -e
LINUXDEPLOY=./linuxdeploy-x86_64
LINUXDEPLOY_PLUGIN_QT=./linuxdeploy-plugin-qt-x86_64
APPIMAGETOOL=./appimagetool-x86_64
LINUXDEPLOY=./linuxdeploy-x86_64.AppImage
LINUXDEPLOY_PLUGIN_QT=./linuxdeploy-plugin-qt-x86_64.AppImage
APPIMAGETOOL=./appimagetool-x86_64.AppImage
PATCHELF=patchelf
if [ ! -f "$LINUXDEPLOY" ]; then
@@ -78,11 +78,8 @@ if [ ! -f "$LINUXDEPLOY_PLUGIN_QT" ]; then
chmod +x "$LINUXDEPLOY_PLUGIN_QT"
fi
# Using go-appimage
# Backported from https://github.com/stenzek/duckstation/pull/3251
if [ ! -f "$APPIMAGETOOL" ]; then
APPIMAGETOOLURL=$(wget -q https://api.github.com/repos/probonopd/go-appimage/releases -O - | sed 's/[()",{} ]/\n/g' | grep -o 'https.*continuous.*tool.*86_64.*mage$' | head -1)
"$PCSX2DIR/tools/retry.sh" wget -O "$APPIMAGETOOL" "$APPIMAGETOOLURL"
"$PCSX2DIR/tools/retry.sh" wget -O "$APPIMAGETOOL" https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x "$APPIMAGETOOL"
fi
@@ -213,5 +210,4 @@ if [[ "${GIT_VERSION}" == "" ]]; then
fi
rm -f "$NAME.AppImage"
ARCH=x86_64 VERSION="${GIT_VERSION}" "$APPIMAGETOOL" -s "$OUTDIR" && mv ./*.AppImage "$NAME.AppImage"
$APPIMAGETOOL -v "$OUTDIR" "$NAME.AppImage"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 2.3 MiB

View File

@@ -6,17 +6,21 @@
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0+</project_license>
<name>PCSX2</name>
<developer_name>PCSX2</developer_name>
<summary>PlayStation 2 Emulator</summary>
<developer id="net.pcsx2">
<name>PCSX2 Team</name>
</developer>
<summary>PlayStation 2 emulator</summary>
<description>
<p>PCSX2 is a free and open-source PlayStation 2 (PS2) emulator. Its purpose is to emulate the PS2's hardware, using a combination of MIPS CPU Interpreters, Recompilers, and a Virtual Machine which manages hardware states and PS2 system memory. This allows you to play PS2 games on your PC, with many additional features and benefits.</p>
<p>PlayStation 2 and PS2 are registered trademarks of Sony Interactive Entertainment. This application is not affiliated in any way with Sony Interactive Entertainment.</p>
</description>
<url type="homepage">https://pcsx2.net/</url>
<url type="vcs-browser">https://github.com/PCSX2/pcsx2</url>
<url type="bugtracker">https://github.com/PCSX2/pcsx2/issues</url>
<url type="donation">https://github.com/sponsors/PCSX2</url>
<url type="faq">https://pcsx2.net/docs/</url>
<url type="help">https://pcsx2.net/discord</url>
<url type="contribute">https://github.com/PCSX2/pcsx2/blob/master/.github/CONTRIBUTING.md</url>
<url type="translate">https://crowdin.com/project/pcsx2-emulator</url>
<url type="contact">https://mastodon.social/@PCSX2</url>
<screenshots>
@@ -37,6 +41,26 @@
</caption>
</screenshot>
</screenshots>
<categories>
<category>Game</category>
<category>Emulator</category>
</categories>
<branding>
<color type="primary" scheme_preference="light">#3584e4</color>
<color type="primary" scheme_preference="dark">#241f31</color>
</branding>
<supports>
<control>keyboard</control>
<control>pointing</control>
<internet>offline-only</internet>
</supports>
<recommends>
<control>gamepad</control>
<memory>8192</memory>
</recommends>
<requires>
<display_length compare="ge">768</display_length>
</requires>
<content_rating type="oars-1.1"/>
<update_contact>pcsx2_AT_pcsx2.net</update_contact>
<releases>

View File

@@ -10,8 +10,8 @@
"license": "ISC",
"dependencies": {
"@octokit/plugin-retry": "^3.0.9",
"@octokit/plugin-throttling": "^3.5.2",
"@octokit/rest": "^18.12.0",
"@octokit/plugin-throttling": "^9.4.0",
"@octokit/rest": "^21.1.1",
"discord.js": "^13.2.0"
}
},
@@ -61,45 +61,102 @@
}
},
"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==",
"dependencies": {
"@octokit/types": "^6.0.3"
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
"integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
"license": "MIT",
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/core": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.4.tgz",
"integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==",
"license": "MIT",
"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"
"@octokit/auth-token": "^5.0.0",
"@octokit/graphql": "^8.1.2",
"@octokit/request": "^9.2.1",
"@octokit/request-error": "^6.1.7",
"@octokit/types": "^13.6.2",
"before-after-hook": "^3.0.2",
"universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/core/node_modules/@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
"license": "MIT"
},
"node_modules/@octokit/core/node_modules/@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^23.0.1"
}
},
"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==",
"version": "10.1.3",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.3.tgz",
"integrity": "sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.0.3",
"is-plain-object": "^5.0.0",
"universal-user-agent": "^6.0.0"
"@octokit/types": "^13.6.2",
"universal-user-agent": "^7.0.2"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
"license": "MIT"
},
"node_modules/@octokit/endpoint/node_modules/@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^23.0.1"
}
},
"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==",
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.1.tgz",
"integrity": "sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==",
"license": "MIT",
"dependencies": {
"@octokit/request": "^5.6.0",
"@octokit/types": "^6.0.3",
"universal-user-agent": "^6.0.0"
"@octokit/request": "^9.2.2",
"@octokit/types": "^13.8.0",
"universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
"license": "MIT"
},
"node_modules/@octokit/graphql/node_modules/@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^23.0.1"
}
},
"node_modules/@octokit/openapi-types": {
@@ -108,28 +165,75 @@
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
},
"node_modules/@octokit/plugin-paginate-rest": {
"version": "2.16.9",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz",
"integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==",
"version": "11.4.2",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.2.tgz",
"integrity": "sha512-BXJ7XPCTDXFF+wxcg/zscfgw2O/iDPtNSkwwR1W1W5c4Mb3zav/M2XvxQ23nVmKj7jpweB4g8viMeCQdm7LMVA==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.33.0"
"@octokit/types": "^13.7.0"
},
"engines": {
"node": ">= 18"
},
"peerDependencies": {
"@octokit/core": ">=6"
}
},
"node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
"license": "MIT"
},
"node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^23.0.1"
}
},
"node_modules/@octokit/plugin-request-log": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
"integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
"integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
"license": "MIT",
"engines": {
"node": ">= 18"
},
"peerDependencies": {
"@octokit/core": ">=3"
"@octokit/core": ">=6"
}
},
"node_modules/@octokit/plugin-rest-endpoint-methods": {
"version": "5.12.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz",
"integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==",
"version": "13.3.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.1.tgz",
"integrity": "sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.33.0",
"deprecation": "^2.3.1"
"@octokit/types": "^13.8.0"
},
"engines": {
"node": ">= 18"
},
"peerDependencies": {
"@octokit/core": ">=6"
}
},
"node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
"license": "MIT"
},
"node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^23.0.1"
}
},
"node_modules/@octokit/plugin-retry": {
@@ -142,49 +246,107 @@
}
},
"node_modules/@octokit/plugin-throttling": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz",
"integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==",
"version": "9.4.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.4.0.tgz",
"integrity": "sha512-IOlXxXhZA4Z3m0EEYtrrACkuHiArHLZ3CvqWwOez/pURNqRuwfoFlTPbN5Muf28pzFuztxPyiUiNwz8KctdZaQ==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.0.1",
"@octokit/types": "^13.7.0",
"bottleneck": "^2.15.3"
},
"engines": {
"node": ">= 18"
},
"peerDependencies": {
"@octokit/core": "^3.5.0"
"@octokit/core": "^6.1.3"
}
},
"node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
"license": "MIT"
},
"node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^23.0.1"
}
},
"node_modules/@octokit/request": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz",
"integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==",
"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": "^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"
"@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": "2.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
"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": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
"@octokit/types": "^13.6.2"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
"license": "MIT"
},
"node_modules/@octokit/request-error/node_modules/@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^23.0.1"
}
},
"node_modules/@octokit/request/node_modules/@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==",
"license": "MIT"
},
"node_modules/@octokit/request/node_modules/@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^23.0.1"
}
},
"node_modules/@octokit/rest": {
"version": "18.12.0",
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
"integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
"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": "^3.5.1",
"@octokit/plugin-paginate-rest": "^2.16.8",
"@octokit/plugin-request-log": "^1.0.4",
"@octokit/plugin-rest-endpoint-methods": "^5.12.0"
"@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/types": {
@@ -234,9 +396,10 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"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=="
"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",
@@ -270,11 +433,6 @@
"node": ">=0.4.0"
}
},
"node_modules/deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
},
"node_modules/discord-api-types": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz",
@@ -316,6 +474,22 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"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",
"integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/fastify"
},
{
"type": "opencollective",
"url": "https://opencollective.com/fastify"
}
],
"license": "MIT"
},
"node_modules/is-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
@@ -324,14 +498,6 @@
"node": ">=8"
}
},
"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==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
@@ -375,14 +541,6 @@
}
}
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/ow": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
@@ -429,9 +587,10 @@
}
},
"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=="
"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/vali-date": {
"version": "1.0.0",
@@ -455,11 +614,6 @@
"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="
},
"node_modules/ws": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
@@ -517,45 +671,86 @@
}
},
"@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==",
"requires": {
"@octokit/types": "^6.0.3"
}
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
"integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="
},
"@octokit/core": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
"integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.4.tgz",
"integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==",
"requires": {
"@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"
"@octokit/auth-token": "^5.0.0",
"@octokit/graphql": "^8.1.2",
"@octokit/request": "^9.2.1",
"@octokit/request-error": "^6.1.7",
"@octokit/types": "^13.6.2",
"before-after-hook": "^3.0.2",
"universal-user-agent": "^7.0.0"
},
"dependencies": {
"@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g=="
},
"@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"requires": {
"@octokit/openapi-types": "^23.0.1"
}
}
}
},
"@octokit/endpoint": {
"version": "6.0.12",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
"version": "10.1.3",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.3.tgz",
"integrity": "sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==",
"requires": {
"@octokit/types": "^6.0.3",
"is-plain-object": "^5.0.0",
"universal-user-agent": "^6.0.0"
"@octokit/types": "^13.6.2",
"universal-user-agent": "^7.0.2"
},
"dependencies": {
"@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g=="
},
"@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"requires": {
"@octokit/openapi-types": "^23.0.1"
}
}
}
},
"@octokit/graphql": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.1.tgz",
"integrity": "sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==",
"requires": {
"@octokit/request": "^5.6.0",
"@octokit/types": "^6.0.3",
"universal-user-agent": "^6.0.0"
"@octokit/request": "^9.2.2",
"@octokit/types": "^13.8.0",
"universal-user-agent": "^7.0.0"
},
"dependencies": {
"@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g=="
},
"@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"requires": {
"@octokit/openapi-types": "^23.0.1"
}
}
}
},
"@octokit/openapi-types": {
@@ -564,26 +759,55 @@
"integrity": "sha512-dWZfYvCCdjZzDYA3lIAMF72Q0jld8xidqCq5Ryw09eBJXZdcM6he0vWBTvw/b5UnGYqexxOyHWgfrsTlUJL3Gw=="
},
"@octokit/plugin-paginate-rest": {
"version": "2.16.9",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.9.tgz",
"integrity": "sha512-gfSCMgz5scFKsR0dW4jaYsDJVt/UwCHp4dF7sHlmSekZvwzvLiOAGZ4MQkEsL5DW9hIk2W+UQkYZMTA1b6Wsqw==",
"version": "11.4.2",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.2.tgz",
"integrity": "sha512-BXJ7XPCTDXFF+wxcg/zscfgw2O/iDPtNSkwwR1W1W5c4Mb3zav/M2XvxQ23nVmKj7jpweB4g8viMeCQdm7LMVA==",
"requires": {
"@octokit/types": "^6.33.0"
"@octokit/types": "^13.7.0"
},
"dependencies": {
"@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g=="
},
"@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"requires": {
"@octokit/openapi-types": "^23.0.1"
}
}
}
},
"@octokit/plugin-request-log": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
"integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
"integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
"requires": {}
},
"@octokit/plugin-rest-endpoint-methods": {
"version": "5.12.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.12.1.tgz",
"integrity": "sha512-0nY3htfl6x9UkPcqv8pm9vOC/bTA7f4IMDWln13neHRdNWQvOQgZ9fRxK7BAc74rye4yVINEFi9Yb9rnGUvosA==",
"version": "13.3.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.1.tgz",
"integrity": "sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==",
"requires": {
"@octokit/types": "^6.33.0",
"deprecation": "^2.3.1"
"@octokit/types": "^13.8.0"
},
"dependencies": {
"@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g=="
},
"@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"requires": {
"@octokit/openapi-types": "^23.0.1"
}
}
}
},
"@octokit/plugin-retry": {
@@ -596,46 +820,88 @@
}
},
"@octokit/plugin-throttling": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz",
"integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==",
"version": "9.4.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.4.0.tgz",
"integrity": "sha512-IOlXxXhZA4Z3m0EEYtrrACkuHiArHLZ3CvqWwOez/pURNqRuwfoFlTPbN5Muf28pzFuztxPyiUiNwz8KctdZaQ==",
"requires": {
"@octokit/types": "^6.0.1",
"@octokit/types": "^13.7.0",
"bottleneck": "^2.15.3"
},
"dependencies": {
"@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g=="
},
"@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"requires": {
"@octokit/openapi-types": "^23.0.1"
}
}
}
},
"@octokit/request": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz",
"integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==",
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.2.tgz",
"integrity": "sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==",
"requires": {
"@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"
"@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"
},
"dependencies": {
"@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g=="
},
"@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"requires": {
"@octokit/openapi-types": "^23.0.1"
}
}
}
},
"@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==",
"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==",
"requires": {
"@octokit/types": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
"@octokit/types": "^13.6.2"
},
"dependencies": {
"@octokit/openapi-types": {
"version": "23.0.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz",
"integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g=="
},
"@octokit/types": {
"version": "13.8.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz",
"integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==",
"requires": {
"@octokit/openapi-types": "^23.0.1"
}
}
}
},
"@octokit/rest": {
"version": "18.12.0",
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
"integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
"integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
"requires": {
"@octokit/core": "^3.5.1",
"@octokit/plugin-paginate-rest": "^2.16.8",
"@octokit/plugin-request-log": "^1.0.4",
"@octokit/plugin-rest-endpoint-methods": "^5.12.0"
"@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"
}
},
"@octokit/types": {
@@ -675,9 +941,9 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"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=="
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
"integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="
},
"bottleneck": {
"version": "2.19.5",
@@ -702,11 +968,6 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"deprecation": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
},
"discord-api-types": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz",
@@ -735,16 +996,16 @@
"is-obj": "^2.0.0"
}
},
"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",
"integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="
},
"is-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
},
"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=="
},
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
@@ -771,14 +1032,6 @@
"whatwg-url": "^5.0.0"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"ow": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz",
@@ -813,9 +1066,9 @@
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="
},
"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=="
"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=="
},
"vali-date": {
"version": "1.0.0",
@@ -836,11 +1089,6 @@
"webidl-conversions": "^3.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",

View File

@@ -11,8 +11,8 @@
"license": "ISC",
"dependencies": {
"@octokit/plugin-retry": "^3.0.9",
"@octokit/plugin-throttling": "^3.5.2",
"@octokit/rest": "^18.12.0",
"@octokit/plugin-throttling": "^9.4.0",
"@octokit/rest": "^21.1.1",
"discord.js": "^13.2.0"
}
}

View File

@@ -332,8 +332,9 @@ PAPX-90230:
name-en: "Arc the Lad - Seirei no Tasogare - Premiere Disc [ShopDemo]"
region: "NTSC-J"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
PAPX-90231:
name: "怪盗 スライ・クーパー [体験版]"
name-sort: "かいとう すらいくーぱー [たいけんばん]"
@@ -917,8 +918,9 @@ PCPX-96330:
name-en: "Arc the Lad - Seirei no Tasogare - Premiere Disc [ShopTrial]"
region: "NTSC-J"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
PCPX-96554:
name: "Games of Our Style - Tokyo Game Show 2003 Disc"
name-sort: "げーむず おぶ あわー すたいる - とうきょう げーむしょう 2003 でぃすく"
@@ -1379,8 +1381,9 @@ SCAJ-20019:
name-en: "Arc the Lad - Twilight of the Spirits"
region: "NTSC-J"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCAJ-20020:
name: "Drag-on Dragoon"
region: "NTSC-C-J"
@@ -1465,11 +1468,12 @@ SCAJ-20037:
gsHWFixes:
halfPixelOffset: 1 # Corrects shadow misalignment.
SCAJ-20038:
name: "Arc the Lad - Twilight of the Spirits"
region: "NTSC-Unk"
name: "Arc the Lad - Jing Ling Zhi Huang Hun"
region: "NTSC-C"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCAJ-20039:
name: "Sidewinder V"
region: "NTSC-Unk"
@@ -1481,6 +1485,7 @@ SCAJ-20041:
name: "Energy Airforce - Aim Strike!"
region: "NTSC-Unk"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SCAJ-20043:
name: "Chain Dive"
@@ -1840,6 +1845,8 @@ SCAJ-20108:
region: "NTSC-Unk"
gsHWFixes:
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCAJ-20109:
name: "Ratchet & Clank 3 - Up Your Arsenal"
region: "NTSC-Unk"
@@ -2660,8 +2667,9 @@ SCCS-40007:
name-en: "Arc the Lad - Seirei no Tasogare"
region: "NTSC-C"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCCS-40009:
name: "龙珠二世"
name-sort: "Longzhu Ershi"
@@ -5329,8 +5337,9 @@ SCES-51910:
region: "PAL-M5"
compat: 5
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCES-51920:
name: "Forbidden Siren"
region: "PAL-E"
@@ -6948,8 +6957,9 @@ SCKA-20012:
name: "Arc the Lad - Jeongryeongui Hwanghon"
region: "NTSC-K"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCKA-20013:
name: "SOCOM - U.S. Navy SEALs"
region: "NTSC-K"
@@ -8427,16 +8437,18 @@ SCPS-15040:
name-en: "Arc the Lad - Twilight of the Spirits [Limited Edition]"
region: "NTSC-J"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCPS-15041:
name: "アークザラッド 精霊の黄昏"
name-sort: "あーくざらっど せいれいのたそがれ"
name-en: "Arc the Lad - Twilight of the Spirits"
region: "NTSC-J"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCPS-15042:
name: "デカボイス [マイク同梱版]"
name-sort: "でかぼいす [まいくどうこんばん]"
@@ -8570,6 +8582,8 @@ SCPS-15058:
region: "NTSC-J"
gsHWFixes:
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCPS-15059:
name: "みんなのGOLF 4"
name-sort: "みんなのごるふ 4"
@@ -10364,9 +10378,14 @@ SCPS-56016:
gameFixes:
- GIFFIFOHack
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing position.
nativeScaling: 2 # Fixes post effects.
estimateTextureRegion: 1 # Improves performance and reduces hash cache size.
gpuPaletteConversion: 2 # Improves performance and reduces hash cache size.
autoFlush: 1 # Corrects shadows (Currently still broken even with this).
recommendedBlendingLevel: 4 # Fixes car shadows but addeds about 5000 barriers, might impact slower machines.
gpuTargetCLUT: 2 # Fixes light flicker.
getSkipCount: "GSC_DTGames"
SCPS-72001:
name: "GRAN TURISMO3 A-spec [MEGA HITS!]"
name-sort: "ぐらんつーりすも3 A-spec [MEGA HITS!]"
@@ -10992,8 +11011,9 @@ SCUS-97231:
region: "NTSC-U"
compat: 5
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCUS-97232:
name: "The Getaway [Demo]"
name-sort: "Getaway, The [Demo]"
@@ -11210,8 +11230,9 @@ SCUS-97282:
name: "Arc the Lad - Twilight of the Spirits [Demo]"
region: "NTSC-U"
gsHWFixes:
textureInsideRT: 1 # Fixes on screen garbage.
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SCUS-97292:
name: "Amplitude [Demo]"
region: "NTSC-U"
@@ -12935,6 +12956,7 @@ SLED-50117:
region: "PAL-E"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -14651,6 +14673,7 @@ SLES-50383:
compat: 5
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -14660,6 +14683,7 @@ SLES-50384:
region: "PAL-I"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -14669,6 +14693,7 @@ SLES-50385:
region: "PAL-S"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -14697,6 +14722,10 @@ SLES-50396:
SLES-50397:
name: "Prisoner of War"
region: "PAL-M5"
speedHacks:
instantVU1: 0 # Fixes NPCs getting stuck in place.
gsHWFixes:
recommendedBlendingLevel: 5 # Fixes shading and shadow definition.
SLES-50398:
name: "UEFA Champions League"
region: "PAL-M5"
@@ -16553,6 +16582,7 @@ SLES-51203:
- EETimingHack # Fixes various VIF errors.
gsHWFixes:
minimumBlendingLevel: 2 # Improves banding.
recommendedBlendingLevel: 4 # Fixes missing text brightness.
SLES-51208:
name: "Rocky"
region: "PAL-M5"
@@ -17970,7 +18000,8 @@ SLES-51824:
name: "Colin McRae Rally '04"
region: "PAL-M5"
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
halfPixelOffset: 4 # Fixes vertical lines and depth lines.
autoFlush: 2 # Fixes sun intensity.
SLES-51825:
name: "Pop Idol"
region: "PAL-E"
@@ -18281,6 +18312,7 @@ SLES-51918:
gsHWFixes:
autoFlush: 2 # Reduces post-processing misalignment.
halfPixelOffset: 4 # Reduces post-processing misalignment.
nativeScaling: 2 # Fixes post effects.
SLES-51924:
name: "World War Zero - Ironstorm"
region: "PAL-M5"
@@ -18754,6 +18786,8 @@ SLES-52132:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLES-52133:
name: "Hitman - Contracts"
region: "PAL-F"
@@ -18762,6 +18796,8 @@ SLES-52133:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLES-52134:
name: "Hitman - Contracts"
region: "PAL-I"
@@ -18771,6 +18807,8 @@ SLES-52134:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLES-52135:
name: "Hitman - Contracts"
region: "PAL-G"
@@ -18779,6 +18817,8 @@ SLES-52135:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLES-52136:
name: "Hitman - Contracts"
region: "PAL-S"
@@ -18787,6 +18827,8 @@ SLES-52136:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLES-52143:
name: "Carmen Sandiego - The Secret of the Stolen Drums"
region: "PAL-M4"
@@ -18987,16 +19029,19 @@ SLES-52265:
name: "Energy Airforce - Aim Strike!"
region: "PAL-E"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLES-52266:
name: "Energy Airforce - Aim Strike!"
region: "PAL-F"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLES-52267:
name: "Energy Airforce - Aim Strike!"
region: "PAL-I"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLES-52275:
name: "Way of the Samurai 2"
@@ -19263,6 +19308,7 @@ SLES-52372:
name: "Spider-Man 2"
region: "PAL-M5"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -19446,6 +19492,7 @@ SLES-52447:
name: "Spider-Man 2"
region: "PAL-I"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -19563,6 +19610,7 @@ SLES-52493:
name: "Spider-Man 2"
region: "PAL-E"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -22626,6 +22674,7 @@ SLES-53523:
minimumBlendingLevel: 3 # Fixes broken light and shadow rendering.
halfPixelOffset: 2 # Fixes misaligned bloom and character shadows.
autoFlush: 1 # Fixes missing bloom intensity and alignment.
nativeScaling: 2 # Helps fix offset blur and bloom on shadows and the UI.
SLES-53524:
name: "Mortal Kombat - Shaolin Monks"
region: "PAL-M5"
@@ -23160,6 +23209,9 @@ SLES-53645:
name: "Knights of the Temple II"
region: "PAL-M5"
compat: 5
gsHWFixes:
recommendedBlendingLevel: 3 # Improves shadow quality.
autoFlush: 1 # Fixes light leaking and fire bloom intensity.
SLES-53646:
name: "World Racing 2"
region: "PAL-M5"
@@ -23172,6 +23224,7 @@ SLES-53647:
minimumBlendingLevel: 3 # Fixes broken light and shadow rendering.
halfPixelOffset: 2 # Fixes misaligned bloom and character shadows.
autoFlush: 1 # Fixes missing bloom intensity and alignment.
nativeScaling: 2 # Helps fix offset blur and bloom on shadows and the UI.
SLES-53651:
name: "WWII - Soldier"
region: "PAL-E"
@@ -23953,9 +24006,13 @@ SLES-53904:
clampModes:
vuClampMode: 0 # Fixes black artifacts on tracks
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing position.
nativeScaling: 2 # Fixes post effects.
estimateTextureRegion: 1 # Improves performance and reduces hash cache size.
gpuPaletteConversion: 2 # Improves performance and reduces hash cache size.
autoFlush: 1 # Corrects shadows (Currently still broken even with this).
gpuTargetCLUT: 2 # Fixes light flicker.
getSkipCount: "GSC_DTGames"
SLES-53906:
name: "50 Cent - Bulletproof"
region: "PAL-F"
@@ -24613,13 +24670,13 @@ SLES-54159:
region: "PAL-M5"
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing misalignment.
recommendedBlendingLevel: 3 # Improves reflection quality.
recommendedBlendingLevel: 4 # Improves reflection quality and terrain lighting.
SLES-54160:
name: "Eragon"
region: "PAL-R"
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing misalignment.
recommendedBlendingLevel: 3 # Improves reflection quality.
recommendedBlendingLevel: 4 # Improves reflection quality and terrain lighting.
SLES-54161:
name: "Super Dragon Ball Z"
region: "PAL-E"
@@ -24777,6 +24834,8 @@ SLES-54187:
SLES-54188:
name: "Nickelodeon Avatar - The Legend of Aang"
region: "PAL-M4"
gsHWFixes:
minimumBlendingLevel: 3 # Fixes missing lighting and skin color.
SLES-54193:
name: "Carol Vorderman's Sudoku"
region: "PAL-E"
@@ -25933,6 +25992,9 @@ SLES-54590:
name: "Hard Knock High"
region: "PAL-E"
compat: 5
gsHWFixes:
halfPixelOffset: 4 # Aligns post effects.
nativeScaling: 1 # Fixes post effects.
SLES-54591:
name: "Special Forces"
region: "PAL-E"
@@ -25976,11 +26038,16 @@ SLES-54615:
SLES-54616:
name: "Fantastic Four - Rise of the Silver Surfer"
region: "PAL-M5"
speedHacks:
eeCycleRate: 1 # Helps alleviate FPS drops during FMVs.
gsHWFixes:
roundSprite: 2 # Fixes edge depth bleeding during power attacks and misaligned bloom.
nativeScaling: 1 # Fixes Post effect.
SLES-54617:
name: "Action Man A.T.O.M. - Alpha Teens on Machines"
region: "PAL-M9"
gsHWFixes:
halfPixelOffset: 4 # Fixes depth line.
SLES-54619:
name: "Pinocchio"
region: "PAL-M3"
@@ -26192,9 +26259,9 @@ SLES-54674:
compat: 5
gsHWFixes:
textureInsideRT: 1 # Needed for post processing effects.
halfPixelOffset: 4 # Fixes offset post processing.
halfPixelOffset: 2 # Fixes offset post processing.
autoFlush: 1 # Fixes bloom intensity.
nativeScaling: 1 # Fixes post processing.
nativeScaling: 2 # Fixes post processing.
SLES-54675:
name: "Street Warrior"
region: "PAL-E"
@@ -26497,8 +26564,11 @@ SLES-54774:
SLES-54776:
name: "Fantastic Four - Rise of the Silver Surfer"
region: "PAL-E-I"
speedHacks:
eeCycleRate: 1 # Helps alleviate FPS drops during FMVs.
gsHWFixes:
roundSprite: 2 # Fixes edge depth bleeding during power attacks and misaligned bloom.
nativeScaling: 1 # Fixes Post effect.
SLES-54778:
name: "Harry Potter and the Order of the Phoenix"
region: "PAL-E"
@@ -27211,6 +27281,8 @@ SLES-54997:
gameFixes:
- EETimingHack # Flickery textures.
gsHWFixes:
minimumBlendingLevel: 2 # General lighting improvement over basic blend.
recommendedBlendingLevel: 4 # Further improves lighting on things like plants.
nativeScaling: 1 # Fixes post lighting.
SLES-54998:
name: "Mercenaries 2 - L'enfer des Favelas"
@@ -27218,6 +27290,8 @@ SLES-54998:
gameFixes:
- EETimingHack # Flickery textures.
gsHWFixes:
minimumBlendingLevel: 2 # General lighting improvement over basic blend.
recommendedBlendingLevel: 4 # Further improves lighting on things like plants.
nativeScaling: 1 # Fixes post lighting.
SLES-54999:
name: "Mercenaries 2 - Inferno di Fuoco"
@@ -27225,6 +27299,8 @@ SLES-54999:
gameFixes:
- EETimingHack # Flickery textures.
gsHWFixes:
minimumBlendingLevel: 2 # General lighting improvement over basic blend.
recommendedBlendingLevel: 4 # Further improves lighting on things like plants.
nativeScaling: 1 # Fixes post lighting.
SLES-55000:
name: "Mercenaries 2 - World in Flames"
@@ -27232,6 +27308,8 @@ SLES-55000:
gameFixes:
- EETimingHack # Flickery textures.
gsHWFixes:
minimumBlendingLevel: 2 # General lighting improvement over basic blend.
recommendedBlendingLevel: 4 # Further improves lighting on things like plants.
nativeScaling: 1 # Fixes post lighting.
SLES-55001:
name: "Mercenaries 2 - World in Flames"
@@ -27239,6 +27317,8 @@ SLES-55001:
gameFixes:
- EETimingHack # Flickery textures.
gsHWFixes:
minimumBlendingLevel: 2 # General lighting improvement over basic blend.
recommendedBlendingLevel: 4 # Further improves lighting on things like plants.
nativeScaling: 1 # Fixes post lighting.
SLES-55002:
name: "Need for Speed - ProStreet"
@@ -27714,6 +27794,7 @@ SLES-55184:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55185:
name: "Disney/Pixar WALL-E"
region: "PAL-UK"
@@ -27722,6 +27803,7 @@ SLES-55185:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55186:
name: "Disney/Pixar WALL-E"
region: "PAL-S-P"
@@ -27730,6 +27812,7 @@ SLES-55186:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55187:
name: "Disney/Pixar WALL-E"
region: "PAL-F-G"
@@ -27738,6 +27821,7 @@ SLES-55187:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55188:
name: "Disney/Pixar WALL-E"
region: "PAL-G"
@@ -27746,6 +27830,7 @@ SLES-55188:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55189:
name: "Nick Jr. Go Diego Go! Safari Rescue"
region: "PAL-E-F"
@@ -27773,6 +27858,7 @@ SLES-55193:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55194:
name: "Disney/Pixar WALL-E"
region: "PAL-SC"
@@ -27781,6 +27867,7 @@ SLES-55194:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55195:
name: "Disney/Pixar WALL-E"
region: "PAL-GR-I"
@@ -27789,6 +27876,7 @@ SLES-55195:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55196:
name: "Disney/Pixar WALL-E"
region: "PAL-PL-CR"
@@ -27797,6 +27885,7 @@ SLES-55196:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLES-55197:
name: "Dancing Stage SuperNOVA 2"
region: "PAL-M5"
@@ -28177,6 +28266,9 @@ SLES-55345:
name: "007 - Quantum of Solace"
region: "PAL-M5"
compat: 5
gsHWFixes:
halfPixelOffset: 2 # Reduces bloom misalignment and fixes depth lines.
nativeScaling: 2 # Fixes bloom intensity.
SLES-55346:
name: "Rugby League 2 - World Cup Edition"
region: "PAL-E"
@@ -29010,6 +29102,7 @@ SLES-82009:
compat: 5
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -29580,6 +29673,7 @@ SLKA-25032:
- EETimingHack # Fixes various VIF errors.
gsHWFixes:
minimumBlendingLevel: 2 # Improves banding.
recommendedBlendingLevel: 4 # Fixes missing text brightness.
SLKA-25033:
name: "Gregory Horror Show"
region: "NTSC-K"
@@ -30147,9 +30241,10 @@ SLKA-25180:
halfPixelOffset: 4 # Aligns post effects.
nativeScaling: 2 # Fixes post effects.
SLKA-25181:
name: "Energy Airforce Aim Strike"
name: "Energy Airforce Aim Strike!"
region: "NTSC-K"
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLKA-25182:
name: "Hajime no Ippo2 Victorious Road"
@@ -30323,6 +30418,8 @@ SLKA-25218:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLKA-25219:
name: "Monster Hunter G"
region: "NTSC-K"
@@ -31310,6 +31407,9 @@ SLKA-25441:
SLKA-25442:
name: "007 - Quantum of Solace"
region: "NTSC-K"
gsHWFixes:
halfPixelOffset: 2 # Reduces bloom misalignment and fixes depth lines.
nativeScaling: 2 # Fixes bloom intensity.
SLKA-25443:
name: "Musou Orochi Maou Sairin"
region: "NTSC-K"
@@ -31462,6 +31562,7 @@ SLKA-35001:
compat: 5
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -32085,6 +32186,8 @@ SLPM-55110:
name-en: "Mercenaries 2 - World in Flames"
region: "NTSC-J"
gsHWFixes:
minimumBlendingLevel: 2 # General lighting improvement over basic blend.
recommendedBlendingLevel: 4 # Further improves lighting on things like plants.
nativeScaling: 1 # Fixes post lighting.
SLPM-55112:
name: "三國志11 with パワーアップキット"
@@ -32278,6 +32381,9 @@ SLPM-55148:
name-sort: "007 なぐさめのほうしゅう"
name-en: "007 - Nagusame no Houshuu"
region: "NTSC-J"
gsHWFixes:
halfPixelOffset: 2 # Reduces bloom misalignment and fixes depth lines.
nativeScaling: 2 # Fixes bloom intensity.
SLPM-55149:
name: "ラブルートゼロ KissKiss☆ラビリンス [通常版]"
name-sort: "らぶるーとぜろ きすきすらびりんす [つうじょうばん]"
@@ -32662,6 +32768,8 @@ SLPM-55230:
name-en: "Mercenaries 2 - World in Flames [EA:SY! 1980]"
region: "NTSC-J"
gsHWFixes:
minimumBlendingLevel: 2 # General lighting improvement over basic blend.
recommendedBlendingLevel: 4 # Further improves lighting on things like plants.
nativeScaling: 1 # Fixes post lighting.
SLPM-55231:
name: "サイレントヒル シャッタードメモリーズ"
@@ -34885,6 +34993,7 @@ SLPM-62043:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -39193,6 +39302,7 @@ SLPM-65077:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -39207,6 +39317,7 @@ SLPM-65078:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -40879,6 +40990,7 @@ SLPM-65374:
instantVU1: 0 # Fixes hanging while going ingame.
mtvu: 0
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
SLPM-65375:
name: "真・三國無双3 & 真・三國無双3 猛将伝 [ディスク 1] [プレミアムパック]"
@@ -42473,6 +42585,7 @@ SLPM-65662:
name-en: "Spider-Man 2"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -43021,6 +43134,7 @@ SLPM-65754:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -45210,6 +45324,7 @@ SLPM-66121:
name: "Spider-Man 2 [TAITO BEST]"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -47654,6 +47769,7 @@ SLPM-66503:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -49419,6 +49535,7 @@ SLPM-66792:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -49430,6 +49547,7 @@ SLPM-66793:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -50560,6 +50678,7 @@ SLPM-67002:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -50604,6 +50723,7 @@ SLPM-67008:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -50745,6 +50865,7 @@ SLPM-67515:
region: "NTSC-K"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -50978,6 +51099,7 @@ SLPM-68503:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -51527,6 +51649,7 @@ SLPM-74255:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -51538,6 +51661,7 @@ SLPM-74256:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -51840,6 +51964,7 @@ SLPM-74901:
region: "NTSC-J"
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -54171,6 +54296,9 @@ SLPS-20474:
name-sort: "しんぷる2000しりーず Vol.107 THE ほのおのかくとうばんちょう"
name-en: "Simple 2000 Series Vol. 107 - The Honoo no Kakutou Banchou"
region: "NTSC-J"
gsHWFixes:
halfPixelOffset: 4 # Aligns post effects.
nativeScaling: 1 # Fixes post effects.
SLPS-20475:
name: "山佐DigiワールドSP ジャイアントパルサー"
name-sort: "やまさでじわーるどSP じゃいあんとぱるさー"
@@ -55863,6 +55991,7 @@ SLPS-25254:
- EETimingHack # Fixes various VIF errors.
gsHWFixes:
minimumBlendingLevel: 2 # Improves banding.
recommendedBlendingLevel: 4 # Fixes missing text brightness.
SLPS-25255:
name: "サイドワインダーV フライトBOX [特別限定版]"
name-sort: "さいどわいんだーV ふらいとBOX [とくべつげんていばん]"
@@ -56758,6 +56887,8 @@ SLPS-25406:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLPS-25407:
name: "THE KING OF FIGHTERS 2003"
name-sort: "ざ きんぐ おぶ ふぁいたーず2003"
@@ -57659,6 +57790,8 @@ SLPS-25563:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLPS-25564:
name: "Gallop Racer 8 - Live Horse Racing -"
name-sort: "ぎゃろっぷ れーさー 8 らいゔほーすれーしんぐ"
@@ -59454,9 +59587,9 @@ SLPS-25856:
region: "NTSC-J"
gsHWFixes:
textureInsideRT: 1 # Needed for post processing effects.
halfPixelOffset: 4 # Fixes offset post processing.
halfPixelOffset: 2 # Fixes offset post processing.
autoFlush: 1 # Fixes bloom intensity.
nativeScaling: 1 # Fixes post processing.
nativeScaling: 2 # Fixes post processing.
SLPS-25858:
name: "灼眼のシャナ [電撃SP]"
name-sort: "しゃくがんのしゃな [でんげきSP]"
@@ -59961,9 +60094,9 @@ SLPS-25946:
region: "NTSC-J"
gsHWFixes:
textureInsideRT: 1 # Needed for post processing effects.
halfPixelOffset: 4 # Fixes offset post processing.
halfPixelOffset: 2 # Fixes offset post processing.
autoFlush: 1 # Fixes bloom intensity.
nativeScaling: 1 # Fixes post processing.
nativeScaling: 2 # Fixes post processing.
SLPS-25947:
name: "サモンナイトグランテーゼ 滅びの剣と約束の騎士"
name-sort: "さもんないとぐらんてーぜ ほろびのけんとやくそくのきし"
@@ -61642,6 +61775,7 @@ SLUS-20144:
compat: 5
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -63150,6 +63284,7 @@ SLUS-20454:
- EETimingHack # Fixes various VIF errors.
gsHWFixes:
minimumBlendingLevel: 2 # Improves banding.
recommendedBlendingLevel: 4 # Fixes missing text brightness.
SLUS-20455:
name: "F1 2002"
region: "NTSC-U"
@@ -63670,6 +63805,7 @@ SLUS-20554:
compat: 5
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -64887,6 +65023,7 @@ SLUS-20776:
region: "NTSC-U"
compat: 5
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -65423,6 +65560,8 @@ SLUS-20882:
autoFlush: 1 # Fixes bloom rendering.
roundModes:
vu1RoundMode: 0 # Fixes missing light cones curtains and certain effects.
speedHacks:
instantVU1: 0 # Lowers overall system load.
SLUS-20883:
name: "Tom Clancy's Rainbow Six 3"
region: "NTSC-U"
@@ -66709,9 +66848,13 @@ SLUS-21095:
region: "NTSC-U"
compat: 5
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing position.
nativeScaling: 2 # Fixes post effects.
estimateTextureRegion: 1 # Improves performance and reduces hash cache size.
gpuPaletteConversion: 2 # Improves performance and reduces hash cache size.
autoFlush: 1 # Corrects shadows (Currently still broken even with this).
gpuTargetCLUT: 2 # Fixes light flicker.
getSkipCount: "GSC_DTGames"
SLUS-21096:
name: "Ape Escape - Pumped & Primed"
region: "NTSC-U"
@@ -66978,6 +67121,7 @@ SLUS-21139:
minimumBlendingLevel: 3 # Fixes broken light and shadow rendering.
halfPixelOffset: 2 # Fixes misaligned bloom and character shadows.
autoFlush: 1 # Fixes missing bloom intensity and alignment.
nativeScaling: 2 # Helps fix offset blur and bloom on shadows and the UI.
SLUS-21140:
name: "Mobile Suit Gundam Seed - Never Ending Tomorrow"
region: "NTSC-U"
@@ -67112,6 +67256,8 @@ SLUS-21165:
compat: 5
gsHWFixes:
halfPixelOffset: 4 # Fixes post processing alignment.
nativeScaling: 1 # Fixes depth blur intensity.
textureInsideRT: 1 # Fixes on screen garbage.
SLUS-21166:
name: "Full Metal Alchemist 2 - Curse of the Crimson Elixir"
region: "NTSC-U"
@@ -68207,7 +68353,7 @@ SLUS-21322:
vuClampMode: 3 # Fixes SPS and spawn issues.
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing misalignment.
recommendedBlendingLevel: 3 # Improves reflection quality.
recommendedBlendingLevel: 4 # Improves reflection quality and terrain lighting.
SLUS-21323:
name: "Rampage - Total Destruction"
region: "NTSC-U"
@@ -68717,6 +68863,8 @@ SLUS-21395:
name: "Avatar - The Last Airbender"
region: "NTSC-U"
compat: 5
gsHWFixes:
minimumBlendingLevel: 3 # Fixes missing lighting and skin color.
SLUS-21396:
name: "Star Trek - Encounters"
region: "NTSC-U"
@@ -69433,8 +69581,11 @@ SLUS-21544:
name: "Fantastic 4 - Rise of Silver Surfer"
region: "NTSC-U"
compat: 5
speedHacks:
eeCycleRate: 1 # Helps alleviate FPS drops during FMVs.
gsHWFixes:
roundSprite: 2 # Fixes edge depth bleeding during power attacks and misaligned bloom.
nativeScaling: 1 # Fixes Post effect.
SLUS-21545:
name: "Pirates of the Caribbean - At World's End"
region: "NTSC-U"
@@ -69497,9 +69648,9 @@ SLUS-21555:
compat: 5
gsHWFixes:
textureInsideRT: 1 # Needed for post processing effects.
halfPixelOffset: 4 # Fixes offset post processing.
halfPixelOffset: 2 # Fixes offset post processing.
autoFlush: 1 # Fixes bloom intensity.
nativeScaling: 1 # Fixes post processing.
nativeScaling: 2 # Fixes post processing.
SLUS-21556:
name: "Konami Kids Playground - Dinosaur Shapes & Colors"
region: "NTSC-U"
@@ -70072,6 +70223,8 @@ SLUS-21650:
gameFixes:
- EETimingHack # Flickery textures.
gsHWFixes:
minimumBlendingLevel: 2 # General lighting improvement over basic blend.
recommendedBlendingLevel: 4 # Further improves lighting on things like plants.
nativeScaling: 1 # Fixes post lighting.
SLUS-21651:
name: "Noddy and the Magic Book"
@@ -70507,6 +70660,7 @@ SLUS-21736:
gsHWFixes:
halfPixelOffset: 4 # Aligns Post Effect.
nativeScaling: 2 # Fixes Post effect.
autoFlush: 1 # Fixes post lighting.
SLUS-21737:
name: "Riding Star"
region: "NTSC-U"
@@ -70824,10 +70978,12 @@ SLUS-21793:
compat: 3
gsHWFixes:
halfPixelOffset: 2 # Fixes post processing position.
nativeScaling: 1 # Fixes post effects.
nativeScaling: 2 # Fixes post effects.
estimateTextureRegion: 1 # Improves performance and reduces hash cache size.
gpuPaletteConversion: 2 # Improves performance and reduces hash cache size.
autoFlush: 1 # Corrects shadows (Currently still broken even with this).
gpuTargetCLUT: 2 # Fixes light flicker.
getSkipCount: "GSC_DTGames"
SLUS-21794:
name: "Go, Diego, Go! Great Dinosaur Rescue"
region: "NTSC-U"
@@ -70933,6 +71089,9 @@ SLUS-21813:
name: "007 - Quantum of Solace"
region: "NTSC-U"
compat: 5
gsHWFixes:
halfPixelOffset: 2 # Reduces bloom misalignment and fixes depth lines.
nativeScaling: 2 # Fixes bloom intensity.
SLUS-21814:
name: "Disney - Think Fast"
region: "NTSC-U"
@@ -71816,6 +71975,7 @@ SLUS-29003:
compat: 5
gameFixes:
- InstantDMAHack # Fixes broken half-bottom artifacts.
- BlitInternalFPSHack # Fixes internal FPS detection.
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes broken skin colour on Vlad and others.
autoFlush: 1 # Fixes motion blur effect.
@@ -72724,6 +72884,17 @@ TCPS-10068:
name-sort: "でんしゃでごー りょじょうへん [こんとろーらどうこんせっと]"
name-en: "Densha de Go! Ryojou-hen [with Controller]"
region: "NTSC-J"
TCPS-10073:
name: "エナジーエアフォース エイムストライク!"
name-sort: "えなじーえあふぉーす えいむすとらいく!"
name-en: "Energy Airforce - Aim Strike! [TAITO 2002]"
region: "NTSC-J"
speedHacks:
instantVU1: 0 # Fixes hanging while going ingame.
mtvu: 0
gsHWFixes:
recommendedBlendingLevel: 5 # Alleviates color banding.
autoFlush: 2 # Corrects post-processing effect on jet exhausts.
TCPS-10074:
name: "スペースインベーダー アニバーサリー [筐体型コントローラ同梱セット]"
name-sort: "すぺーすいんべーだー あにばーさりー [きょうたいけいこんとろーらどうこんせっと]"
@@ -72760,6 +72931,7 @@ TCPS-10092:
name-en: "Spider-Man 2"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.
@@ -72835,6 +73007,7 @@ TCPS-10127:
name: "Spider-Man 2 [TAITO BEST]"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 3 # Fixes missing water sheen.
cpuSpriteRenderBW: 1 # Fixes textures.
autoFlush: 2 # Fixes the position of the shadow and makes it not blocky.
halfPixelOffset: 2 # Fixes shadows.

View File

@@ -446,7 +446,6 @@
03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,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:b3,y:b0,platform:Windows,
03000000091200004488000000000000,MUSIA PlayStation 2 Input Display,a:b0,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:b11,rightx:a2,righty:a3,start:b5,x:b1,y:b3,platform:Windows,
03000000f70600000100000000000000,N64 Adaptoid,+rightx:b2,+righty:b1,-rightx:b4,-righty:b5,a:b0,b:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,platform:Windows,
030000006f0e00001311000000000000,N64 Controller,+rightx:b10,+righty:b3,-rightx:b0,-righty:b11,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,platform:Windows,
030000006b140000010c000000000000,Nacon GC 400ES,a:b0,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:b2,y:b3,platform:Windows,
030000006b1400001106000000000000,Nacon Revolution 3 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:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows,
0300000085320000170d000000000000,Nacon Revolution 5 Pro,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:Windows,
@@ -637,6 +636,7 @@
030000000d0f0000ad00000000000000,RX Gamepad,a:b0,b:b4,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b6,start:b9,x:b2,y:b1,platform:Windows,
030000008916000000fe000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000c6240000045d000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000006f0e00001311000000000000,Saffun Controller,a:b2,b:b3,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:b1,y:b0,platform:Windows,
03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,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:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000a306000023f6000000000000,Saitek Cyborg,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:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000300f00001201000000000000,Saitek Dual Analog,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
@@ -1441,7 +1441,6 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000250900006688000000010000,MP8866 Super Dual Box,a:b2,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:b3,y:b0,platform:Linux,
030000005e0400008e02000010020000,MSI GC20 V2,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,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,
03000000f70600000100000000010000,N64 Adaptoid,+rightx:b2,+righty:b1,-rightx:b4,-righty:b5,a:b0,b:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,platform:Linux,
030000006f0e00001311000011010000,N64 Controller,+rightx:b10,+righty:b3,-rightx:b0,-righty:b11,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,platform:Linux,
030000006b1400000906000014010000,Nacon Asymmetric Wireless PS4 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,
030000006b140000010c000010010000,Nacon GC 400ES,a:b0,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:b2,y:b3,platform:Linux,
03000000853200000706000012010000,Nacon GC-100,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,
@@ -1497,11 +1496,11 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000006f0e00000901000011010000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e00002f01000011010000,PDP Wired 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,
03000000ad1b000004f9000000010000,PDP Xbox 360 Versus Fighting,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e0000f102000000000000,PDP Xbox Atomic,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,
030000006f0e0000a802000023020000,PDP Xbox One Controller,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,
030000006f0e0000a702000023020000,PDP Xbox One Raven Black,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,
030000006f0e0000d802000006640000,PDP Xbox Series 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,
030000006f0e0000ef02000007640000,PDP Xbox Series Kinetic Wired 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,
030000006f0e0000f102000000000000,PDP Xbox Atomic,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
03000000c62400000053000000010000,PowerA,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,
03000000c62400003a54000001010000,PowerA 1428124-01,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,
03000000d62000000540000001010000,PowerA Advantage Xbox Series X 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,
@@ -1611,6 +1610,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000006f0e00001e01000011010000,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:Linux,
03000000c6240000fefa000000010000,Rock Candy Xbox 360 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,
030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,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,
030000006f0e00001311000011010000,Saffun Controller,a:b2,b:b3,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:b1,y:b0,platform:Linux,
03000000a306000023f6000011010000,Saitek Cyborg PlayStation 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:a4,start:b9,x:b0,y:b3,platform:Linux,
03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux,
03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 91 KiB

View File

@@ -111,7 +111,7 @@ layout(binding = 3) uniform sampler2D img_prim_min;
//layout(pixel_center_integer) in vec4 gl_FragCoord;
#endif
vec4 fetch_rt()
vec4 sample_from_rt()
{
#if !NEEDS_RT
return vec4(0.0);
@@ -127,7 +127,7 @@ vec4 fetch_rt()
vec4 sample_c(vec2 uv)
{
#if PS_TEX_IS_FB == 1
return fetch_rt();
return sample_from_rt();
#elif PS_REGION_RECT
return texelFetch(TextureSampler, ivec2(uv), 0);
#else
@@ -312,7 +312,7 @@ int fetch_raw_depth()
float multiplier = exp2(32.0f);
#if PS_TEX_IS_FB == 1
return int(fetch_rt().r * multiplier);
return int(sample_from_rt().r * multiplier);
#else
return int(texelFetch(TextureSampler, ivec2(gl_FragCoord.xy), 0).r * multiplier);
#endif
@@ -321,7 +321,7 @@ int fetch_raw_depth()
vec4 fetch_raw_color()
{
#if PS_TEX_IS_FB == 1
return fetch_rt();
return sample_from_rt();
#else
return texelFetch(TextureSampler, ivec2(gl_FragCoord.xy), 0);
#endif
@@ -697,8 +697,6 @@ vec4 ps_color()
vec4 C = tfx(T, PSin.c);
atst(C);
fog(C, PSin.t_float.z);
return C;
@@ -709,9 +707,9 @@ void ps_fbmask(inout vec4 C)
// FIXME do I need special case for 16 bits
#if PS_FBMASK
#if PS_HDR == 1
vec4 RT = trunc(fetch_rt() * 65535.0f);
vec4 RT = trunc(sample_from_rt() * 65535.0f);
#else
vec4 RT = trunc(fetch_rt() * 255.0f + 0.1f);
vec4 RT = trunc(sample_from_rt() * 255.0f + 0.1f);
#endif
C = vec4((uvec4(C) & ~FbMask) | (uvec4(RT) & FbMask));
#endif
@@ -799,7 +797,7 @@ float As = As_rgba.a;
#endif
#if SW_BLEND_NEEDS_RT
vec4 RT = fetch_rt();
vec4 RT = sample_from_rt();
#else
// Not used, but we define it to make the selection below simpler.
vec4 RT = vec4(0.0f);
@@ -974,9 +972,9 @@ void ps_main()
#if PS_WRITE_RG == 1
// Pseudo 16 bits access.
float rt_a = fetch_rt().g;
float rt_a = sample_from_rt().g;
#else
float rt_a = fetch_rt().a;
float rt_a = sample_from_rt().a;
#endif
#if (PS_DATE & 3) == 1
@@ -1028,9 +1026,9 @@ void ps_main()
#if SW_AD_TO_HW
#if PS_RTA_CORRECTION
vec4 RT = trunc(fetch_rt() * 128.0f + 0.1f);
vec4 RT = trunc(sample_from_rt() * 128.0f + 0.1f);
#else
vec4 RT = trunc(fetch_rt() * 255.0f + 0.1f);
vec4 RT = trunc(sample_from_rt() * 255.0f + 0.1f);
#endif
vec4 alpha_blend = vec4(RT.a / 128.0f);

View File

@@ -954,7 +954,7 @@ vec4 ps_color()
T.a = float(denorm_c_before.a & 0x80u);
#else
T.r = float((denorm_c_before.r << 3) & 0xF8u);
T.g = float(((denorm_c_before.r >> 2) & 0x38) | ((denorm_c_before.g << 6) & 0xC0u));
T.g = float(((denorm_c_before.r >> 2) & 0x38u) | ((denorm_c_before.g << 6) & 0xC0u));
T.b = float((denorm_c_before.g << 1) & 0xF8u);
T.a = float(denorm_c_before.g & 0x80u);
#endif

View File

@@ -168,6 +168,7 @@ else()
${DBUS_LINK_LIBRARIES}
X11::X11
X11::Xrandr
X11::Xi
)
if(USE_BACKTRACE)
target_compile_definitions(common PRIVATE "HAS_LIBBACKTRACE=1")

View File

@@ -27,6 +27,7 @@
#include <mach/task.h>
#include <mach/vm_map.h>
#include <mutex>
#include <ApplicationServices/ApplicationServices.h>
#include <IOKit/pwr_mgt/IOPMLib.h>
// Darwin (OSX) is a bit different from Linux when requesting properties of
@@ -127,6 +128,69 @@ bool Common::InhibitScreensaver(bool inhibit)
return true;
}
void Common::SetMousePosition(int x, int y)
{
// Little bit ugly but;
// Creating mouse move events and posting them wasn't very reliable.
// Calling CGWarpMouseCursorPosition without CGAssociateMouseAndMouseCursorPosition(false)
// ends up with the cursor feeling "sticky".
CGAssociateMouseAndMouseCursorPosition(false);
CGWarpMouseCursorPosition(CGPointMake(x, y));
CGAssociateMouseAndMouseCursorPosition(true); // The default state
return;
}
CFMachPortRef mouseEventTap = nullptr;
CFRunLoopSourceRef mouseRunLoopSource = nullptr;
static std::function<void(int, int)> fnMouseMoveCb;
CGEventRef mouseMoveCallback(CGEventTapProxy, CGEventType type, CGEventRef event, void* arg)
{
if (type == kCGEventMouseMoved)
{
const CGPoint location = CGEventGetLocation(event);
fnMouseMoveCb(location.x, location.y);
}
return event;
}
bool Common::AttachMousePositionCb(std::function<void(int, int)> cb)
{
if (!AXIsProcessTrusted())
{
Console.Warning("Process isn't trusted with accessibility permissions. Mouse tracking will not work!");
}
fnMouseMoveCb = cb;
mouseEventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault,
CGEventMaskBit(kCGEventMouseMoved), mouseMoveCallback, nullptr);
if (!mouseEventTap)
{
Console.Warning("Unable to create mouse moved event tap. Mouse tracking will not work!");
return false;
}
mouseRunLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, mouseEventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), mouseRunLoopSource, kCFRunLoopCommonModes);
return true;
}
void Common::DetachMousePositionCb()
{
if (mouseRunLoopSource)
{
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), mouseRunLoopSource, kCFRunLoopCommonModes);
CFRelease(mouseRunLoopSource);
}
if (mouseEventTap)
{
CFRelease(mouseEventTap);
}
mouseRunLoopSource = nullptr;
mouseEventTap = nullptr;
}
void Threading::Sleep(int ms)
{
usleep(1000 * ms);

View File

@@ -6,6 +6,7 @@
#include "common/Pcsx2Defs.h"
#include <atomic>
#include <functional>
#include <map>
#include <memory>
#include <string>
@@ -198,4 +199,8 @@ namespace Common
/// Abstracts platform-specific code for asynchronously playing a sound.
/// On Windows, this will use PlaySound(). On Linux, it will shell out to aplay. On MacOS, it uses NSSound.
bool PlaySoundAsync(const char* path);
void SetMousePosition(int x, int y);
bool AttachMousePositionCb(std::function<void(int,int)> cb);
void DetachMousePositionCb();
} // namespace Common

View File

@@ -13,17 +13,20 @@
#include "fmt/format.h"
#include <ctype.h>
#include <time.h>
#include <unistd.h>
#include <optional>
#include <dbus/dbus.h>
#include <spawn.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <unistd.h>
#include <dbus/dbus.h>
#include <X11/Xlib.h>
#include <X11/extensions/XInput2.h>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ctype.h>
#include <optional>
#include <thread>
// Returns 0 on failure (not supported by the operating system).
u64 GetPhysicalMemory()
@@ -177,6 +180,111 @@ bool Common::InhibitScreensaver(bool inhibit)
return SetScreensaverInhibitDBus(inhibit, "PCSX2", "PCSX2 VM is running.");
}
void Common::SetMousePosition(int x, int y)
{
Display* display = XOpenDisplay(nullptr);
if (!display)
return;
Window root = DefaultRootWindow(display);
XWarpPointer(display, None, root, 0, 0, 0, 0, x, y);
XFlush(display);
XCloseDisplay(display);
}
static std::function<void(int, int)> fnMouseMoveCb;
static std::atomic<bool> trackingMouse = false;
static std::thread mouseThread;
void mouseEventLoop()
{
Threading::SetNameOfCurrentThread("X11 Mouse Thread");
Display* display = XOpenDisplay(nullptr);
if (!display)
{
return;
}
int opcode, eventcode, error;
if (!XQueryExtension(display, "XInputExtension", &opcode, &eventcode, &error))
{
XCloseDisplay(display);
return;
}
const Window root = DefaultRootWindow(display);
XIEventMask evmask;
unsigned char mask[(XI_LASTEVENT + 7) / 8] = {0};
evmask.deviceid = XIAllDevices;
evmask.mask_len = sizeof(mask);
evmask.mask = mask;
XISetMask(mask, XI_RawMotion);
XISelectEvents(display, root, &evmask, 1);
XSync(display, False);
XEvent event;
while (trackingMouse)
{
// XNextEvent is blocking, this is a zombie process risk if no events arrive
// while we are trying to shutdown.
// https://nrk.neocities.org/articles/x11-timeout-with-xsyncalarm might be
// a better solution than using XPending.
if (!XPending(display))
{
Threading::Sleep(1);
Threading::SpinWait();
continue;
}
XNextEvent(display, &event);
if (event.xcookie.type == GenericEvent &&
event.xcookie.extension == opcode &&
XGetEventData(display, &event.xcookie))
{
XIRawEvent* raw_event = reinterpret_cast<XIRawEvent*>(event.xcookie.data);
if (raw_event->evtype == XI_RawMotion)
{
Window w;
int root_x, root_y, win_x, win_y;
unsigned int mask;
XQueryPointer(display, root, &w, &w, &root_x, &root_y, &win_x, &win_y, &mask);
if (fnMouseMoveCb)
fnMouseMoveCb(root_x, root_y);
}
XFreeEventData(display, &event.xcookie);
}
}
XCloseDisplay(display);
}
bool Common::AttachMousePositionCb(std::function<void(int, int)> cb)
{
fnMouseMoveCb = cb;
if (trackingMouse)
return true;
trackingMouse = true;
mouseThread = std::thread(mouseEventLoop);
mouseThread.detach();
return true;
}
void Common::DetachMousePositionCb()
{
trackingMouse = false;
fnMouseMoveCb = nullptr;
if (mouseThread.joinable())
{
mouseThread.join();
}
}
bool Common::PlaySoundAsync(const char* path)
{
#ifdef __linux__

View File

@@ -1,6 +1,7 @@
// SPDX-FileCopyrightText: 2002-2025 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#include "common/Console.h"
#include "common/FileSystem.h"
#include "common/HostSys.h"
#include "common/RedtapeWindows.h"
@@ -86,6 +87,61 @@ bool Common::InhibitScreensaver(bool inhibit)
return true;
}
void Common::SetMousePosition(int x, int y)
{
SetCursorPos(x, y);
}
/*
static HHOOK mouseHook = nullptr;
static std::function<void(int, int)> fnMouseMoveCb;
LRESULT CALLBACK Mousecb(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0 && wParam == WM_MOUSEMOVE)
{
MSLLHOOKSTRUCT* mouse = (MSLLHOOKSTRUCT*)lParam;
fnMouseMoveCb(mouse->pt.x, mouse->pt.y);
}
return CallNextHookEx(mouseHook, nCode, wParam, lParam);
}
*/
// This (and the above) works, but is not recommended on Windows and is only here for consistency.
// Defer to using raw input instead.
bool Common::AttachMousePositionCb(std::function<void(int, int)> cb)
{
/*
if (mouseHook)
Common::DetachMousePositionCb();
fnMouseMoveCb = cb;
mouseHook = SetWindowsHookEx(WH_MOUSE_LL, Mousecb, GetModuleHandle(NULL), 0);
if (!mouseHook)
{
Console.Warning("Failed to set mouse hook: %d", GetLastError());
return false;
}
#if defined(PCSX2_DEBUG) || defined(PCSX2_DEVBUILD)
static bool warned = false;
if (!warned)
{
Console.Warning("Mouse hooks are enabled, and this isn't a release build! Using a debugger, or loading symbols, _will_ stall the hook and cause global mouse lag.");
warned = true;
}
#endif
*/
return true;
}
void Common::DetachMousePositionCb()
{
/*
UnhookWindowsHookEx(mouseHook);
mouseHook = nullptr;
*/
}
bool Common::PlaySoundAsync(const char* path)
{
const std::wstring wpath = FileSystem::GetWin32Path(path);

View File

@@ -246,7 +246,7 @@ void Host::BeginPresentFrame()
GSJoinSnapshotThreads();
// queue dumping of this frame
std::string dump_path(fmt::format("{}_frame{}.png", s_output_prefix, s_dump_frame_number));
std::string dump_path(fmt::format("{}_frame{:05}.png", s_output_prefix, s_dump_frame_number));
GSQueueSnapshot(dump_path);
}
@@ -443,8 +443,17 @@ static void PrintCommandLineHelp(const char* progname)
std::fprintf(stderr, " -help: Displays this information and exits.\n");
std::fprintf(stderr, " -version: Displays version information and exits.\n");
std::fprintf(stderr, " -dumpdir <dir>: Frame dump directory (will be dumped as filename_frameN.png).\n");
std::fprintf(stderr, " -dump [rt|tex|z|f|a|i]: Enabling dumping of render target, texture, z buffer, frame, "
"alphas, and info (context, vertices), respectively, per draw. Generates lots of data.\n");
std::fprintf(stderr, " -dumprange N[,L,B]: Start dumping from draw N (base 0), stops after L draws, and only "
"those draws that are multiples of B (intersection of -dumprange and -dumprangef used)."
"Defaults to 0,-1,1 (all draws). Only used if -dump used.\n");
std::fprintf(stderr, " -dumprangef NF[,LF,BF]: Start dumping from frame NF (base 0), stops after LF frames, "
"and only those frames that are multiples of BF (intersection of -dumprange and -dumprangef used).\n"
"Defaults to 0,-1,1 (all frames). Only used if -dump is used.\n");
std::fprintf(stderr, " -loop <count>: Loops dump playback N times. Defaults to 1. 0 will loop infinitely.\n");
std::fprintf(stderr, " -renderer <renderer>: Sets the graphics renderer. Defaults to Auto.\n");
std::fprintf(stderr, " -swthreads <threads>: Sets the number of threads for the software renderer.\n");
std::fprintf(stderr, " -window: Forces a window to be displayed.\n");
std::fprintf(stderr, " -surfaceless: Disables showing a window.\n");
std::fprintf(stderr, " -logfile <filename>: Writes emu log to filename.\n");
@@ -465,6 +474,7 @@ void GSRunner::InitializeConsole()
bool GSRunner::ParseCommandLineArgs(int argc, char* argv[], VMBootParameters& params)
{
std::string dumpdir; // Save from argument -dumpdir for creating sub-directories
bool no_more_args = false;
for (int i = 1; i < argc; i++)
{
@@ -485,7 +495,7 @@ bool GSRunner::ParseCommandLineArgs(int argc, char* argv[], VMBootParameters& pa
}
else if (CHECK_ARG_PARAM("-dumpdir"))
{
s_output_prefix = StringUtil::StripWhitespace(argv[++i]);
dumpdir = s_output_prefix = StringUtil::StripWhitespace(argv[++i]);
if (s_output_prefix.empty())
{
Console.Error("Invalid dump directory specified.");
@@ -500,6 +510,86 @@ bool GSRunner::ParseCommandLineArgs(int argc, char* argv[], VMBootParameters& pa
continue;
}
else if (CHECK_ARG_PARAM("-dump"))
{
std::string str(argv[++i]);
s_settings_interface.SetBoolValue("EmuCore/GS", "dump", true);
if (str.find("rt") != std::string::npos)
s_settings_interface.SetBoolValue("EmuCore/GS", "save", true);
if (str.find("f") != std::string::npos)
s_settings_interface.SetBoolValue("EmuCore/GS", "savef", true);
if (str.find("tex") != std::string::npos)
s_settings_interface.SetBoolValue("EmuCore/GS", "savet", true);
if (str.find("z") != std::string::npos)
s_settings_interface.SetBoolValue("EmuCore/GS", "savez", true);
if (str.find("a") != std::string::npos)
s_settings_interface.SetBoolValue("EmuCore/GS", "savea", true);
if (str.find("i") != std::string::npos)
s_settings_interface.SetBoolValue("EmuCore/GS", "savei", true);
continue;
}
else if (CHECK_ARG_PARAM("-dumprange"))
{
std::string str(argv[++i]);
std::vector<std::string_view> split = StringUtil::SplitString(str, ',');
int start = 0;
int num = -1;
int by = 1;
if (split.size() > 0)
{
start = StringUtil::FromChars<int>(split[0]).value_or(0);
}
if (split.size() > 1)
{
num = StringUtil::FromChars<int>(split[1]).value_or(-1);
}
if (split.size() > 2)
{
by = std::max(1, StringUtil::FromChars<int>(split[2]).value_or(1));
}
s_settings_interface.SetIntValue("EmuCore/GS", "saven", start);
s_settings_interface.SetIntValue("EmuCore/GS", "savel", num);
s_settings_interface.SetIntValue("EmuCore/GS", "saveb", by);
continue;
}
else if (CHECK_ARG_PARAM("-dumprangef"))
{
std::string str(argv[++i]);
std::vector<std::string_view> split = StringUtil::SplitString(str, ',');
int start = 0;
int num = -1;
int by = 1;
if (split.size() > 0)
{
start = StringUtil::FromChars<int>(split[0]).value_or(0);
}
if (split.size() > 1)
{
num = StringUtil::FromChars<int>(split[1]).value_or(-1);
}
if (split.size() > 2)
{
by = std::max(1, StringUtil::FromChars<int>(split[2]).value_or(1));
}
s_settings_interface.SetIntValue("EmuCore/GS", "savenf", start);
s_settings_interface.SetIntValue("EmuCore/GS", "savelf", num);
s_settings_interface.SetIntValue("EmuCore/GS", "savebf", by);
continue;
}
else if (CHECK_ARG_PARAM("-dumpdirhw"))
{
s_settings_interface.SetStringValue("EmuCore/GS", "HWDumpDirectory", argv[++i]);
continue;
}
else if (CHECK_ARG_PARAM("-dumpdirsw"))
{
s_settings_interface.SetStringValue("EmuCore/GS", "SWDumpDirectory", argv[++i]);
continue;
}
else if (CHECK_ARG_PARAM("-loop"))
{
s_loop_count = StringUtil::FromChars<s32>(argv[++i]).value_or(0);
@@ -543,6 +633,19 @@ bool GSRunner::ParseCommandLineArgs(int argc, char* argv[], VMBootParameters& pa
s_settings_interface.SetIntValue("EmuCore/GS", "Renderer", static_cast<int>(type));
continue;
}
else if (CHECK_ARG_PARAM("-swthreads"))
{
const int swthreads = StringUtil::FromChars<int>(argv[++i]).value_or(0);
if (swthreads < 0)
{
Console.WriteLn("Invalid number of software threads");
return false;
}
Console.WriteLn(fmt::format("Setting number of software threads to {}", swthreads));
s_settings_interface.SetIntValue("EmuCore/GS", "SWExtraThreads", swthreads);
continue;
}
else if (CHECK_ARG_PARAM("-renderhacks"))
{
std::string str(argv[++i]);
@@ -643,6 +746,18 @@ bool GSRunner::ParseCommandLineArgs(int argc, char* argv[], VMBootParameters& pa
return false;
}
if (s_settings_interface.GetBoolValue("EmuCore/GS", "dump") && !dumpdir.empty())
{
if (s_settings_interface.GetStringValue("EmuCore/GS", "HWDumpDirectory").empty())
s_settings_interface.SetStringValue("EmuCore/GS", "HWDumpDirectory", dumpdir.c_str());
if (s_settings_interface.GetStringValue("EmuCore/GS", "SWDumpDirectory").empty())
s_settings_interface.SetStringValue("EmuCore/GS", "SWDumpDirectory", dumpdir.c_str());
// Disable saving frames with SaveSnapshotToMemory()
// Instead we save more "raw" snapshots when using -dump.
s_output_prefix = "";
}
// set up the frame dump directory
if (!s_output_prefix.empty())
{

View File

@@ -40,6 +40,7 @@ MemorySearchWidget::MemorySearchWidget(QWidget* parent)
connect(m_ui.listSearchResults->verticalScrollBar(), &QScrollBar::valueChanged, this, &MemorySearchWidget::onSearchResultsListScroll);
connect(m_ui.listSearchResults, &QListView::customContextMenuRequested, this, &MemorySearchWidget::onListSearchResultsContextMenu);
connect(m_ui.cmbSearchType, &QComboBox::currentIndexChanged, this, &MemorySearchWidget::onSearchTypeChanged);
connect(m_ui.cmbSearchComparison, &QComboBox::currentIndexChanged, this, &MemorySearchWidget::onSearchComparisonChanged);
// Ensures we don't retrigger the load results function unintentionally
m_resultsLoadTimer.setInterval(100);
@@ -249,7 +250,6 @@ bool handleSearchComparison(SearchComparison searchComparison, u32 searchAddress
}
case SearchComparison::IncreasedBy:
{
const T priorValue = priorResult->getValue<T>();
const T expectedIncrease = searchValue + priorValue;
return memoryValueComparator(SearchComparison::Equals, readValue, expectedIncrease);
@@ -282,6 +282,10 @@ bool handleSearchComparison(SearchComparison searchComparison, u32 searchAddress
const T expectedDecrease = priorValue - searchValue;
return memoryValueComparator(SearchComparison::Equals, readValue, expectedIncrease) || memoryValueComparator(SearchComparison::Equals, readValue, expectedDecrease);
}
case SearchComparison::UnknownValue:
{
return true;
}
default:
Console.Error("Debugger: Unknown type when doing memory search!");
return false;
@@ -506,63 +510,69 @@ void MemorySearchWidget::onSearchButtonClicked()
const bool isFilterSearch = sender() == m_ui.btnFilterSearch;
unsigned long long value;
switch (searchType)
if(searchComparison != SearchComparison::UnknownValue)
{
case SearchType::ByteType:
case SearchType::Int16Type:
case SearchType::Int32Type:
case SearchType::Int64Type:
value = searchValue.toULongLong(&ok, searchHex ? 16 : 10);
break;
case SearchType::FloatType:
case SearchType::DoubleType:
searchValue.toDouble(&ok);
break;
case SearchType::StringType:
ok = !searchValue.isEmpty();
break;
case SearchType::ArrayType:
ok = !searchValue.trimmed().isEmpty();
break;
}
if(doesSearchComparisonTakeInput(searchComparison))
{
switch (searchType)
{
case SearchType::ByteType:
case SearchType::Int16Type:
case SearchType::Int32Type:
case SearchType::Int64Type:
value = searchValue.toULongLong(&ok, searchHex ? 16 : 10);
break;
case SearchType::FloatType:
case SearchType::DoubleType:
searchValue.toDouble(&ok);
break;
case SearchType::StringType:
ok = !searchValue.isEmpty();
break;
case SearchType::ArrayType:
ok = !searchValue.trimmed().isEmpty();
break;
}
if (!ok)
{
QMessageBox::critical(this, tr("Debugger"), tr("Invalid search value"));
return;
}
if (!ok)
{
QMessageBox::critical(this, tr("Debugger"), tr("Invalid search value"));
return;
}
switch (searchType)
{
case SearchType::ArrayType:
case SearchType::StringType:
case SearchType::DoubleType:
case SearchType::FloatType:
break;
case SearchType::Int64Type:
if (value <= std::numeric_limits<unsigned long long>::max())
break;
case SearchType::Int32Type:
if (value <= std::numeric_limits<unsigned long>::max())
break;
case SearchType::Int16Type:
if (value <= std::numeric_limits<unsigned short>::max())
break;
case SearchType::ByteType:
if (value <= std::numeric_limits<unsigned char>::max())
break;
default:
QMessageBox::critical(this, tr("Debugger"), tr("Value is larger than type"));
switch (searchType)
{
case SearchType::ArrayType:
case SearchType::StringType:
case SearchType::DoubleType:
case SearchType::FloatType:
break;
case SearchType::Int64Type:
if (value <= std::numeric_limits<unsigned long long>::max())
break;
case SearchType::Int32Type:
if (value <= std::numeric_limits<unsigned long>::max())
break;
case SearchType::Int16Type:
if (value <= std::numeric_limits<unsigned short>::max())
break;
case SearchType::ByteType:
if (value <= std::numeric_limits<unsigned char>::max())
break;
default:
QMessageBox::critical(this, tr("Debugger"), tr("Value is larger than type"));
return;
}
}
if (!isFilterSearch && (searchComparison == SearchComparison::Changed || searchComparison == SearchComparison::ChangedBy
|| searchComparison == SearchComparison::Decreased || searchComparison == SearchComparison::DecreasedBy
|| searchComparison == SearchComparison::Increased || searchComparison == SearchComparison::IncreasedBy
|| searchComparison == SearchComparison::NotChanged))
{
QMessageBox::critical(this, tr("Debugger"), tr("This search comparison can only be used with filter searches."));
return;
}
if (!isFilterSearch && (searchComparison == SearchComparison::Changed || searchComparison == SearchComparison::ChangedBy
|| searchComparison == SearchComparison::Decreased || searchComparison == SearchComparison::DecreasedBy
|| searchComparison == SearchComparison::Increased || searchComparison == SearchComparison::IncreasedBy
|| searchComparison == SearchComparison::NotChanged))
{
QMessageBox::critical(this, tr("Debugger"), tr("This search comparison can only be used with filter searches."));
return;
}
}
QFutureWatcher<std::vector<SearchResult>>* workerWatcher = new QFutureWatcher<std::vector<SearchResult>>();
@@ -637,6 +647,23 @@ SearchComparison MemorySearchWidget::getCurrentSearchComparison()
return m_searchComparisonLabelMap.labelToEnum(m_ui.cmbSearchComparison->currentText());
}
bool MemorySearchWidget::doesSearchComparisonTakeInput(const SearchComparison comparison)
{
switch (comparison) {
case SearchComparison::Equals:
case SearchComparison::NotEquals:
case SearchComparison::GreaterThan:
case SearchComparison::GreaterThanOrEqual:
case SearchComparison::LessThan:
case SearchComparison::LessThanOrEqual:
case SearchComparison::IncreasedBy:
case SearchComparison::DecreasedBy:
return true;
default:
return false;
}
}
void MemorySearchWidget::onSearchTypeChanged(int newIndex)
{
if (newIndex < 4)
@@ -654,6 +681,11 @@ void MemorySearchWidget::onSearchTypeChanged(int newIndex)
updateSearchComparisonSelections();
}
void MemorySearchWidget::onSearchComparisonChanged(int newValue)
{
m_ui.txtSearchValue->setEnabled(getCurrentSearchComparison() != SearchComparison::UnknownValue);
}
void MemorySearchWidget::updateSearchComparisonSelections()
{
const QString selectedComparisonLabel = m_ui.cmbSearchComparison->currentText();
@@ -704,5 +736,11 @@ std::vector<SearchComparison> MemorySearchWidget::getValidSearchComparisonsForSt
comparisons.push_back(SearchComparison::ChangedBy);
comparisons.push_back(SearchComparison::NotChanged);
}
if(!hasResults)
{
comparisons.push_back(SearchComparison::UnknownValue);
}
return comparisons;
}

View File

@@ -48,6 +48,7 @@ public:
Changed,
ChangedBy,
NotChanged,
UnknownValue,
Invalid
};
@@ -69,6 +70,7 @@ public:
insert(SearchComparison::Changed, tr("Changed"));
insert(SearchComparison::ChangedBy, tr("Changed By"));
insert(SearchComparison::NotChanged, tr("Not Changed"));
insert(SearchComparison::UnknownValue, tr("Unknown Initial Value"));
insert(SearchComparison::Invalid, "");
}
SearchComparison labelToEnum(QString comparisonLabel)
@@ -120,6 +122,7 @@ public slots:
void onSearchButtonClicked();
void onSearchResultsListScroll(u32 value);
void onSearchTypeChanged(int newIndex);
void onSearchComparisonChanged(int newIndex);
void loadSearchResults();
void contextSearchResultGoToDisassembly();
void contextRemoveSearchResult();
@@ -146,4 +149,5 @@ private:
std::vector<SearchComparison> getValidSearchComparisonsForState(SearchType type, std::vector<SearchResult> &existingResults);
SearchType getCurrentSearchType();
SearchComparison getCurrentSearchComparison();
bool doesSearchComparisonTakeInput(SearchComparison comparison);
};

View File

@@ -148,6 +148,11 @@
<string>Less Than Or Equal</string>
</property>
</item>
<item>
<property name="text">
<string>Unknown Initial Value</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">

View File

@@ -115,6 +115,8 @@ MainWindow::~MainWindow()
cancelGameListRefresh();
destroySubWindows();
Common::DetachMousePositionCb();
// we compare here, since recreate destroys the window later
if (g_main_window == this)
g_main_window = nullptr;
@@ -150,6 +152,9 @@ void MainWindow::initialize()
#ifdef _WIN32
registerForDeviceNotifications();
#endif
if (Host::GetBoolSettingValue("EmuCore", "EnableMouseLock", false))
setupMouseMoveHandler();
}
// TODO: Figure out how to set this in the .ui file
@@ -1071,6 +1076,21 @@ bool MainWindow::shouldHideMainWindow() const
QtHost::InNoGUIMode();
}
bool MainWindow::shouldMouseLock() const
{
if (!s_vm_valid || s_vm_paused)
return false;
if (!Host::GetBoolSettingValue("EmuCore", "EnableMouseLock", false))
return false;
bool windowsHidden = (!m_debugger_window || m_debugger_window->isHidden()) &&
(!m_controller_settings_window || m_controller_settings_window->isHidden()) &&
(!m_settings_window || m_settings_window->isHidden());
return windowsHidden && (isActiveWindow() || isRenderingFullscreen());
}
bool MainWindow::shouldAbortForMemcardBusy(const VMLock& lock)
{
if (MemcardBusy::IsBusy() && !GSDumpReplayer::IsReplayingDump())
@@ -2234,6 +2254,15 @@ void MainWindow::registerForDeviceNotifications()
DEV_BROADCAST_DEVICEINTERFACE_W filter = {sizeof(DEV_BROADCAST_DEVICEINTERFACE_W), DBT_DEVTYP_DEVICEINTERFACE};
m_device_notification_handle =
RegisterDeviceNotificationW((HANDLE)winId(), &filter, DEVICE_NOTIFY_WINDOW_HANDLE | DEVICE_NOTIFY_ALL_INTERFACE_CLASSES);
// Set up the raw input device for mouse grabbing
RAWINPUTDEVICE rid;
rid.usUsagePage = 0x01; // Generic desktop controls
rid.usUsage = 0x02; // Mouse
rid.dwFlags = RIDEV_INPUTSINK;
rid.hwndTarget = (HWND)winId();
RegisterRawInputDevices(&rid, 1, sizeof(RAWINPUTDEVICE));
#endif
}
@@ -2262,6 +2291,26 @@ bool MainWindow::nativeEvent(const QByteArray& eventType, void* message, qintptr
*result = 1;
return true;
}
if (msg->message == WM_INPUT)
{
UINT dwSize = 40;
static BYTE lpb[40];
if (GetRawInputData((HRAWINPUT)msg->lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)))
{
const RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEMOUSE)
{
const RAWMOUSE& mouse = raw->data.mouse;
if (mouse.usFlags == MOUSE_MOVE_ABSOLUTE || mouse.usFlags == MOUSE_MOVE_RELATIVE)
{
POINT cursorPos;
GetCursorPos(&cursorPos);
checkMousePosition(cursorPos.x, cursorPos.y);
}
}
}
}
}
return QMainWindow::nativeEvent(eventType, message, result);
@@ -2541,6 +2590,53 @@ QWidget* MainWindow::getDisplayContainer() const
return (m_display_container ? static_cast<QWidget*>(m_display_container) : static_cast<QWidget*>(m_display_widget));
}
void MainWindow::setupMouseMoveHandler()
{
auto mouse_cb_fn = [](int x, int y)
{
if(g_main_window)
g_main_window->checkMousePosition(x, y);
};
if(!Common::AttachMousePositionCb(mouse_cb_fn))
{
Console.Warning("Unable to setup mouse position cb!");
}
return;
}
void MainWindow::checkMousePosition(int x, int y)
{
if (!shouldMouseLock())
return;
const QPoint globalCursorPos = {x, y};
QRect windowBounds = isRenderingFullscreen() ? screen()->geometry() : geometry();
if (windowBounds.contains(globalCursorPos))
return;
Common::SetMousePosition(
std::clamp(globalCursorPos.x(), windowBounds.left(), windowBounds.right()),
std::clamp(globalCursorPos.y(), windowBounds.top(), windowBounds.bottom()));
/*
Provided below is how we would handle this if we were using low level hooks (What is used in Common::AttachMouseCb)
We currently use rawmouse on Windows, so Common::SetMousePosition called directly works fine.
*/
#if 0
// We are currently in a low level hook. SetCursorPos here (what is in Common::SetMousePosition) will not work!
// Let's (a)buse Qt's event loop to dispatch the call at a later time, outside of the hook.
QMetaObject::invokeMethod(
this, [=]() {
Common::SetMousePosition(
std::clamp(globalCursorPos.x(), windowBounds.left(), windowBounds.right()),
std::clamp(globalCursorPos.y(), windowBounds.top(), windowBounds.bottom()));
},
Qt::QueuedConnection);
#endif
}
void MainWindow::saveDisplayWindowGeometryToConfig()
{
QWidget* container = getDisplayContainer();

View File

@@ -104,7 +104,7 @@ public:
void rescanFile(const std::string& path);
void openDebugger();
void checkMousePosition(int x, int y);
public Q_SLOTS:
void checkForUpdates(bool display_message, bool force_check);
void refreshGameList(bool invalidate_cache);
@@ -128,7 +128,7 @@ private Q_SLOTS:
void mouseModeRequested(bool relative_mode, bool hide_cursor);
void releaseRenderWindow();
void focusDisplayWidget();
void setupMouseMoveHandler();
void onGameListRefreshComplete();
void onGameListRefreshProgress(const QString& status, int current, int total);
void onGameListSelectionChanged();
@@ -182,7 +182,6 @@ private Q_SLOTS:
void onInputRecPlayActionTriggered();
void onInputRecStopActionTriggered();
void onInputRecOpenViewer();
void onVMStarting();
void onVMStarted();
void onVMPaused();
@@ -240,6 +239,7 @@ private:
bool isRenderingToMain() const;
bool shouldHideMouseCursor() const;
bool shouldHideMainWindow() const;
bool shouldMouseLock() const;
void switchToGameListView();
void switchToEmulationView();

View File

@@ -3,6 +3,7 @@
#include "InterfaceSettingsWidget.h"
#include "AutoUpdaterDialog.h"
#include "Common.h"
#include "MainWindow.h"
#include "SettingWidgetBinder.h"
#include "SettingsWindow.h"
@@ -36,6 +37,8 @@ const char* InterfaceSettingsWidget::THEME_NAMES[] = {
//: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated.
QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Cobalt Sky (Blue) [Dark]"),
//: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated.
QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "AMOLED (Black) [Dark]"),
//: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated.
QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Ruby (Black/Red) [Dark]"),
//: Ignore what Crowdin says in this string about "[Light]/[Dark]" being untouchable here, these are not variables in this case and must be translated.
QT_TRANSLATE_NOOP("InterfaceSettingsWidget", "Sapphire (Black/Blue) [Dark]"),
@@ -61,6 +64,7 @@ const char* InterfaceSettingsWidget::THEME_VALUES[] = {
"ScarletDevilRed",
"VioletAngelPurple",
"CobaltSky",
"AMOLED",
"Ruby",
"Sapphire",
"Emerald",
@@ -80,6 +84,13 @@ InterfaceSettingsWidget::InterfaceSettingsWidget(SettingsWindow* dialog, QWidget
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.pauseOnControllerDisconnection, "UI", "PauseOnControllerDisconnection", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.discordPresence, "EmuCore", "EnableDiscordPresence", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.mouseLock, "EmuCore", "EnableMouseLock", false);
connect(m_ui.mouseLock, &QCheckBox::checkStateChanged, [](Qt::CheckState state) {
if (state == Qt::Checked)
Common::AttachMousePositionCb([](int x, int y) { g_main_window->checkMousePosition(x, y); });
else
Common::DetachMousePositionCb();
});
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.startFullscreen, "UI", "StartFullscreen", false);
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.doubleClickTogglesFullscreen, "UI", "DoubleClickTogglesFullscreen",
true);
@@ -161,6 +172,9 @@ InterfaceSettingsWidget::InterfaceSettingsWidget(SettingsWindow* dialog, QWidget
dialog->registerWidgetHelp(
m_ui.discordPresence, tr("Enable Discord Presence"), tr("Unchecked"),
tr("Shows the game you are currently playing as part of your profile in Discord."));
dialog->registerWidgetHelp(
m_ui.mouseLock, tr("Enable Mouse Lock"), tr("Unchecked"),
tr("Locks the mouse cursor to the windows when PCSX2 is in focus and all other windows are closed.<br><b>Unavailable on Linux Wayland.</b><br><b>Requires accessibility permissions on macOS.</b>"));
dialog->registerWidgetHelp(
m_ui.doubleClickTogglesFullscreen, tr("Double-Click Toggles Fullscreen"), tr("Checked"),
tr("Allows switching in and out of fullscreen mode by double-clicking the game window."));

View File

@@ -50,6 +50,13 @@
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="mouseLock">
<property name="text">
<string>Enable Mouse Lock</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="pauseOnStart">
<property name="text">

View File

@@ -121,7 +121,7 @@ bool MemoryCardConvertWorker::ConvertToFolder(const std::string& srcFileName, co
// Set progress bar to the literal number of bytes in the memcard.
// Plus two because there is a lag period after the Save calls complete
// where the progress bar stalls out; this lets us stop the progress bar
// just shy of 50 and 100% so it seems like its still doing some work.
// just shy of 50 and 100% so it seems like it's still doing some work.
this->SetProgressRange((sourceBuffer.size() * 2) + 2);
this->SetProgressValue(0);
@@ -161,5 +161,7 @@ bool MemoryCardConvertWorker::ConvertToFolder(const std::string& srcFileName, co
this->IncrementProgressValue();
}
this->IncrementProgressValue();
return true;
}

View File

@@ -280,7 +280,7 @@ void QtHost::SetStyleFromSettings()
pizzaPalette.setColor(QPalette::Link, highlight.darker());
pizzaPalette.setColor(QPalette::Highlight, highlight);
pizzaPalette.setColor(QPalette::HighlightedText, Qt::white);
pizzaPalette.setColor(QPalette::Active, QPalette::Button, extr);
pizzaPalette.setColor(QPalette::Disabled, QPalette::ButtonText, gray.darker());
pizzaPalette.setColor(QPalette::Disabled, QPalette::WindowText, gray.darker());
@@ -428,6 +428,42 @@ void QtHost::SetStyleFromSettings()
qApp->setPalette(cobaltSkyPalette);
qApp->setStyleSheet(QString());
}
else if (theme == "AMOLED")
{
// Custom palette by KamFretoZ, A pure concentrated darkness
// of a theme designed for maximum eye comfort and benefits
// OLED screens.
qApp->setStyle(QStyleFactory::create("Fusion"));
const QColor black(0, 0, 0);
const QColor gray(25, 25, 25);
const QColor lighterGray(75, 75, 75);
const QColor blue(198, 238, 255);
QPalette AMOLEDPalette;
AMOLEDPalette.setColor(QPalette::Window, black);
AMOLEDPalette.setColor(QPalette::WindowText, Qt::white);
AMOLEDPalette.setColor(QPalette::Base, gray);
AMOLEDPalette.setColor(QPalette::AlternateBase, black);
AMOLEDPalette.setColor(QPalette::ToolTipBase, gray);
AMOLEDPalette.setColor(QPalette::ToolTipText, Qt::white);
AMOLEDPalette.setColor(QPalette::Text, Qt::white);
AMOLEDPalette.setColor(QPalette::Button, gray);
AMOLEDPalette.setColor(QPalette::ButtonText, Qt::white);
AMOLEDPalette.setColor(QPalette::Link, blue);
AMOLEDPalette.setColor(QPalette::Highlight, lighterGray);
AMOLEDPalette.setColor(QPalette::HighlightedText, Qt::white);
AMOLEDPalette.setColor(QPalette::PlaceholderText, QColor(Qt::white).darker());
AMOLEDPalette.setColor(QPalette::Active, QPalette::Button, gray);
AMOLEDPalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(Qt::white).darker());
AMOLEDPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(Qt::white).darker());
AMOLEDPalette.setColor(QPalette::Disabled, QPalette::Text, QColor(Qt::white).darker());
AMOLEDPalette.setColor(QPalette::Disabled, QPalette::Light, QColor(Qt::white).darker());
qApp->setPalette(AMOLEDPalette);
qApp->setStyleSheet(QString());
}
else if (theme == "Ruby")
{
// Custom palette by Daisouji, Black as main color and Red as complimentary.

View File

@@ -16585,7 +16585,7 @@ Close any other instances of PCSX2, or restart your computer.
</message>
<message>
<location filename="../../pcsx2/SIO/Memcard/MemoryCardFile.cpp" line="497"/>
<location filename="../../pcsx2/SIO/Memcard/MemoryCardFolder.cpp" line="2344"/>
<location filename="../../pcsx2/SIO/Memcard/MemoryCardFolder.cpp" line="2345"/>
<source>Memory Card &apos;{}&apos; was saved to storage.</source>
<translation type="unfinished"></translation>
</message>
@@ -17162,162 +17162,168 @@ This action cannot be reversed, and you will lose any saves on the card.</source
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="123"/>
<location filename="../Debugger/MemorySearchWidget.h" line="59"/>
<location filename="../Debugger/MemorySearchWidget.h" line="60"/>
<source>Equals</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="128"/>
<location filename="../Debugger/MemorySearchWidget.h" line="60"/>
<location filename="../Debugger/MemorySearchWidget.h" line="61"/>
<source>Not Equals</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="133"/>
<location filename="../Debugger/MemorySearchWidget.h" line="61"/>
<location filename="../Debugger/MemorySearchWidget.h" line="62"/>
<source>Greater Than</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="138"/>
<location filename="../Debugger/MemorySearchWidget.h" line="62"/>
<location filename="../Debugger/MemorySearchWidget.h" line="63"/>
<source>Greater Than Or Equal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="143"/>
<location filename="../Debugger/MemorySearchWidget.h" line="63"/>
<location filename="../Debugger/MemorySearchWidget.h" line="64"/>
<source>Less Than</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="148"/>
<location filename="../Debugger/MemorySearchWidget.h" line="64"/>
<location filename="../Debugger/MemorySearchWidget.h" line="65"/>
<source>Less Than Or Equal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="156"/>
<location filename="../Debugger/MemorySearchWidget.ui" line="153"/>
<location filename="../Debugger/MemorySearchWidget.h" line="73"/>
<source>Unknown Initial Value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="161"/>
<source>Comparison</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="167"/>
<location filename="../Debugger/MemorySearchWidget.ui" line="172"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.ui" line="181"/>
<location filename="../Debugger/MemorySearchWidget.ui" line="186"/>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="94"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="95"/>
<source>Search Results List Context Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="100"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="101"/>
<source>Copy Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="104"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="105"/>
<source>Go to in Disassembly</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="108"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="109"/>
<source>Add to Saved Memory Addresses</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="115"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="116"/>
<source>Remove Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="486"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="494"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="500"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="531"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="555"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="564"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="490"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="498"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="504"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="539"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="563"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="573"/>
<source>Debugger</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="486"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="490"/>
<source>Invalid start address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="494"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="498"/>
<source>Invalid end address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="500"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="504"/>
<source>Start address can&apos;t be equal to or greater than the end address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="531"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="539"/>
<source>Invalid search value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="555"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="563"/>
<source>Value is larger than type</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="564"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="573"/>
<source>This search comparison can only be used with filter searches.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="577"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="587"/>
<source>%0 results found</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.cpp" line="594"/>
<location filename="../Debugger/MemorySearchWidget.cpp" line="604"/>
<source>Searching...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="65"/>
<location filename="../Debugger/MemorySearchWidget.h" line="66"/>
<source>Increased</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="66"/>
<location filename="../Debugger/MemorySearchWidget.h" line="67"/>
<source>Increased By</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="67"/>
<location filename="../Debugger/MemorySearchWidget.h" line="68"/>
<source>Decreased</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="68"/>
<location filename="../Debugger/MemorySearchWidget.h" line="69"/>
<source>Decreased By</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="69"/>
<location filename="../Debugger/MemorySearchWidget.h" line="70"/>
<source>Changed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="70"/>
<location filename="../Debugger/MemorySearchWidget.h" line="71"/>
<source>Changed By</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemorySearchWidget.h" line="71"/>
<location filename="../Debugger/MemorySearchWidget.h" line="72"/>
<source>Not Changed</source>
<translation type="unfinished"></translation>
</message>
@@ -18279,12 +18285,12 @@ Ejecting {3} and replacing it with {2}.</source>
<context>
<name>Pcsx2Config</name>
<message>
<location filename="../../pcsx2/Pcsx2Config.cpp" line="1118"/>
<location filename="../../pcsx2/Pcsx2Config.cpp" line="1135"/>
<source>Disabled (Noisy)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Pcsx2Config.cpp" line="1119"/>
<location filename="../../pcsx2/Pcsx2Config.cpp" line="1136"/>
<source>TimeStretch (Recommended)</source>
<translation type="unfinished"></translation>
</message>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -1347,6 +1347,7 @@ function(setup_main_executable target)
set_target_properties(${target} PROPERTIES
MACOSX_BUNDLE true
MACOSX_BUNDLE_INFO_PLIST "${PCSX2_SOURCE_DIR}/Resources/Info.plist.in"
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${PCSX2_SOURCE_DIR}/Resources/PCSX2.entitlements"
OUTPUT_NAME PCSX2
# Fixes complaints when Xcode tries to sign for running locally about MoltenVK not being signed
XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS --deep

View File

@@ -745,6 +745,8 @@ struct Pcsx2Config
SaveFrame : 1,
SaveTexture : 1,
SaveDepth : 1,
SaveAlpha : 1,
SaveInfo : 1,
DumpReplaceableTextures : 1,
DumpReplaceableMipmaps : 1,
DumpTexturesWithFMVActive : 1,
@@ -822,6 +824,10 @@ struct Pcsx2Config
int SaveN = 0;
int SaveL = 5000;
int SaveB = 1;
int SaveNF = 0;
int SaveLF = -1;
int SaveBF = 1;
s8 ExclusiveFullscreenControl = -1;
GSScreenshotSize ScreenshotSize = GSScreenshotSize::WindowResolution;
@@ -865,6 +871,9 @@ struct Pcsx2Config
bool operator==(const GSOptions& right) const;
bool operator!=(const GSOptions& right) const;
// Should we dump this draw/frame?
bool ShouldDump(int draw, int frame) const;
};
struct SPU2Options

View File

@@ -203,16 +203,15 @@ void GSDrawingContext::Dump(const std::string& filename)
"\tTBW:%u\n"
"\tPSM:0x%x\n"
"\tTW:%u\n"
"\tTH:%u\n"
"\tTCC:%u\n"
"\tTFX:%u\n"
"\tCBP:0x%x\n"
"\tCPSM:0x%x\n"
"\tCSM:%u\n"
"\tCSA:%u\n"
"\tCLD:%u\n"
"\tTH:%u\n",
TEX0.TBP0, TEX0.TBW, TEX0.PSM, TEX0.TW, TEX0.TCC, TEX0.TFX, TEX0.CBP, TEX0.CPSM, TEX0.CSM, TEX0.CSA, TEX0.CLD,
static_cast<uint32_t>(TEX0.TH));
"\tCLD:%u\n\n",
TEX0.TBP0, TEX0.TBW, TEX0.PSM, TEX0.TW, static_cast<uint32_t>(TEX0.TH), TEX0.TCC, TEX0.TFX, TEX0.CBP, TEX0.CPSM, TEX0.CSM, TEX0.CSA, TEX0.CLD);
fprintf(fp,
"TEX1\n"

View File

@@ -87,7 +87,6 @@ public:
fprintf(fp, "SCANMSK\n"
"\tMSK:%u\n\n"
"\n"
, SCANMSK.MSK);
fprintf(fp, "TEXA\n"

View File

@@ -662,11 +662,7 @@ void GSLocalMemory::SaveBMP(const std::string& fn, u32 bp, u32 bw, u32 psm, int
}
}
#ifdef PCSX2_DEVBUILD
GSPng::Save(GSPng::RGB_A_PNG, fn, static_cast<u8*>(bits), w, h, pitch, GSConfig.PNGCompressionLevel, false);
#else
GSPng::Save(GSPng::RGB_PNG, fn, static_cast<u8*>(bits), w, h, pitch, GSConfig.PNGCompressionLevel, false);
#endif
GSPng::Save((IsDevBuild || GSConfig.SaveAlpha) ? GSPng::RGB_A_PNG : GSPng::RGB_PNG, fn, static_cast<u8*>(bits), w, h, pitch, GSConfig.PNGCompressionLevel, false);
_aligned_free(bits);
}

View File

@@ -443,7 +443,7 @@ void GSState::DumpVertices(const std::string& filename)
file << std::fixed << std::setprecision(4);
for (u32 i = 0; i < count; ++i)
{
file << "\t" << "v" << i << ": ";
file << "\t" << std::dec << "v" << i << ": ";
GSVertex v = buffer[m_index.buff[i]];
const float x = (v.XYZ.X - (int)m_context->XYOFFSET.OFX) / 16.0f;
@@ -461,7 +461,7 @@ void GSState::DumpVertices(const std::string& filename)
file << std::fixed << std::setprecision(6);
for (u32 i = 0; i < count; ++i)
{
file << "\t" << "v" << i << ": ";
file << "\t" << std::dec << "v" << i << ": ";
GSVertex v = buffer[m_index.buff[i]];
file << std::setfill('0') << std::setw(3) << unsigned(v.RGBAQ.R) << DEL;
@@ -479,7 +479,7 @@ void GSState::DumpVertices(const std::string& filename)
file << "TEXTURE COORDS (" << qualifier << ")" << std::endl;;
for (u32 i = 0; i < count; ++i)
{
file << "\t" << "v" << i << ": ";
file << "\t" << "v" << std::dec << i << ": ";
const GSVertex v = buffer[m_index.buff[i]];
// note
@@ -1994,7 +1994,7 @@ void GSState::InitReadFIFO(u8* mem, int len)
// Read the image all in one go.
m_mem.ReadImageX(m_tr.x, m_tr.y, m_tr.buff, m_tr.total, m_env.BITBLTBUF, m_env.TRXPOS, m_env.TRXREG);
if (GSConfig.DumpGSData && GSConfig.SaveRT && s_n >= GSConfig.SaveN)
if (GSConfig.SaveRT && GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
const std::string s(GetDrawDumpPath(
"%05d_read_%05x_%d_%d_%d_%d_%d_%d.bmp",
@@ -2742,7 +2742,7 @@ int GSState::Defrost(const freezeData* fd)
m_mem.m_clut.Reset();
(PRIM->CTXT == 0) ? ApplyTEX0<0>(m_context->TEX0) : ApplyTEX0<1>(m_context->TEX0);
g_perfmon.SetFrame(5000);
g_perfmon.SetFrame(0);
ResetPCRTC();

View File

@@ -546,9 +546,9 @@ void GSRenderer::EndPresentFrame()
void GSRenderer::VSync(u32 field, bool registers_written, bool idle_frame)
{
if (GSConfig.DumpGSData && s_n >= GSConfig.SaveN)
if (GSConfig.SaveInfo && GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
DumpGSPrivRegs(*m_regs, GetDrawDumpPath("vsync_%05d_f%lld_gs_reg.txt", s_n, g_perfmon.GetFrame()));
DumpGSPrivRegs(*m_regs, GetDrawDumpPath("%05d_f%05lld_vsync_gs_reg.txt", s_n, g_perfmon.GetFrame()));
}
const int fb_sprite_blits = g_perfmon.GetDisplayFramebufferSpriteBlits();

View File

@@ -35,11 +35,8 @@ bool GSTexture::Save(const std::string& fn)
return res;
}
#ifdef PCSX2_DEVBUILD
GSPng::Format format = GSPng::RGB_A_PNG;
#else
GSPng::Format format = GSPng::RGB_PNG;
#endif
GSPng::Format format = (IsDevBuild || GSConfig.SaveAlpha) ? GSPng::RGB_A_PNG : GSPng::RGB_PNG;
switch (m_format)
{
case Format::UNorm8:

View File

@@ -154,6 +154,60 @@ bool GSHwHack::GSC_SFEX3(GSRendererHW& r, int& skip)
return true;
}
bool GSHwHack::GSC_DTGames(GSRendererHW& r, int& skip)
{
if (skip == 0)
{
// The game does a shuffle based on the result of a copy from the depth buffer, which ends up looking bizzare so PCSX2 doesn't know how to deal with it.
// What they're actually doing is copying the red/green channel of the result (kind of a shadow stencil) to the alpha channel.
// The further problem to this is the limitation of alpha we can save on an RT as they copy in 255, so I can cheese it here pretending it's RTA'd
if (RTME && RFPSM == PSMCT32 && RTBP0 == RFBP && RTPSM == PSMCT16 && RTEST.ATE && RTEST.ATST == ATST_NEVER && RTEST.AFAIL == AFAIL_FB_ONLY && RFBMSK == 0xFFFFFF)
{
GSTextureCache::Target* rt = g_texture_cache->LookupTarget(GIFRegTEX0::Create(RTBP0, RFBW, RFPSM),
GSVector2i(1, 1), r.GetTextureScaleFactor(), GSTextureCache::RenderTarget);
if (!rt)
return false;
// Clear down the alpha first.
GSHWDrawConfig& clear = r.BeginHLEHardwareDraw(
rt->GetTexture(), nullptr, rt->GetScale(), nullptr, rt->GetScale(), rt->GetUnscaledRect());
clear.colormask.wrgba = 0;
clear.colormask.wa = 1;
r.EndHLEHardwareDraw(false);
// Shuffle the green channel in to alpha.
GSHWDrawConfig& config = r.BeginHLEHardwareDraw(
rt->GetTexture(), nullptr, rt->GetScale(), rt->GetTexture(), rt->GetScale(), rt->GetUnscaledRect());
config.ps.shuffle = 1;
config.ps.dst_fmt = GSLocalMemory::PSM_FMT_32;
config.ps.write_rg = 0;
config.ps.shuffle_same = 0;
config.ps.real16src = 0;
config.ps.shuffle_across = 1;
config.ps.process_rg = r.SHUFFLE_READ;
config.ps.process_ba = r.SHUFFLE_WRITE;
config.colormask.wrgba = 0;
config.colormask.wa = 1;
config.ps.rta_correction = 1;
config.ps.tfx = TFX_DECAL;
config.ps.tcc = true;
r.EndHLEHardwareDraw(true);
rt->m_alpha_min = 0;
rt->m_alpha_max = 255;
skip = 69;
}
}
else
{
if (RTPSM != PSMCT16)
skip = 0;
}
return true;
}
bool GSHwHack::GSC_Tekken5(GSRendererHW& r, int& skip)
{
if (skip == 0)
@@ -1471,6 +1525,7 @@ const GSHwHack::Entry<GSRendererHW::GSC_Ptr> GSHwHack::s_get_skip_count_function
CRC_F(GSC_SakuraWarsSoLongMyLove),
CRC_F(GSC_Simple2000Vol114),
CRC_F(GSC_SFEX3),
CRC_F(GSC_DTGames),
CRC_F(GSC_TalesOfLegendia),
CRC_F(GSC_TalesofSymphonia),
CRC_F(GSC_UrbanReign),

View File

@@ -11,6 +11,7 @@ public:
static bool GSC_Manhunt2(GSRendererHW& r, int& skip);
static bool GSC_SacredBlaze(GSRendererHW& r, int& skip);
static bool GSC_SFEX3(GSRendererHW& r, int& skip);
static bool GSC_DTGames(GSRendererHW& r, int& skip);
static bool GSC_Tekken5(GSRendererHW& r, int& skip);
static bool GSC_BurnoutGames(GSRendererHW& r, int& skip);
static bool GSC_BlackAndBurnoutSky(GSRendererHW& r, int& skip);

View File

@@ -178,15 +178,10 @@ GSTexture* GSRendererHW::GetOutput(int i, float& scale, int& y_offset)
GL_CACHE("Frame y offset %d pixels, unit %d", y_offset, i);
}
#ifdef ENABLE_OGL_DEBUG
if (GSConfig.DumpGSData)
if (GSConfig.SaveFrame && GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
if (GSConfig.SaveFrame && s_n >= GSConfig.SaveN)
{
t->Save(GetDrawDumpPath("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), i, static_cast<int>(TEX0.TBP0), psm_str(TEX0.PSM)));
}
t->Save(GetDrawDumpPath("%05d_f%05lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), i, static_cast<int>(TEX0.TBP0), psm_str(TEX0.PSM)));
}
#endif
}
return t;
@@ -210,10 +205,8 @@ GSTexture* GSRendererHW::GetFeedbackOutput(float& scale)
GSTexture* t = rt->m_texture;
scale = rt->m_scale;
#ifdef ENABLE_OGL_DEBUG
if (GSConfig.DumpGSData && GSConfig.SaveFrame && s_n >= GSConfig.SaveN)
t->Save(GetDrawDumpPath("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), 3, static_cast<int>(TEX0.TBP0), psm_str(TEX0.PSM)));
#endif
if (GSConfig.SaveFrame && GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
t->Save(GetDrawDumpPath("%05d_f%05lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), 3, static_cast<int>(TEX0.TBP0), psm_str(TEX0.PSM)));
return t;
}
@@ -554,7 +547,7 @@ void GSRendererHW::ConvertSpriteTextureShuffle(u32& process_rg, u32& process_ba,
}
else
{
if ((floor(m_vt.m_max.p.y) <= rt->m_valid.w) && ((floor(m_vt.m_max.p.x) > (m_cached_ctx.FRAME.FBW * 64)) || (rt->m_TEX0.TBW != m_cached_ctx.FRAME.FBW)))
if (((m_r.width() + 8) & ~(GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].pgs.x - 1)) != GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].pgs.x && (floor(m_vt.m_max.p.y) <= rt->m_valid.w) && ((floor(m_vt.m_max.p.x) > (m_cached_ctx.FRAME.FBW * 64)) || (rt->m_TEX0.TBW < m_cached_ctx.FRAME.FBW)))
{
half_bottom_vert = false;
half_bottom_uv = false;
@@ -952,7 +945,7 @@ GSVector2i GSRendererHW::GetValidSize(const GSTextureCache::Source* tex)
// Make sure sizes are within max limit of 2048,
// this shouldn't happen but if it does it needs to be addressed,
// clamp the size so at least it doesn't cause a crash.
constexpr int valid_max_size = 2048;
constexpr int valid_max_size = 2047;
if ((width > valid_max_size) || (height > valid_max_size))
{
Console.Warning("Warning: GetValidSize out of bounds, X:%d Y:%d", width, height);
@@ -1999,7 +1992,7 @@ void GSRendererHW::RoundSpriteOffset()
void GSRendererHW::Draw()
{
if (GSConfig.DumpGSData && (s_n >= GSConfig.SaveN))
if (GSConfig.SaveInfo && GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
std::string s;
@@ -3308,15 +3301,15 @@ void GSRendererHW::Draw()
src->m_texture = src->m_from_target->m_texture;
}
if (GSConfig.DumpGSData)
if (GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
const u64 frame = g_perfmon.GetFrame();
std::string s;
if (GSConfig.SaveTexture && s_n >= GSConfig.SaveN && src)
if (GSConfig.SaveTexture && src)
{
s = GetDrawDumpPath("%05d_f%lld_itex_%05x_%s_%d%d_%02x_%02x_%02x_%02x.dds",
s = GetDrawDumpPath("%05d_f%05lld_itex_%05x_%s_%d%d_%02x_%02x_%02x_%02x.dds",
s_n, frame, static_cast<int>(m_cached_ctx.TEX0.TBP0), psm_str(m_cached_ctx.TEX0.PSM),
static_cast<int>(m_cached_ctx.CLAMP.WMS), static_cast<int>(m_cached_ctx.CLAMP.WMT),
static_cast<int>(m_cached_ctx.CLAMP.MINU), static_cast<int>(m_cached_ctx.CLAMP.MAXU),
@@ -3326,23 +3319,23 @@ void GSRendererHW::Draw()
if (src->m_palette)
{
s = GetDrawDumpPath("%05d_f%lld_itpx_%05x_%s.dds", s_n, frame, m_cached_ctx.TEX0.CBP, psm_str(m_cached_ctx.TEX0.CPSM));
s = GetDrawDumpPath("%05d_f%05lld_itpx_%05x_%s.dds", s_n, frame, m_cached_ctx.TEX0.CBP, psm_str(m_cached_ctx.TEX0.CPSM));
src->m_palette->Save(s);
}
}
if (rt && GSConfig.SaveRT && s_n >= GSConfig.SaveN)
if (rt && GSConfig.SaveRT)
{
s = GetDrawDumpPath("%05d_f%lld_rt0_%05x_%s.bmp", s_n, frame, m_cached_ctx.FRAME.Block(), psm_str(m_cached_ctx.FRAME.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rt0_%05x_%s.bmp", s_n, frame, m_cached_ctx.FRAME.Block(), psm_str(m_cached_ctx.FRAME.PSM));
if (rt->m_texture)
rt->m_texture->Save(s);
}
if (ds && GSConfig.SaveDepth && s_n >= GSConfig.SaveN)
if (ds && GSConfig.SaveDepth)
{
s = GetDrawDumpPath("%05d_f%lld_rz0_%05x_%s.bmp", s_n, frame, m_cached_ctx.ZBUF.Block(), psm_str(m_cached_ctx.ZBUF.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rz0_%05x_%s.bmp", s_n, frame, m_cached_ctx.ZBUF.Block(), psm_str(m_cached_ctx.ZBUF.PSM));
if (ds->m_texture)
ds->m_texture->Save(s);
@@ -3457,10 +3450,7 @@ void GSRendererHW::Draw()
GSTextureCache::RenderTarget, m_cached_ctx.ZBUF.Block(), m_cached_ctx.ZBUF.PSM, zm);
}
//
if (GSConfig.DumpGSData)
if (GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
const bool writeback_HDR_texture = g_gs_device->GetHDRTexture() != nullptr;
if (writeback_HDR_texture)
@@ -3474,24 +3464,19 @@ void GSRendererHW::Draw()
std::string s;
if (rt && GSConfig.SaveRT && s_n >= GSConfig.SaveN)
if (rt && GSConfig.SaveRT)
{
s = GetDrawDumpPath("%05d_f%lld_rt1_%05x_(%05x)_%s.bmp", s_n, frame, m_cached_ctx.FRAME.Block(), rt->m_TEX0.TBP0, psm_str(m_cached_ctx.FRAME.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rt1_%05x_%s.bmp", s_n, frame, m_cached_ctx.FRAME.Block(), psm_str(m_cached_ctx.FRAME.PSM));
rt->m_texture->Save(s);
}
if (ds && GSConfig.SaveDepth && s_n >= GSConfig.SaveN)
if (ds && GSConfig.SaveDepth)
{
s = GetDrawDumpPath("%05d_f%lld_rz1_%05x_(%05x)_%s.bmp", s_n, frame, m_cached_ctx.ZBUF.Block(), ds->m_TEX0.TBP0, psm_str(m_cached_ctx.ZBUF.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rz1_%05x_%s.bmp", s_n, frame, m_cached_ctx.ZBUF.Block(), psm_str(m_cached_ctx.ZBUF.PSM));
ds->m_texture->Save(s);
}
if (GSConfig.SaveL > 0 && (s_n - GSConfig.SaveN) > GSConfig.SaveL)
{
GSConfig.DumpGSData = 0;
}
}
if (rt)

View File

@@ -179,12 +179,9 @@ GSTexture* GSRendererSW::GetOutput(int i, float& scale, int& y_offset)
m_texture[index]->Update(out_r, m_output, pitch);
if (GSConfig.DumpGSData)
if (GSConfig.SaveFrame && GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
if (GSConfig.SaveFrame && s_n >= GSConfig.SaveN)
{
m_texture[index]->Save(GetDrawDumpPath("%05d_f%lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), i, (int)curFramebuffer.Block(), psm_str(curFramebuffer.PSM)));
}
m_texture[index]->Save(GetDrawDumpPath("%05d_f%05lld_fr%d_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), i, (int)curFramebuffer.Block(), psm_str(curFramebuffer.PSM)));
}
}
@@ -312,22 +309,19 @@ void GSRendererSW::Draw()
{
const GSDrawingContext* context = m_context;
if (GSConfig.DumpGSData)
if (GSConfig.SaveInfo && GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
std::string s;
if (s_n >= GSConfig.SaveN)
{
// Dump Register state
s = GetDrawDumpPath("%05d_context.txt", s_n);
// Dump Register state
s = GetDrawDumpPath("%05d_context.txt", s_n);
m_draw_env->Dump(s);
m_context->Dump(s);
m_draw_env->Dump(s);
m_context->Dump(s);
// Dump vertices
s = GetDrawDumpPath("%05d_vertex.txt", s_n);
DumpVertices(s);
}
// Dump vertices
s = GetDrawDumpPath("%05d_vertex.txt", s_n);
DumpVertices(s);
}
auto data = m_vertex_heap.make_shared<SharedData>().cast<GSRasterizerData>();
@@ -431,9 +425,7 @@ void GSRendererSW::Draw()
sd->UsePages(fb_pages, m_context->offset.fb.psm(), zb_pages, m_context->offset.zb.psm());
//
if (GSConfig.DumpGSData)
if (GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
Sync(2);
@@ -444,36 +436,36 @@ void GSRendererSW::Draw()
// It will breaks the few games that really uses 16 bits RT
bool texture_shuffle = ((context->FRAME.PSM & 0x2) && ((context->TEX0.PSM & 3) == 2) && (m_vt.m_primclass == GS_SPRITE_CLASS));
if (GSConfig.SaveTexture && s_n >= GSConfig.SaveN && PRIM->TME)
if (GSConfig.SaveTexture && PRIM->TME)
{
if (texture_shuffle)
{
// Dump the RT in 32 bits format. It helps to debug texture shuffle effect
s = GetDrawDumpPath("%05d_f%lld_itexraw_%05x_32bits.bmp", s_n, frame, (int)m_context->TEX0.TBP0);
s = GetDrawDumpPath("%05d_f%05lld_itexraw_%05x_32bits.bmp", s_n, frame, (int)m_context->TEX0.TBP0);
m_mem.SaveBMP(s, m_context->TEX0.TBP0, m_context->TEX0.TBW, 0, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH);
}
s = GetDrawDumpPath("%05d_f%lld_itexraw_%05x_%s.bmp", s_n, frame, (int)m_context->TEX0.TBP0, psm_str(m_context->TEX0.PSM));
s = GetDrawDumpPath("%05d_f%05lld_itexraw_%05x_%s.bmp", s_n, frame, (int)m_context->TEX0.TBP0, psm_str(m_context->TEX0.PSM));
m_mem.SaveBMP(s, m_context->TEX0.TBP0, m_context->TEX0.TBW, m_context->TEX0.PSM, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH);
}
if (GSConfig.SaveRT && s_n >= GSConfig.SaveN)
if (GSConfig.SaveRT)
{
if (texture_shuffle)
{
// Dump the RT in 32 bits format. It helps to debug texture shuffle effect
s = GetDrawDumpPath("%05d_f%lld_rt0_%05x_32bits.bmp", s_n, frame, m_context->FRAME.Block());
s = GetDrawDumpPath("%05d_f%05lld_rt0_%05x_32bits.bmp", s_n, frame, m_context->FRAME.Block());
m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, 0, r.z, r.w);
}
s = GetDrawDumpPath("%05d_f%lld_rt0_%05x_%s.bmp", s_n, frame, m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rt0_%05x_%s.bmp", s_n, frame, m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, r.z, r.w);
}
if (GSConfig.SaveDepth && s_n >= GSConfig.SaveN)
if (GSConfig.SaveDepth)
{
s = GetDrawDumpPath("%05d_f%lld_rz0_%05x_%s.bmp", s_n, frame, m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rz0_%05x_%s.bmp", s_n, frame, m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
m_mem.SaveBMP(s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, r.z, r.w);
}
@@ -482,30 +474,25 @@ void GSRendererSW::Draw()
Sync(3);
if (GSConfig.SaveRT && s_n >= GSConfig.SaveN)
if (GSConfig.SaveRT)
{
if (texture_shuffle)
{
// Dump the RT in 32 bits format. It helps to debug texture shuffle effect
s = GetDrawDumpPath("%05d_f%lld_rt1_%05x_32bits.bmp", s_n, frame, m_context->FRAME.Block());
s = GetDrawDumpPath("%05d_f%05lld_rt1_%05x_32bits.bmp", s_n, frame, m_context->FRAME.Block());
m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, 0, r.z, r.w);
}
s = GetDrawDumpPath("%05d_f%lld_rt1_%05x_%s.bmp", s_n, frame, m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rt1_%05x_%s.bmp", s_n, frame, m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, r.z, r.w);
}
if (GSConfig.SaveDepth && s_n >= GSConfig.SaveN)
if (GSConfig.SaveDepth)
{
s = GetDrawDumpPath("%05d_f%lld_rz1_%05x_%s.bmp", s_n, frame, m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rz1_%05x_%s.bmp", s_n, frame, m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
m_mem.SaveBMP(s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, r.z, r.w);
}
if (GSConfig.SaveL > 0 && (s_n - GSConfig.SaveN) > GSConfig.SaveL)
{
GSConfig.DumpGSData = 0;
}
}
else
{
@@ -585,14 +572,14 @@ void GSRendererSW::Sync(int reason)
if (GSConfig.SaveRT)
{
s = GetDrawDumpPath("%05d_f%lld_rt1_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
s = GetDrawDumpPath("%05d_f%05lld_rt1_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), m_context->FRAME.Block(), psm_str(m_context->FRAME.PSM));
m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, PCRTCDisplays.GetFramebufferRect(-1).width(), 512);
}
if (GSConfig.SaveDepth)
{
s = GetDrawDumpPath("%05d_f%lld_zb1_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
s = GetDrawDumpPath("%05d_f%05lld_zb1_%05x_%s.bmp", s_n, g_perfmon.GetFrame(), m_context->ZBUF.Block(), psm_str(m_context->ZBUF.PSM));
m_mem.SaveBMP(s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, PCRTCDisplays.GetFramebufferRect(-1).width(), 512);
}
@@ -1546,30 +1533,25 @@ void GSRendererSW::SharedData::UpdateSource()
}
}
// TODO
if (GSConfig.DumpGSData)
if (GSConfig.SaveTexture && GSConfig.ShouldDump(s_n, g_perfmon.GetFrame()))
{
const u64 frame = g_perfmon.GetFrame();
std::string s;
if (GSConfig.SaveTexture && g_gs_renderer->s_n >= GSConfig.SaveN)
for (size_t i = 0; m_tex[i].t; i++)
{
for (size_t i = 0; m_tex[i].t; i++)
{
const GIFRegTEX0& TEX0 = g_gs_renderer->GetTex0Layer(i);
const GIFRegTEX0& TEX0 = g_gs_renderer->GetTex0Layer(i);
s = GetDrawDumpPath("%05d_f%lld_itex%d_%05x_%s.bmp", g_gs_renderer->s_n, frame, i, TEX0.TBP0, psm_str(TEX0.PSM));
s = GetDrawDumpPath("%05d_f%05lld_itex%d_%05x_%s.bmp", g_gs_renderer->s_n, frame, i, TEX0.TBP0, psm_str(TEX0.PSM));
m_tex[i].t->Save(s);
}
m_tex[i].t->Save(s);
}
if (global.clut)
{
s = GetDrawDumpPath("%05d_f%lld_itexp_%05x_%s.bmp", g_gs_renderer->s_n, frame, (int)g_gs_renderer->m_context->TEX0.CBP, psm_str(g_gs_renderer->m_context->TEX0.CPSM));
GSPng::Save(IsDevBuild ? GSPng::RGB_A_PNG : GSPng::RGB_PNG, s, reinterpret_cast<const u8*>(global.clut), 256, 1, sizeof(u32) * 256, GSConfig.PNGCompressionLevel, false);
}
if (global.clut)
{
s = GetDrawDumpPath("%05d_f%05lld_itexp_%05x_%s.bmp", g_gs_renderer->s_n, frame, (int)g_gs_renderer->m_context->TEX0.CBP, psm_str(g_gs_renderer->m_context->TEX0.CPSM));
GSPng::Save((IsDevBuild || GSConfig.SaveAlpha) ? GSPng::RGB_A_PNG : GSPng::RGB_PNG, s, reinterpret_cast<const u8*>(global.clut), 256, 1, sizeof(u32) * 256, GSConfig.PNGCompressionLevel, false);
}
}
}

View File

@@ -317,7 +317,7 @@ bool GSTextureCacheSW::Texture::Save(const std::string& fn) const
const u32 w = 1 << m_TEX0.TW;
const u32 h = 1 << m_TEX0.TH;
constexpr GSPng::Format format = IsDevBuild ? GSPng::RGB_A_PNG : GSPng::RGB_PNG;
const GSPng::Format format = (IsDevBuild || GSConfig.SaveAlpha) ? GSPng::RGB_A_PNG : GSPng::RGB_PNG;
const GSLocalMemory::psm_t& psm = GSLocalMemory::m_psm[m_TEX0.PSM];
const u8* RESTRICT src = (u8*)m_buff;
const u32 src_pitch = 1u << (m_tw + (psm.pal == 0 ? 2 : 0));

View File

@@ -37,6 +37,9 @@ static bool InitializeSDLAudio(Error* error)
if (initialized)
return true;
// Set the name that shows up in the audio mixers on some platforms
SDL_SetHint("SDL_AUDIO_DEVICE_APP_NAME", "PCSX2");
// May as well keep it alive until the process exits.
if (SDL_InitSubSystem(SDL_INIT_AUDIO) != 0)
{

View File

@@ -840,6 +840,10 @@ bool Pcsx2Config::GSOptions::OptionsAreEqual(const GSOptions& right) const
OpEqu(PNGCompressionLevel) &&
OpEqu(SaveN) &&
OpEqu(SaveL) &&
OpEqu(SaveB) &&
OpEqu(SaveNF) &&
OpEqu(SaveLF) &&
OpEqu(SaveBF) &&
OpEqu(ExclusiveFullscreenControl) &&
OpEqu(ScreenshotSize) &&
@@ -966,6 +970,8 @@ void Pcsx2Config::GSOptions::LoadSave(SettingsWrapper& wrap)
SettingsWrapBitBoolEx(SaveFrame, "savef");
SettingsWrapBitBoolEx(SaveTexture, "savet");
SettingsWrapBitBoolEx(SaveDepth, "savez");
SettingsWrapBitBoolEx(SaveAlpha, "savea");
SettingsWrapBitBoolEx(SaveInfo, "savei");
SettingsWrapBitBool(DumpReplaceableTextures);
SettingsWrapBitBool(DumpReplaceableMipmaps);
SettingsWrapBitBool(DumpTexturesWithFMVActive);
@@ -1026,6 +1032,10 @@ void Pcsx2Config::GSOptions::LoadSave(SettingsWrapper& wrap)
SettingsWrapBitfieldEx(PNGCompressionLevel, "png_compression_level");
SettingsWrapBitfieldEx(SaveN, "saven");
SettingsWrapBitfieldEx(SaveL, "savel");
SettingsWrapBitfieldEx(SaveB, "saveb");
SettingsWrapBitfieldEx(SaveNF, "savenf");
SettingsWrapBitfieldEx(SaveLF, "savelf");
SettingsWrapBitfieldEx(SaveBF, "savebf");
SettingsWrapEntryEx(CaptureContainer, "CaptureContainer");
SettingsWrapEntryEx(VideoCaptureCodec, "VideoCaptureCodec");
@@ -1110,6 +1120,13 @@ bool Pcsx2Config::GSOptions::UseHardwareRenderer() const
return (Renderer != GSRendererType::Null && Renderer != GSRendererType::SW);
}
bool Pcsx2Config::GSOptions::ShouldDump(int draw, int frame) const
{
return DumpGSData &&
(SaveN <= draw) && ((SaveL < 0) || (draw < SaveN + SaveL)) && (draw % SaveB == 0) &&
(SaveNF <= frame) && ((SaveLF < 0) || (frame < SaveNF + SaveLF)) && (frame % SaveBF == 0);
}
static constexpr const std::array s_spu2_sync_mode_names = {
"Disabled",
"TimeStretch",

View File

@@ -15,7 +15,7 @@
#include "MTVU.h"
#include "VMManager.h"
static const float UPDATE_INTERVAL = 0.5f;
static const float UPDATE_INTERVAL = 0.25f;
static float s_fps = 0.0f;
static float s_internal_fps = 0.0f;

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
</dict>
</plist>

View File

@@ -24,6 +24,7 @@
#include <sstream>
#include <mutex>
#include <optional>
#include <chrono>
// A helper function to parse the YAML file
static std::optional<ryml::Tree> loadYamlFile(const char* filePath)

View File

@@ -3,4 +3,4 @@
/// Version number for GS and other shaders. Increment whenever any of the contents of the
/// shaders change, to invalidate the cache.
static constexpr u32 SHADER_CACHE_VERSION = 58;
static constexpr u32 SHADER_CACHE_VERSION = 59;

View File

@@ -1851,7 +1851,7 @@ bool VMManager::DoSaveState(const char* filename, s32 slot_for_message, bool zip
Console.WriteLn(fmt::format("Creating save state backup {}...", backup_filename));
if (!FileSystem::RenamePath(filename, backup_filename.c_str()))
{
Host::AddIconOSDMessage(std::move(osd_key), ICON_FA_EXCLAMATION_TRIANGLE,
Host::AddIconOSDMessage(osd_key, ICON_FA_EXCLAMATION_TRIANGLE,
fmt::format(
TRANSLATE_FS("VMManager", "Failed to back up old save state {}."), Path::GetFileName(filename)),
Host::OSD_ERROR_DURATION);
@@ -2234,7 +2234,7 @@ bool VMManager::ChangeDisc(CDVD_SourceType source, std::string path)
CDVDsys_ChangeSource(source);
if (!path.empty())
CDVDsys_SetFile(source, std::move(path));
CDVDsys_SetFile(source, path);
Error error;
const bool result = DoCDVDopen(&error);

View File

@@ -39,6 +39,13 @@ __fi void makeMergeMask(u32& x)
x = ((x & 0x40) >> 6) | ((x & 0x10) >> 3) | (x & 4) | ((x & 1) << 3);
}
#ifdef _WIN32
__fi void makeMergeMaskAllColumns(u32& x)
{
x = ((x & 0x40404040) >> 6) | ((x & 0x10101010) >> 3) | (x & 0x04040404) | ((x & 0x01010101) << 3);
}
#endif
__fi void VifUnpackSSE_Dynarec::SetMasks(int cS) const
{
const int idx = v.idx;
@@ -260,11 +267,8 @@ void VifUnpackSSE_Dynarec::CompileRoutine()
#ifdef _WIN32
// See SetMasks()
const u32 m0 = vB.mask;
const u32 m3 = ((m0 & 0xaaaaaaaa) >> 1) & ~m0;
const u32 m2 = (m0 & 0x55555555) & (~m0 >> 1);
// see doMaskWrite()
const u32 m4 = (m0 & ~((m3 << 1) | m2)) & 0x55555555;
const u32 m5 = ~(m2 | m3 | m4) & 0x0f0f0f0f;
u32 m3 = ((m0 & 0xaaaaaaaa) >> 1) & ~m0;
u32 m2 = (m0 & 0x55555555) & (~m0 >> 1);
int regsUsed = 2;
// Allocate column registers
@@ -287,26 +291,36 @@ void VifUnpackSSE_Dynarec::CompileRoutine()
// Allocate row register
if ((doMask && m2) || doMode)
{
rowReg = xRegisterSSE(regsUsed);
if (regsUsed - 6 >= 0)
nonVolatileRegs[regsUsed - 6] = rowReg;
rowReg = xRegisterSSE(regsUsed++);
regsUsed++;
}
// see doMaskWrite()
u32 m4 = (m0 & ~((m3 << 1) | m2)) & 0x55555555;
makeMergeMaskAllColumns(m2);
makeMergeMaskAllColumns(m3);
makeMergeMaskAllColumns(m4);
const u32 m5 = ~(m2 | m3 | m4) & 0x0f0f0f0f;
// Allocate temp register
if (doMode && (doMode != 3) &&
doMask && m5 != 0x0f0f0f0f)
{
tmpReg = xRegisterSSE(regsUsed);
if (regsUsed - 6 >= 0)
nonVolatileRegs[regsUsed - 6] = tmpReg;
tmpReg = xRegisterSSE(regsUsed++);
regsUsed++;
}
// Allocate zero register
if (needXmmZero)
{
zeroReg = xRegisterSSE(regsUsed);
if (regsUsed - 6 >= 0)
nonVolatileRegs[regsUsed - 6] = zeroReg;
zeroReg = xRegisterSSE(regsUsed++);
regsUsed++;
}
regsUsed -= 6;

View File

@@ -594,6 +594,9 @@ static void recResetRaw()
g_branch = 0;
g_resetEeScalingStats = true;
memset(manual_page, 0, sizeof(manual_page));
memset(manual_counter, 0, sizeof(manual_counter));
}
void recShutdown()