├── .github └── workflows │ └── static.yml ├── .gitignore ├── .vscode └── sitemap-generator.json ├── LICENSE ├── NoiseAsset_256.png ├── css ├── cards.css ├── cards.css.map ├── cards.scss ├── flip.css ├── flip.css.map ├── flip.scss ├── guideColors.css ├── guideColors.css.map ├── guideColors.scss ├── header.css ├── header.css.map ├── header.scss ├── images.css ├── images.css.map ├── images.scss ├── progressBar.css ├── progressBar.css.map ├── progressBar.scss ├── sidebar.css ├── sidebar.css.map ├── sidebar.scss ├── styles.css ├── styles.css.map ├── styles.scss ├── textIcons.css ├── textIcons.css.map └── textIcons.scss ├── falloutnv.html ├── files ├── FO-NvidiaProfile.nip └── SpecialK.7z ├── graphs └── fo4 │ ├── test1.png │ ├── test2.png │ └── test3.png ├── img ├── UI │ ├── Arrow.svg │ ├── Download.svg │ ├── Maximize.svg │ ├── Minimize.svg │ ├── Navigation.svg │ └── Open.svg ├── favicon.webp ├── limiters │ ├── AMD.webp │ ├── Nvidia.webp │ ├── RTSS.webp │ ├── SK.webp │ └── SK_SSE.webp └── ui │ ├── Chevron Down.svg │ ├── logo.webp │ └── pepestare.webp ├── index.html ├── js ├── javascript.js └── perfguide.js ├── manifest.json └── sitemap.xml /.github/workflows/static.yml: -------------------------------------------------------------------------------- 1 | # Simple workflow for deploying static content to GitHub Pages 2 | name: Deploy static content to Pages 3 | 4 | on: 5 | # Runs on pushes targeting the default branch 6 | push: 7 | branches: ["main"] 8 | 9 | # Allows you to run this workflow manually from the Actions tab 10 | workflow_dispatch: 11 | 12 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 13 | permissions: 14 | contents: read 15 | pages: write 16 | id-token: write 17 | 18 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 19 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 20 | concurrency: 21 | group: "pages" 22 | cancel-in-progress: false 23 | 24 | jobs: 25 | # Single deploy job since we're just deploying 26 | deploy: 27 | environment: 28 | name: github-pages 29 | url: ${{ steps.deployment.outputs.page_url }} 30 | runs-on: ubuntu-latest 31 | steps: 32 | - name: Checkout 33 | uses: actions/checkout@v3 34 | - name: Setup Pages 35 | uses: actions/configure-pages@v3 36 | - name: Upload artifact 37 | uses: actions/upload-pages-artifact@v3 38 | with: 39 | # Upload entire repository 40 | path: '.' 41 | - name: Deploy to GitHub Pages 42 | id: deployment 43 | uses: actions/deploy-pages@v4 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.code-workspace 2 | .vscode/launch.json 3 | -------------------------------------------------------------------------------- /.vscode/sitemap-generator.json: -------------------------------------------------------------------------------- 1 | { 2 | "sitemap.xml": { 3 | "Protocol": "https", 4 | "DomainName": "performance.moddinglinked.com", 5 | "Root": "./", 6 | "IncludeExt": [ 7 | ".html", 8 | ".php" 9 | ], 10 | "Exclude": [], 11 | "TagsToInclude": [ 12 | "priority", 13 | "lastmod" 14 | ], 15 | "DefaultChangeFrequency": "monthly", 16 | "TabCharacters": "\t", 17 | "bIncludeWWW": true, 18 | "bRemoveFileExtentions": false, 19 | "bUseTrailingSlash": false, 20 | "bAutomaticallyUpdateSitemap": true, 21 | "bMinimized": false 22 | } 23 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) WallSoGB 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /NoiseAsset_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/NoiseAsset_256.png -------------------------------------------------------------------------------- /css/cards.css: -------------------------------------------------------------------------------- 1 | .card { 2 | outline: 1px solid rgba(0, 0, 0, 0.1); 3 | background-color: rgba(255, 255, 255, 0.0512); 4 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.13); 5 | } 6 | 7 | .card-basic, 8 | textarea { 9 | font-family: monospace; 10 | font-size: 1.3em; 11 | outline: 1px solid rgba(0, 0, 0, 0.1); 12 | background-color: rgba(255, 255, 255, 0.0326); 13 | width: -moz-fit-content; 14 | width: fit-content; 15 | } 16 | 17 | .card-yellow { 18 | outline: 1px solid rgba(0, 0, 0, 0.1); 19 | background-color: rgb(67, 53, 25); 20 | text-align: left; 21 | width: -moz-fit-content; 22 | width: fit-content; 23 | } 24 | 25 | .card-red { 26 | outline: 1px solid rgba(0, 0, 0, 0.1); 27 | background-color: rgb(68, 39, 38); 28 | text-align: left; 29 | width: -moz-fit-content; 30 | width: fit-content; 31 | } 32 | 33 | .card-green { 34 | outline: 1px solid rgba(0, 0, 0, 0.1); 35 | background-color: rgb(57, 61, 27); 36 | text-align: left; 37 | width: -moz-fit-content; 38 | width: fit-content; 39 | } 40 | 41 | .card, 42 | .card-basic, 43 | .card-green, 44 | .card-red, 45 | .card-yellow, 46 | .expander-bottom, 47 | .expander-top, 48 | textarea { 49 | padding: 0 1em 0 1em; 50 | border-radius: 8px; 51 | border: 1px solid transparent; 52 | margin-top: 0.5em; 53 | margin-bottom: 0.5em; 54 | } 55 | 56 | textarea { 57 | resize: none; 58 | box-sizing: border-box; 59 | width: 95%; 60 | } 61 | 62 | textarea.auto-resize { 63 | overflow: hidden; 64 | } 65 | 66 | b.card-basic { 67 | padding: 0.3em 0.5em 0.3em 0.5em; 68 | } 69 | 70 | span.card-basic { 71 | font-family: monospace !important; 72 | padding: 0.5em !important; 73 | line-height: 2.5em !important; 74 | text-wrap: nowrap; 75 | overflow-x: scroll !important; 76 | } 77 | 78 | .card-yellow .card-basic { 79 | background-color: rgba(255, 255, 255, 0.09) !important; 80 | border-color: rgba(255, 255, 255, 0.2) !important; 81 | } 82 | 83 | .expander-top { 84 | border-bottom-left-radius: 8px; 85 | border-bottom-right-radius: 8px; 86 | outline: 1px solid rgba(0, 0, 0, 0.1); 87 | background-color: rgba(255, 255, 255, 0.0512); 88 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.13); 89 | margin-bottom: 0 !important; 90 | display: flex; 91 | flex-direction: row; 92 | align-items: center; 93 | } 94 | 95 | .expander-top.active { 96 | border-bottom-left-radius: 0; 97 | border-bottom-right-radius: 0; 98 | background-color: rgba(255, 255, 255, 0.0612); 99 | } 100 | 101 | .expander-top.clickable { 102 | cursor: pointer; 103 | } 104 | 105 | .expander-top.clickable:hover { 106 | outline: 1px solid rgba(255, 255, 255, 0.07); 107 | background-color: rgba(255, 255, 255, 0.0812); 108 | } 109 | 110 | .expander-top.clickable:active { 111 | background-color: rgba(255, 255, 255, 0.03); 112 | } 113 | 114 | .expander-bottom { 115 | border-top-left-radius: 0 !important; 116 | border-top-right-radius: 0 !important; 117 | outline: 1px solid rgba(0, 0, 0, 0.1); 118 | background-color: rgba(255, 255, 255, 0.0512); 119 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.13); 120 | display: none; 121 | animation: slide-up 0.4s; 122 | z-index: 0; 123 | position: relative; 124 | overflow-y: hidden; 125 | margin-top: 0 !important; 126 | } 127 | 128 | .expander-opened { 129 | animation: slide-down 2s; 130 | } 131 | 132 | img.chevron { 133 | display: flex; 134 | height: 16px; 135 | width: 16px; 136 | box-shadow: none; 137 | margin-top: 3px; 138 | transition: transform 0.1s; 139 | margin-left: auto; 140 | -webkit-user-select: none; 141 | -moz-user-select: none; 142 | user-select: none; 143 | } 144 | 145 | @media only screen and (max-width: 700px) { 146 | .expander-bottom, 147 | .expander-top, 148 | .card-red, 149 | .card-yellow, 150 | .card-green, 151 | .card-basic, 152 | .card { 153 | padding: 0.65em; 154 | } 155 | .card-basic p { 156 | margin: 0; 157 | text-wrap: nowrap; 158 | overflow-x: scroll; 159 | } 160 | span.card-basic { 161 | width: -moz-fit-content; 162 | width: fit-content; 163 | display: inline-block !important; 164 | padding: 0em 0.5em 0em 0.5em !important; 165 | max-width: 100%; 166 | overflow-x: auto; 167 | vertical-align: middle; 168 | line-height: 1.8em !important; 169 | } 170 | .card-basic { 171 | width: unset; 172 | display: inline-block; 173 | max-width: 100%; 174 | } 175 | textarea { 176 | width: 100%; 177 | } 178 | }/*# sourceMappingURL=cards.css.map */ -------------------------------------------------------------------------------- /css/cards.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["cards.scss","cards.css"],"names":[],"mappings":"AAAA;EACI,qCAAA;EACA,6CAAA;EACA,2CAAA;ACCJ;;ADEA;;EAEI,sBAAA;EACA,gBAAA;EACA,qCAAA;EACA,6CAAA;EACA,uBAAA;EAAA,kBAAA;ACCJ;;ADEA;EACI,qCAAA;EACA,iCAAA;EACA,gBAAA;EACA,uBAAA;EAAA,kBAAA;ACCJ;;ADEA;EACI,qCAAA;EACA,iCAAA;EACA,gBAAA;EACA,uBAAA;EAAA,kBAAA;ACCJ;;ADEA;EACI,qCAAA;EACA,iCAAA;EACA,gBAAA;EACA,uBAAA;EAAA,kBAAA;ACCJ;;ADEA;;;;;;;;EAQI,oBAAA;EACA,kBAAA;EACA,6BAAA;EACA,iBAAA;EACA,oBAAA;ACCJ;;ADEA;EACI,YAAA;EACA,sBAAA;EACA,UAAA;ACCJ;;ADEA;EACI,gBAAA;ACCJ;;ADEA;EACI,gCAAA;ACCJ;;ADEA;EACI,iCAAA;EACA,yBAAA;EACA,6BAAA;EACA,iBAAA;EACA,6BAAA;ACCJ;;ADEA;EACI,sDAAA;EACA,iDAAA;ACCJ;;ADIA;EACI,8BAAA;EACA,+BAAA;EACA,qCAAA;EACA,6CAAA;EACA,2CAAA;EACA,2BAAA;EACA,aAAA;EACA,mBAAA;EACA,mBAAA;ACDJ;;ADIA;EACI,4BAAA;EACA,6BAAA;EACA,6CAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;EACI,4CAAA;EACA,6CAAA;ACDJ;;ADIA;EACI,2CAAA;ACDJ;;ADIA;EACI,oCAAA;EACA,qCAAA;EACA,qCAAA;EACA,6CAAA;EACA,2CAAA;EACA,aAAA;EACA,wBAAA;EACA,UAAA;EACA,kBAAA;EACA,kBAAA;EACA,wBAAA;ACDJ;;ADIA;EACI,wBAAA;ACDJ;;ADIA;EACI,aAAA;EACA,YAAA;EACA,WAAA;EACA,gBAAA;EACA,eAAA;EACA,0BAAA;EACA,iBAAA;EACA,yBAAA;KAAA,sBAAA;UAAA,iBAAA;ACDJ;;ADIA;EAEI;;;;;;;IAOI,eAAA;ECFN;EDKE;IACI,SAAA;IACA,iBAAA;IACA,kBAAA;ECHN;EDME;IACI,uBAAA;IAAA,kBAAA;IACA,gCAAA;IACA,uCAAA;IACA,eAAA;IACA,gBAAA;IACA,sBAAA;IACA,6BAAA;ECJN;EDOE;IACI,YAAA;IACA,qBAAA;IACA,eAAA;ECLN;EDQE;IACI,WAAA;ECNN;AACF","file":"cards.css"} -------------------------------------------------------------------------------- /css/cards.scss: -------------------------------------------------------------------------------- 1 | .card { 2 | outline: 1px solid rgba(0, 0, 0, 10%); 3 | background-color: rgba(255, 255, 255, 5.12%); 4 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 13%); 5 | } 6 | 7 | .card-basic, 8 | textarea { 9 | font-family: monospace; 10 | font-size: 1.3em; 11 | outline: 1px solid rgba(0, 0, 0, 10%); 12 | background-color: rgba(255, 255, 255, 3.26%); 13 | width: fit-content; 14 | } 15 | 16 | .card-yellow { 17 | outline: 1px solid rgba(0, 0, 0, 10%); 18 | background-color: rgb(67, 53, 25); 19 | text-align: left; 20 | width: fit-content; 21 | } 22 | 23 | .card-red { 24 | outline: 1px solid rgba(0, 0, 0, 10%); 25 | background-color: rgb(68, 39, 38); 26 | text-align: left; 27 | width: fit-content; 28 | } 29 | 30 | .card-green { 31 | outline: 1px solid rgba(0, 0, 0, 10%); 32 | background-color: rgb(57, 61, 27); 33 | text-align: left; 34 | width: fit-content; 35 | } 36 | 37 | .card, 38 | .card-basic, 39 | .card-green, 40 | .card-red, 41 | .card-yellow, 42 | .expander-bottom, 43 | .expander-top, 44 | textarea { 45 | padding: 0 1em 0 1em; 46 | border-radius: 8px; 47 | border: 1px solid transparent; 48 | margin-top: 0.5em; 49 | margin-bottom: 0.5em; 50 | } 51 | 52 | textarea { 53 | resize: none; 54 | box-sizing: border-box; 55 | width: 95%; 56 | } 57 | 58 | textarea.auto-resize { 59 | overflow: hidden; 60 | } 61 | 62 | b.card-basic { 63 | padding: 0.3em 0.5em 0.3em 0.5em; 64 | } 65 | 66 | span.card-basic { 67 | font-family: monospace !important; 68 | padding: 0.5em !important; 69 | line-height: 2.5em !important; 70 | text-wrap: nowrap; 71 | overflow-x: scroll !important; 72 | } 73 | 74 | .card-yellow .card-basic { 75 | background-color: rgba(255, 255, 255, 0.09) !important; 76 | border-color: rgba(255, 255, 255, 0.2) !important; 77 | } 78 | 79 | // Expanders 80 | 81 | .expander-top { 82 | border-bottom-left-radius: 8px; 83 | border-bottom-right-radius: 8px; 84 | outline: 1px solid rgba(0, 0, 0, 10%); 85 | background-color: rgba(255, 255, 255, 5.12%); 86 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 13%); 87 | margin-bottom: 0 !important; 88 | display: flex; 89 | flex-direction: row; 90 | align-items: center; 91 | } 92 | 93 | .expander-top.active { 94 | border-bottom-left-radius: 0; 95 | border-bottom-right-radius: 0; 96 | background-color: rgba(255, 255, 255, 6.12%); 97 | } 98 | 99 | .expander-top.clickable { 100 | cursor: pointer; 101 | } 102 | 103 | .expander-top.clickable:hover { 104 | outline: 1px solid rgba(255, 255, 255, 7%); 105 | background-color: rgba(255, 255, 255, 8.12%); 106 | } 107 | 108 | .expander-top.clickable:active { 109 | background-color: rgba(255, 255, 255, 3%); 110 | } 111 | 112 | .expander-bottom { 113 | border-top-left-radius: 0 !important; 114 | border-top-right-radius: 0 !important; 115 | outline: 1px solid rgba(0, 0, 0, 10%); 116 | background-color: rgba(255, 255, 255, 5.12%); 117 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 13%); 118 | display: none; 119 | animation: slide-up 0.4s; 120 | z-index: 0; 121 | position: relative; 122 | overflow-y: hidden; 123 | margin-top: 0 !important; 124 | } 125 | 126 | .expander-opened { 127 | animation: slide-down 2s; 128 | } 129 | 130 | img.chevron { 131 | display: flex; 132 | height: 16px; 133 | width: 16px; 134 | box-shadow: none; 135 | margin-top: 3px; 136 | transition: transform 0.1s; 137 | margin-left: auto; 138 | user-select: none; 139 | } 140 | 141 | @media only screen and (max-width: 700px) { 142 | 143 | .expander-bottom, 144 | .expander-top, 145 | .card-red, 146 | .card-yellow, 147 | .card-green, 148 | .card-basic, 149 | .card { 150 | padding: 0.65em; 151 | } 152 | 153 | .card-basic p { 154 | margin: 0; 155 | text-wrap: nowrap; 156 | overflow-x: scroll; 157 | } 158 | 159 | span.card-basic { 160 | width: fit-content; 161 | display: inline-block !important; 162 | padding: 0em 0.5em 0em 0.5em !important; 163 | max-width: 100%; 164 | overflow-x: auto; 165 | vertical-align: middle; 166 | line-height: 1.8em !important; 167 | } 168 | 169 | .card-basic { 170 | width: unset; 171 | display: inline-block; 172 | max-width: 100%; 173 | } 174 | 175 | textarea { 176 | width: 100%; 177 | } 178 | } -------------------------------------------------------------------------------- /css/flip.css: -------------------------------------------------------------------------------- 1 | input, 2 | button, 3 | .button, 4 | .button-big { 5 | color: white; 6 | background-color: rgba(255, 255, 255, 0.0605); 7 | border: 1px solid rgba(255, 255, 255, 0.093); 8 | border-radius: 3px; 9 | text-align: center; 10 | min-height: 1em; 11 | font-size: 1.1em; 12 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 13 | } 14 | 15 | input:hover, 16 | button:hover, 17 | .button:hover, 18 | .button-big:hover { 19 | background-color: rgba(255, 255, 255, 0.0837); 20 | } 21 | 22 | input:active, 23 | button:active, 24 | .button:active, 25 | .button-big:active { 26 | background-color: rgba(255, 255, 255, 0.0326); 27 | border-color: rgba(255, 255, 255, 0.0698); 28 | color: rgba(255, 255, 255, 0.786); 29 | } 30 | 31 | .button-big { 32 | background-color: rgba(255, 255, 255, 0.0605); 33 | border: 1px solid rgba(255, 255, 255, 0.093); 34 | border-radius: 3px; 35 | text-align: center; 36 | padding: 0.7em; 37 | display: inline-block; 38 | cursor: pointer; 39 | -webkit-user-select: none; 40 | -moz-user-select: none; 41 | user-select: none; 42 | min-width: 5em; 43 | max-width: 8em; 44 | min-height: 1em; 45 | width: 100%; 46 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 47 | } 48 | 49 | #intelButton { 50 | background-color: #2166b3; 51 | color: white; 52 | } 53 | 54 | #intelButton:hover { 55 | background-color: hsl(212, 69%, 55%); 56 | } 57 | 58 | #amdButton { 59 | background-color: #dc0032; 60 | color: white; 61 | } 62 | 63 | #amdButton:hover { 64 | background-color: hsl(346, 100%, 65%); 65 | } 66 | 67 | #nvidiaButton { 68 | background-color: #71bb21; 69 | color: white; 70 | } 71 | 72 | #nvidiaButton:hover { 73 | background-color: hsl(89, 70%, 60%); 74 | } 75 | 76 | .comparison-table { 77 | table-layout: fixed; 78 | width: 100%; 79 | border-spacing: 0.4em; 80 | } 81 | 82 | .comparison-table h2 { 83 | font-size: 1.5em; 84 | } 85 | 86 | .comparison-table .card, 87 | .comparison-table .card-red, 88 | .comparison-table .card-green { 89 | vertical-align: top; 90 | } 91 | 92 | .subIcon { 93 | position: relative; 94 | left: 15px; 95 | margin-left: -12px; 96 | font-size: large; 97 | z-index: 0; 98 | } 99 | 100 | .abbreviation { 101 | text-decoration: underline !important; 102 | text-decoration-style: dotted !important; 103 | } 104 | 105 | @media only screen and (max-width: 700px) { 106 | .headerTitle { 107 | font-size: 0.7em; 108 | } 109 | .comparison-table .card-red, 110 | .comparison-table .card-green { 111 | padding: 0em; 112 | } 113 | .comparison-table .card-yellow { 114 | margin: 0em 0.75em 0em 0em; 115 | padding: 0.1em 0.5em 0.1em 0.5em; 116 | } 117 | .comparison-table { 118 | border-spacing: 0.1em; 119 | } 120 | .comparison-table h2 { 121 | font-size: 1em; 122 | } 123 | .comparison-table ul { 124 | font-size: 0.8em; 125 | word-wrap: break-word; 126 | line-height: 1.3em; 127 | list-style-position: outside; 128 | margin-left: -3em; 129 | list-style: none; 130 | } 131 | } 132 | .disabled { 133 | display: none; 134 | opacity: 0%; 135 | pointer-events: none; 136 | }/*# sourceMappingURL=flip.css.map */ -------------------------------------------------------------------------------- /css/flip.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["flip.scss","flip.css"],"names":[],"mappings":"AAAA;;;;EAII,YAAA;EACA,6CAAA;EACA,4CAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,8CAAA;ACCJ;;ADEA;;;;EAII,6CAAA;ACCJ;;ADEA;;;;EAII,6CAAA;EACA,yCAAA;EACA,iCAAA;ACCJ;;ADEA;EACI,6CAAA;EACA,4CAAA;EACA,kBAAA;EACA,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,eAAA;EACA,yBAAA;EACA,sBAAA;EACA,iBAAA;EACA,cAAA;EACA,cAAA;EACA,eAAA;EACA,WAAA;EACA,8CAAA;ACCJ;;ADEA;EACI,yBAAA;EACA,YAAA;ACCJ;;ADEA;EACI,oCAAA;ACCJ;;ADEA;EACI,yBAAA;EACA,YAAA;ACCJ;;ADEA;EACI,qCAAA;ACCJ;;ADEA;EACI,yBAAA;EACA,YAAA;ACCJ;;ADEA;EACI,mCAAA;ACCJ;;ADEA;EACI,mBAAA;EACA,WAAA;EACA,qBAAA;ACCJ;;ADEA;EACI,gBAAA;ACCJ;;ADEA;;;EAGI,mBAAA;ACCJ;;ADEA;EACI,kBAAA;EACA,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,UAAA;ACCJ;;ADEA;EACI,qCAAA;EACA,wCAAA;ACCJ;;ADEA;EACI;IACI,gBAAA;ECCN;EDEE;;IAEI,YAAA;ECAN;EDGE;IACI,0BAAA;IACA,gCAAA;ECDN;EDIE;IACI,qBAAA;ECFN;EDKE;IACI,cAAA;ECHN;EDME;IACI,gBAAA;IACA,qBAAA;IACA,kBAAA;IACA,4BAAA;IACA,iBAAA;IACA,gBAAA;ECJN;AACF;ADOA;EACI,aAAA;EACA,WAAA;EACA,oBAAA;ACLJ","file":"flip.css"} -------------------------------------------------------------------------------- /css/flip.scss: -------------------------------------------------------------------------------- 1 | input, 2 | button, 3 | .button, 4 | .button-big { 5 | color: white; 6 | background-color: rgba(255, 255, 255, 0.0605); 7 | border: 1px solid rgba(255, 255, 255, 0.093); 8 | border-radius: 3px; 9 | text-align: center; 10 | min-height: 1em; 11 | font-size: 1.1em; 12 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 13 | } 14 | 15 | input:hover, 16 | button:hover, 17 | .button:hover, 18 | .button-big:hover { 19 | background-color: rgba(255, 255, 255, 0.0837); 20 | } 21 | 22 | input:active, 23 | button:active, 24 | .button:active, 25 | .button-big:active { 26 | background-color: rgba(255, 255, 255, 0.0326); 27 | border-color: rgba(255, 255, 255, 0.0698); 28 | color: rgba(255, 255, 255, 0.786); 29 | } 30 | 31 | .button-big { 32 | background-color: rgba(255, 255, 255, 0.0605); 33 | border: 1px solid rgba(255, 255, 255, 0.093); 34 | border-radius: 3px; 35 | text-align: center; 36 | padding: 0.7em; 37 | display: inline-block; 38 | cursor: pointer; 39 | -webkit-user-select: none; 40 | -moz-user-select: none; 41 | user-select: none; 42 | min-width: 5em; 43 | max-width: 8em; 44 | min-height: 1em; 45 | width: 100%; 46 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 47 | } 48 | 49 | #intelButton { 50 | background-color: #2166b3; 51 | color: white 52 | } 53 | 54 | #intelButton:hover { 55 | background-color: hsl(212, 69%, 55%); 56 | } 57 | 58 | #amdButton { 59 | background-color: #dc0032; 60 | color: white 61 | } 62 | 63 | #amdButton:hover { 64 | background-color: hsl(346, 100%, 65%); 65 | } 66 | 67 | #nvidiaButton { 68 | background-color: #71bb21; 69 | color: white 70 | } 71 | 72 | #nvidiaButton:hover { 73 | background-color: hsl(89, 70%, 60%); 74 | } 75 | 76 | .comparison-table { 77 | table-layout: fixed; 78 | width: 100%; 79 | border-spacing: 0.4em; 80 | } 81 | 82 | .comparison-table h2 { 83 | font-size: 1.5em; 84 | } 85 | 86 | .comparison-table .card, 87 | .comparison-table .card-red, 88 | .comparison-table .card-green { 89 | vertical-align: top; 90 | } 91 | 92 | .subIcon { 93 | position: relative; 94 | left: 15px; 95 | margin-left: -12px; 96 | font-size: large; 97 | z-index: 0; 98 | } 99 | 100 | .abbreviation { 101 | text-decoration: underline !important; 102 | text-decoration-style: dotted !important; 103 | } 104 | 105 | @media only screen and (max-width: 700px) { 106 | .headerTitle { 107 | font-size: 0.7em; 108 | } 109 | 110 | .comparison-table .card-red, 111 | .comparison-table .card-green { 112 | padding: 0em; 113 | } 114 | 115 | .comparison-table .card-yellow { 116 | margin: 0em 0.75em 0em 0em; 117 | padding: 0.1em 0.5em 0.1em 0.5em; 118 | } 119 | 120 | .comparison-table { 121 | border-spacing: 0.1em; 122 | } 123 | 124 | .comparison-table h2 { 125 | font-size: 1em; 126 | } 127 | 128 | .comparison-table ul { 129 | font-size: 0.8em; 130 | word-wrap: break-word; 131 | line-height: 1.3em; 132 | list-style-position: outside; 133 | margin-left: -3em; 134 | list-style: none; 135 | } 136 | } 137 | 138 | .disabled { 139 | display: none; 140 | opacity: 0%; 141 | pointer-events: none; 142 | } -------------------------------------------------------------------------------- /css/guideColors.css: -------------------------------------------------------------------------------- 1 | strong { 2 | color: #e3b2da; 3 | } 4 | 5 | body { 6 | background-color: #201d20 !important; 7 | } 8 | 9 | .sidebar, 10 | .header { 11 | background: #2b292b !important; 12 | } 13 | 14 | .sidebar .active::before { 15 | background-color: #e3b2da !important; 16 | } 17 | 18 | textarea { 19 | border-color: #e3b2da !important; 20 | }/*# sourceMappingURL=guideColors.css.map */ -------------------------------------------------------------------------------- /css/guideColors.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["guideColors.scss","guideColors.css"],"names":[],"mappings":"AAAA;EACI,cAAA;ACCJ;;ADEA;EACI,oCAAA;ACCJ;;ADEA;;EAEI,8BAAA;ACCJ;;ADEA;EACI,oCAAA;ACCJ;;ADEA;EACI,gCAAA;ACCJ","file":"guideColors.css"} -------------------------------------------------------------------------------- /css/guideColors.scss: -------------------------------------------------------------------------------- 1 | strong { 2 | color: #e3b2da; 3 | } 4 | 5 | body { 6 | background-color: #201d20 !important; 7 | } 8 | 9 | .sidebar, 10 | .header { 11 | background: #2b292b !important; 12 | } 13 | 14 | .sidebar .active::before { 15 | background-color: #e3b2da !important; 16 | } 17 | 18 | textarea { 19 | border-color: #e3b2da !important; 20 | } -------------------------------------------------------------------------------- /css/header.css: -------------------------------------------------------------------------------- 1 | .header { 2 | outline: 1px solid rgba(0, 0, 0, 0.1); 3 | background-color: rgb(43, 43, 43); 4 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.13); 5 | padding: 0 1em 0 1em; 6 | border-bottom-left-radius: 8px; 7 | border-bottom-right-radius: 8px; 8 | border: 1px solid transparent; 9 | display: flex; 10 | position: fixed; 11 | width: 100%; 12 | z-index: 3; 13 | height: 5em; 14 | } 15 | 16 | .guideLinks { 17 | display: flex; 18 | align-items: center; 19 | margin-left: auto; 20 | } 21 | 22 | .guideLinks a { 23 | color: #ffffff; 24 | font-size: 1.2em; 25 | margin-right: 1em; 26 | } 27 | 28 | .headerTitle { 29 | display: flex; 30 | align-items: center; 31 | } 32 | 33 | .headerTitle a { 34 | font-size: 2em; 35 | color: rgb(255, 255, 255); 36 | } 37 | 38 | .header a:hover { 39 | text-shadow: rgba(255, 255, 255, 0.5) 0 0 10px; 40 | } 41 | 42 | .headerTitle img { 43 | padding: 0.8em 1em 0.8em 0em; 44 | max-width: 100%; 45 | max-height: 100%; 46 | } 47 | 48 | .headerMenu { 49 | display: flex; 50 | align-items: center; 51 | } 52 | 53 | .headerMenu img { 54 | padding: 0.8em 1em 0.8em 0em; 55 | width: 100%; 56 | height: 100%; 57 | } 58 | 59 | #navButton { 60 | cursor: pointer; 61 | } 62 | 63 | #navButton:hover { 64 | transform: scale3d(1.05, 1.05, 1.05); 65 | } 66 | 67 | #navButton:active { 68 | transform: scale3d(0.95, 0.95, 0.95) !important; 69 | } 70 | 71 | @media only screen and (max-width: 700px) { 72 | .guideLinks { 73 | display: none; 74 | } 75 | } 76 | @media only screen and (max-width: 700px) { 77 | #logo { 78 | display: none; 79 | } 80 | } 81 | @media only screen and (min-width: 900px) { 82 | .headerMenu { 83 | display: none; 84 | } 85 | }/*# sourceMappingURL=header.css.map */ -------------------------------------------------------------------------------- /css/header.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["header.scss","header.css"],"names":[],"mappings":"AAAA;EACI,qCAAA;EACA,iCAAA;EACA,2CAAA;EACA,oBAAA;EACA,8BAAA;EACA,+BAAA;EACA,6BAAA;EACA,aAAA;EACA,eAAA;EACA,WAAA;EACA,UAAA;EACA,WAAA;ACCJ;;ADEA;EACI,aAAA;EACA,mBAAA;EACA,iBAAA;ACCJ;;ADEA;EACI,cAAA;EACA,gBAAA;EACA,iBAAA;ACCJ;;ADEA;EACI,aAAA;EACA,mBAAA;ACCJ;;ADEA;EACI,cAAA;EACA,yBAAA;ACCJ;;ADEA;EACI,8CAAA;ACCJ;;ADEA;EACI,4BAAA;EACA,eAAA;EACA,gBAAA;ACCJ;;ADEA;EACI,aAAA;EACA,mBAAA;ACCJ;;ADEA;EACI,4BAAA;EACA,WAAA;EACA,YAAA;ACCJ;;ADEA;EACI,eAAA;ACCJ;;ADEA;EACI,oCAAA;ACCJ;;ADEA;EACI,+CAAA;ACCJ;;ADEA;EACI;IACI,aAAA;ECCN;AACF;ADEA;EACI;IACI,aAAA;ECAN;AACF;ADGA;EACI;IACI,aAAA;ECDN;AACF","file":"header.css"} -------------------------------------------------------------------------------- /css/header.scss: -------------------------------------------------------------------------------- 1 | .header { 2 | outline: 1px solid rgba(0, 0, 0, 10%); 3 | background-color: rgb(43, 43, 43); 4 | box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 13%); 5 | padding: 0 1em 0 1em; 6 | border-bottom-left-radius: 8px; 7 | border-bottom-right-radius: 8px; 8 | border: 1px solid transparent; 9 | display: flex; 10 | position: fixed; 11 | width: 100%; 12 | z-index: 3; 13 | height: 5em; 14 | } 15 | 16 | .guideLinks { 17 | display: flex; 18 | align-items: center; 19 | margin-left: auto; 20 | } 21 | 22 | .guideLinks a { 23 | color: #ffffff; 24 | font-size: 1.2em; 25 | margin-right: 1em; 26 | } 27 | 28 | .headerTitle { 29 | display: flex; 30 | align-items: center; 31 | } 32 | 33 | .headerTitle a { 34 | font-size: 2em; 35 | color: rgb(255, 255, 255); 36 | } 37 | 38 | .header a:hover { 39 | text-shadow: rgba(255, 255, 255, 0.5) 0 0 10px; 40 | } 41 | 42 | .headerTitle img { 43 | padding: 0.8em 1em 0.8em 0em; 44 | max-width: 100%; 45 | max-height: 100%; 46 | } 47 | 48 | .headerMenu { 49 | display: flex; 50 | align-items: center; 51 | } 52 | 53 | .headerMenu img { 54 | padding: 0.8em 1em 0.8em 0em; 55 | width: 100%; 56 | height: 100%; 57 | } 58 | 59 | #navButton { 60 | cursor: pointer; 61 | } 62 | 63 | #navButton:hover { 64 | transform: scale3d(1.05, 1.05, 1.05); 65 | } 66 | 67 | #navButton:active { 68 | transform: scale3d(0.95, 0.95, 0.95) !important; 69 | } 70 | 71 | @media only screen and (max-width: 700px) { 72 | .guideLinks { 73 | display: none; 74 | } 75 | } 76 | 77 | @media only screen and (max-width: 700px) { 78 | #logo { 79 | display: none; 80 | } 81 | } 82 | 83 | @media only screen and (min-width: 900px) { 84 | .headerMenu { 85 | display: none; 86 | } 87 | } -------------------------------------------------------------------------------- /css/images.css: -------------------------------------------------------------------------------- 1 | .image-container { 2 | margin: 1em 0 1em 0; 3 | position: relative; 4 | display: inline-flex; 5 | cursor: pointer; 6 | max-width: 80%; 7 | } 8 | 9 | .image-container img { 10 | box-shadow: 0 2pt 4pt 0 rgba(0, 0, 0, 0.5); 11 | border-radius: 6pt; 12 | max-width: 100%; 13 | height: auto; 14 | } 15 | 16 | .resize-overlay { 17 | position: absolute; 18 | top: 10px; 19 | right: 10px; 20 | width: 0px; 21 | height: 0px; 22 | background-size: contain; 23 | background-repeat: no-repeat; 24 | background-color: rgba(0, 0, 0, 0.6); 25 | background-image: none !important; 26 | padding: 5px; 27 | display: flex; 28 | border-radius: 6pt; 29 | transition: all 0.4s; 30 | pointer-events: none; 31 | } 32 | 33 | .image-container:hover .resize-overlay, 34 | .overlay .resize-overlay { 35 | width: 32px !important; 36 | height: 32px !important; 37 | padding: 10px !important; 38 | } 39 | 40 | .image-container:hover .resize-overlay.expand { 41 | background-image: url("../img/UI/Maximize.svg") !important; 42 | } 43 | 44 | .image-container:hover .resize-overlay.shrink, 45 | .overlay .resize-overlay.shrink { 46 | background-image: url("../img/UI/Minimize.svg") !important; 47 | } 48 | 49 | .image-container:hover img { 50 | box-shadow: 0 0pt 10pt 0 rgba(255, 255, 255, 0.4); 51 | } 52 | 53 | .overlay { 54 | position: fixed; 55 | top: 0; 56 | left: 0; 57 | width: 100%; 58 | height: 100%; 59 | background: rgba(0, 0, 0, 0.8); 60 | display: flex; 61 | align-items: center; 62 | justify-content: center; 63 | z-index: 1000; 64 | display: none; 65 | } 66 | 67 | .enlarged-image { 68 | display: block; 69 | max-height: 50vw; 70 | width: auto; 71 | height: auto; 72 | border-radius: 6pt; 73 | box-shadow: 0 2pt 4pt 0 rgba(0, 0, 0, 0.5); 74 | } 75 | 76 | .mo2-icon { 77 | position: relative; 78 | width: 2em; 79 | height: 2em; 80 | top: 0.5em; 81 | margin-top: -1em; 82 | } 83 | 84 | .logo-container { 85 | display: flex; 86 | justify-content: space-between; 87 | } 88 | 89 | .logo-container img { 90 | display: flex; 91 | height: 256px !important; 92 | padding: 1em; 93 | -webkit-user-select: none !important; 94 | -moz-user-select: none !important; 95 | user-select: none !important; 96 | pointer-events: none !important; 97 | } 98 | 99 | @media only screen and (max-width: 900px) { 100 | .image-container { 101 | max-width: 95% !important; 102 | } 103 | .overlay .image-container { 104 | max-width: 100% !important; 105 | } 106 | .enlarged-image { 107 | max-height: 100vw !important; 108 | } 109 | .logo-container { 110 | flex-direction: column; 111 | align-items: center; 112 | } 113 | }/*# sourceMappingURL=images.css.map */ -------------------------------------------------------------------------------- /css/images.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["images.scss","images.css"],"names":[],"mappings":"AAAA;EACI,mBAAA;EACA,kBAAA;EACA,oBAAA;EACA,eAAA;EACA,cAAA;ACCJ;;ADEA;EACI,0CAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;ACCJ;;ADEA;EACI,kBAAA;EACA,SAAA;EACA,WAAA;EACA,UAAA;EACA,WAAA;EACA,wBAAA;EACA,4BAAA;EACA,oCAAA;EACA,iCAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,oBAAA;EACA,oBAAA;ACCJ;;ADEA;;EAEI,sBAAA;EACA,uBAAA;EACA,wBAAA;ACCJ;;ADEA;EACI,0DAAA;ACCJ;;ADEA;;EAEI,0DAAA;ACCJ;;ADEA;EACI,iDAAA;ACCJ;;ADEA;EACI,eAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,8BAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,aAAA;EACA,aAAA;ACCJ;;ADEA;EACI,cAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,0CAAA;ACCJ;;ADEA;EACI,kBAAA;EACA,UAAA;EACA,WAAA;EACA,UAAA;EACA,gBAAA;ACCJ;;ADEA;EACI,aAAA;EACA,8BAAA;ACCJ;;ADEA;EACI,aAAA;EACA,wBAAA;EACA,YAAA;EACA,oCAAA;KAAA,iCAAA;UAAA,4BAAA;EACA,+BAAA;ACCJ;;ADEA;EACI;IACI,yBAAA;ECCN;EDEE;IACI,0BAAA;ECAN;EDGE;IACI,4BAAA;ECDN;EDIE;IACI,sBAAA;IACA,mBAAA;ECFN;AACF","file":"images.css"} -------------------------------------------------------------------------------- /css/images.scss: -------------------------------------------------------------------------------- 1 | .image-container { 2 | margin: 1em 0 1em 0; 3 | position: relative; 4 | display: inline-flex; 5 | cursor: pointer; 6 | max-width: 80%; 7 | } 8 | 9 | .image-container img { 10 | box-shadow: 0 2pt 4pt 0 rgba(0, 0, 0, 50%); 11 | border-radius: 6pt; 12 | max-width: 100%; 13 | height: auto; 14 | } 15 | 16 | .resize-overlay { 17 | position: absolute; 18 | top: 10px; 19 | right: 10px; 20 | width: 0px; 21 | height: 0px; 22 | background-size: contain; 23 | background-repeat: no-repeat; 24 | background-color: rgba(0, 0, 0, 0.6); 25 | background-image: none !important; 26 | padding: 5px; 27 | display: flex; 28 | border-radius: 6pt; 29 | transition: all 0.4s; 30 | pointer-events: none; 31 | } 32 | 33 | .image-container:hover .resize-overlay, 34 | .overlay .resize-overlay { 35 | width: 32px !important; 36 | height: 32px !important; 37 | padding: 10px !important; 38 | } 39 | 40 | .image-container:hover .resize-overlay.expand { 41 | background-image: url("../img/UI/Maximize.svg") !important; 42 | } 43 | 44 | .image-container:hover .resize-overlay.shrink, 45 | .overlay .resize-overlay.shrink { 46 | background-image: url("../img/UI/Minimize.svg") !important; 47 | } 48 | 49 | .image-container:hover img { 50 | box-shadow: 0 0pt 10pt 0 rgba(255, 255, 255, 0.4); 51 | } 52 | 53 | .overlay { 54 | position: fixed; 55 | top: 0; 56 | left: 0; 57 | width: 100%; 58 | height: 100%; 59 | background: rgba(0, 0, 0, 0.8); 60 | display: flex; 61 | align-items: center; 62 | justify-content: center; 63 | z-index: 1000; 64 | display: none; 65 | } 66 | 67 | .enlarged-image { 68 | display: block; 69 | max-height: 50vw; 70 | width: auto; 71 | height: auto; 72 | border-radius: 6pt; 73 | box-shadow: 0 2pt 4pt 0 rgba(0, 0, 0, 50%); 74 | } 75 | 76 | .mo2-icon { 77 | position: relative; 78 | width: 2em; 79 | height: 2em; 80 | top: 0.5em; 81 | margin-top: -1em; 82 | } 83 | 84 | .logo-container { 85 | display: flex; 86 | justify-content: space-between; 87 | } 88 | 89 | .logo-container img { 90 | display: flex; 91 | height: 256px !important; 92 | padding: 1em; 93 | user-select: none !important; 94 | pointer-events: none !important; 95 | } 96 | 97 | @media only screen and (max-width: 900px) { 98 | .image-container { 99 | max-width: 95% !important; 100 | } 101 | 102 | .overlay .image-container { 103 | max-width: 100% !important; 104 | } 105 | 106 | .enlarged-image { 107 | max-height: 100vw !important; 108 | } 109 | 110 | .logo-container { 111 | flex-direction: column; 112 | align-items: center; 113 | } 114 | } -------------------------------------------------------------------------------- /css/progressBar.css: -------------------------------------------------------------------------------- 1 | .progress-container { 2 | z-index: 2; 3 | width: 100%; 4 | height: 5.2em; 5 | background-color: #6e6e6e; 6 | border-bottom-left-radius: 8px; 7 | border-bottom-right-radius: 8px; 8 | position: fixed; 9 | } 10 | 11 | .progress-bar { 12 | height: 5.2em; 13 | width: 0%; 14 | background-color: #71e075; 15 | border-bottom-left-radius: 8px; 16 | border-bottom-right-radius: 8px; 17 | }/*# sourceMappingURL=progressBar.css.map */ -------------------------------------------------------------------------------- /css/progressBar.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["progressBar.scss","progressBar.css"],"names":[],"mappings":"AAAA;EACI,UAAA;EACA,WAAA;EACA,aAAA;EACA,yBAAA;EACA,8BAAA;EACA,+BAAA;EACA,eAAA;ACCJ;;ADEA;EACI,aAAA;EACA,SAAA;EACA,yBAAA;EACA,8BAAA;EACA,+BAAA;ACCJ","file":"progressBar.css"} -------------------------------------------------------------------------------- /css/progressBar.scss: -------------------------------------------------------------------------------- 1 | .progress-container { 2 | z-index: 2; 3 | width: 100%; 4 | height: 5.2em; 5 | background-color: #6e6e6e; 6 | border-bottom-left-radius: 8px; 7 | border-bottom-right-radius: 8px; 8 | position: fixed; 9 | } 10 | 11 | .progress-bar { 12 | height: 5.2em; 13 | width: 0%; 14 | background-color: #71e075; 15 | border-bottom-left-radius: 8px; 16 | border-bottom-right-radius: 8px; 17 | } -------------------------------------------------------------------------------- /css/sidebar.css: -------------------------------------------------------------------------------- 1 | .sidebar { 2 | display: flex; 3 | flex-direction: column; 4 | width: 15em; 5 | text-align: left; 6 | position: fixed; 7 | margin-top: 5.75em; 8 | margin-left: 0.75em; 9 | border-radius: 4px; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | user-select: none; 13 | background: #2b2b2b; 14 | outline: 1px solid rgba(0, 0, 0, 0.1); 15 | overflow-x: hidden; 16 | overflow-y: auto; 17 | height: calc(100vh - 6.25em); 18 | transition: all 333ms cubic-bezier(0, 0, 0, 1); 19 | justify-content: flex-start; 20 | } 21 | 22 | .left-sidebar { 23 | left: 0; 24 | } 25 | 26 | .right-sidebar { 27 | right: 0; 28 | flex-wrap: nowrap; 29 | padding-left: 0.7em; 30 | margin-right: 0.75em; 31 | width: 15.7em; 32 | } 33 | 34 | .sidebar-padder { 35 | display: flex; 36 | flex-direction: column; 37 | flex-grow: 1; 38 | } 39 | 40 | .sidebar-bottom { 41 | margin-top: auto; 42 | } 43 | 44 | .sidebar .active { 45 | background: rgba(255, 255, 255, 0.1); 46 | } 47 | 48 | .sidebar .active::before { 49 | content: ""; 50 | position: absolute; 51 | left: 0; 52 | transform: translateY(2px); 53 | width: 3px; 54 | height: 16px; 55 | background-color: #ff0000; 56 | border-radius: 8px; 57 | } 58 | 59 | .sidebar p { 60 | margin: 10px 0; 61 | } 62 | 63 | .left-sidebar a, 64 | .sublink { 65 | display: flex; 66 | color: rgb(255, 255, 255); 67 | border: 1px solid transparent; 68 | background-color: transparent; 69 | border-radius: 4px; 70 | height: 32px; 71 | width: auto; 72 | text-align: left; 73 | text-decoration: none; 74 | padding: 5px 12px; 75 | font-size: 1.05em; 76 | margin: 1.5px 0; 77 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 78 | text-wrap: nowrap; 79 | text-overflow: clip; 80 | } 81 | 82 | .sublink { 83 | padding-left: 1.5em !important; 84 | display: none !important; 85 | } 86 | 87 | .right-sidebar div { 88 | padding-bottom: 0.75em; 89 | } 90 | 91 | .right-sidebar a:not(b a) { 92 | display: flex; 93 | color: rgb(255, 255, 255) !important; 94 | text-decoration: none; 95 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 96 | padding: 0.2em 0em 0.2em 1em; 97 | } 98 | 99 | .right-sidebar b a { 100 | display: flex; 101 | color: rgb(255, 255, 255) !important; 102 | text-decoration: none; 103 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 104 | text-wrap: nowrap; 105 | } 106 | 107 | .left-sidebar hr { 108 | margin: 0px 10px !important; 109 | } 110 | 111 | .left-sidebar a:hover { 112 | background: rgba(255, 255, 255, 0.0605); 113 | border: 1px solid rgba(255, 255, 255, 0.0605); 114 | } 115 | 116 | .right-sidebar a:hover { 117 | color: rgba(255, 255, 255, 0.8) !important; 118 | } 119 | 120 | .left-sidebar a:active { 121 | background: rgba(255, 255, 255, 0.0419); 122 | border: 1px solid rgba(255, 255, 255, 0.0419); 123 | color: rgba(255, 255, 255, 0.786); 124 | } 125 | 126 | .right-sidebar a:active { 127 | color: rgba(255, 255, 255, 0.5) !important; 128 | } 129 | 130 | @media only screen and (max-width: 900px) { 131 | .left-sidebar { 132 | height: 100% !important; 133 | width: 0; 134 | margin-left: 0; 135 | margin-top: 0; 136 | padding-top: 5em; 137 | border-top-left-radius: 0; 138 | border-bottom-left-radius: 0; 139 | z-index: 1; 140 | box-shadow: rgba(0, 0, 0, 0.4) 0px 0px 10px; 141 | } 142 | .left-sidebar a, 143 | .sublink { 144 | height: 36px !important; 145 | padding: 7px 12px !important; 146 | } 147 | } 148 | @media only screen and (max-width: 1230px) { 149 | .right-sidebar { 150 | height: 100%; 151 | right: -200em; 152 | } 153 | }/*# sourceMappingURL=sidebar.css.map */ -------------------------------------------------------------------------------- /css/sidebar.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["sidebar.scss","sidebar.css"],"names":[],"mappings":"AAAA;EACI,aAAA;EACA,sBAAA;EACA,WAAA;EACA,gBAAA;EACA,eAAA;EACA,kBAAA;EACA,mBAAA;EACA,kBAAA;EACA,yBAAA;KAAA,sBAAA;UAAA,iBAAA;EACA,mBAAA;EACA,qCAAA;EACA,kBAAA;EACA,gBAAA;EACA,4BAAA;EACA,8CAAA;EACA,2BAAA;ACCJ;;ADEA;EACI,OAAA;ACCJ;;ADEA;EACI,QAAA;EACA,iBAAA;EACA,mBAAA;EACA,oBAAA;EACA,aAAA;ACCJ;;ADEA;EACI,aAAA;EACA,sBAAA;EACA,YAAA;ACCJ;;ADEA;EACI,gBAAA;ACCJ;;ADEA;EACI,oCAAA;ACCJ;;ADEA;EACI,WAAA;EACA,kBAAA;EACA,OAAA;EACA,0BAAA;EACA,UAAA;EACA,YAAA;EACA,yBAAA;EACA,kBAAA;ACCJ;;ADEA;EACI,cAAA;ACCJ;;ADEA;;EAEI,aAAA;EACA,yBAAA;EACA,6BAAA;EACA,6BAAA;EACA,kBAAA;EACA,YAAA;EACA,WAAA;EACA,gBAAA;EACA,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;EACA,8CAAA;EACA,iBAAA;EACA,mBAAA;ACCJ;;ADEA;EACI,8BAAA;EACA,wBAAA;ACCJ;;ADEA;EACI,sBAAA;ACCJ;;ADEA;EACI,aAAA;EACA,oCAAA;EACA,qBAAA;EACA,8CAAA;EACA,4BAAA;ACCJ;;ADEA;EACI,aAAA;EACA,oCAAA;EACA,qBAAA;EACA,8CAAA;EACA,iBAAA;ACCJ;;ADEA;EACI,2BAAA;ACCJ;;ADEA;EACI,uCAAA;EACA,6CAAA;ACCJ;;ADEA;EACI,0CAAA;ACCJ;;ADEA;EACI,uCAAA;EACA,6CAAA;EACA,iCAAA;ACCJ;;ADEA;EACI,0CAAA;ACCJ;;ADEA;EACI;IACI,uBAAA;IACA,QAAA;IACA,cAAA;IACA,aAAA;IACA,gBAAA;IACA,yBAAA;IACA,4BAAA;IACA,UAAA;IACA,2CAAA;ECCN;EDEE;;IAEI,uBAAA;IACA,4BAAA;ECAN;AACF;ADGA;EACI;IACI,YAAA;IACA,aAAA;ECDN;AACF","file":"sidebar.css"} -------------------------------------------------------------------------------- /css/sidebar.scss: -------------------------------------------------------------------------------- 1 | .sidebar { 2 | display: flex; 3 | flex-direction: column; 4 | width: 15em; 5 | text-align: left; 6 | position: fixed; 7 | margin-top: 5.75em; 8 | margin-left: 0.75em; 9 | border-radius: 4px; 10 | user-select: none; 11 | background: #2b2b2b; 12 | outline: 1px solid rgba(0, 0, 0, 10%); 13 | overflow-x: hidden; 14 | overflow-y: auto; 15 | height: calc(100vh - 6.25em); 16 | transition: all 333ms cubic-bezier(0, 0, 0, 1); 17 | justify-content: flex-start; 18 | } 19 | 20 | .left-sidebar { 21 | left: 0; 22 | } 23 | 24 | .right-sidebar { 25 | right: 0; 26 | flex-wrap: nowrap; 27 | padding-left: 0.7em; 28 | margin-right: 0.75em; 29 | width: 15.7em; 30 | } 31 | 32 | .sidebar-padder { 33 | display: flex; 34 | flex-direction: column; 35 | flex-grow: 1; 36 | } 37 | 38 | .sidebar-bottom { 39 | margin-top: auto; 40 | } 41 | 42 | .sidebar .active { 43 | background: rgba(255, 255, 255, 0.1); 44 | } 45 | 46 | .sidebar .active::before { 47 | content: ''; 48 | position: absolute; 49 | left: 0; 50 | transform: translateY(2px); 51 | width: 3px; 52 | height: 16px; 53 | background-color: #ff0000; 54 | border-radius: 8px; 55 | } 56 | 57 | .sidebar p { 58 | margin: 10px 0; 59 | } 60 | 61 | .left-sidebar a, 62 | .sublink { 63 | display: flex; 64 | color: rgb(255, 255, 255); 65 | border: 1px solid transparent; 66 | background-color: transparent; 67 | border-radius: 4px; 68 | height: 32px; 69 | width: auto; 70 | text-align: left; 71 | text-decoration: none; 72 | padding: 5px 12px; 73 | font-size: 1.05em; 74 | margin: 1.5px 0; 75 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 76 | text-wrap: nowrap; 77 | text-overflow: clip; 78 | } 79 | 80 | .sublink { 81 | padding-left: 1.5em !important; 82 | display: none !important; 83 | } 84 | 85 | .right-sidebar div { 86 | padding-bottom: 0.75em; 87 | } 88 | 89 | .right-sidebar a:not(b a) { 90 | display: flex; 91 | color: rgb(255, 255, 255) !important; 92 | text-decoration: none; 93 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 94 | padding: 0.2em 0em 0.2em 1em; 95 | } 96 | 97 | .right-sidebar b a { 98 | display: flex; 99 | color: rgb(255, 255, 255) !important; 100 | text-decoration: none; 101 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 102 | text-wrap: nowrap; 103 | } 104 | 105 | .left-sidebar hr { 106 | margin: 0px 10px !important; 107 | } 108 | 109 | .left-sidebar a:hover { 110 | background: rgba(255, 255, 255, 0.0605); 111 | border: 1px solid rgba(255, 255, 255, 0.0605); 112 | } 113 | 114 | .right-sidebar a:hover { 115 | color: rgba(255, 255, 255, 0.8) !important; 116 | } 117 | 118 | .left-sidebar a:active { 119 | background: rgba(255, 255, 255, 0.0419); 120 | border: 1px solid rgba(255, 255, 255, 0.0419); 121 | color: rgba(255, 255, 255, 0.786); 122 | } 123 | 124 | .right-sidebar a:active { 125 | color: rgba(255, 255, 255, 0.5) !important; 126 | } 127 | 128 | @media only screen and (max-width: 900px) { 129 | .left-sidebar { 130 | height: 100% !important; 131 | width: 0; 132 | margin-left: 0; 133 | margin-top: 0; 134 | padding-top: 5em; 135 | border-top-left-radius: 0; 136 | border-bottom-left-radius: 0; 137 | z-index: 1; 138 | box-shadow: rgba(0, 0, 0, 0.4) 0px 0px 10px; 139 | } 140 | 141 | .left-sidebar a, 142 | .sublink { 143 | height: 36px !important; 144 | padding: 7px 12px !important; 145 | } 146 | } 147 | 148 | @media only screen and (max-width: 1230px) { 149 | .right-sidebar { 150 | height: 100%; 151 | right: -200em; 152 | } 153 | } -------------------------------------------------------------------------------- /css/styles.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | scroll-behavior: smooth; 4 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 5 | scrollbar-width: thin; 6 | scrollbar-color: rgba(255, 255, 255, 0.63) transparent; 7 | } 8 | 9 | *::-webkit-scrollbar { 10 | width: 12px; 11 | } 12 | 13 | *::-webkit-scrollbar-track { 14 | background: transparent; 15 | } 16 | 17 | *::-webkit-scrollbar-thumb { 18 | background-color: rgba(143, 143, 143, 0.63); 19 | border-radius: 20px; 20 | } 21 | 22 | *::-webkit-scrollbar-thumb:hover { 23 | background-color: rgba(240, 240, 240, 0.63); 24 | border-radius: 20px; 25 | scale: 10%; 26 | } 27 | 28 | html { 29 | scroll-padding-top: 5.375em; 30 | } 31 | 32 | div { 33 | display: block; 34 | } 35 | 36 | body { 37 | margin: 0; 38 | font-size: 0.9em; 39 | font-weight: 400; 40 | line-height: 1.45em; 41 | } 42 | 43 | h1 { 44 | font-size: 40px; 45 | font-weight: 600; 46 | line-height: 52px; 47 | } 48 | 49 | h2 { 50 | font-size: 2.1em; 51 | font-weight: 600; 52 | line-height: 1.2em; 53 | cursor: pointer; 54 | } 55 | 56 | h3 { 57 | font-size: 1.5em; 58 | font-weight: 600; 59 | line-height: 1.25em; 60 | } 61 | 62 | #logoBig { 63 | display: flex; 64 | flex-direction: column; 65 | justify-content: center; 66 | align-items: center; 67 | } 68 | 69 | #logoBig img { 70 | width: 100%; 71 | max-width: 220px; 72 | margin: 0; 73 | padding: 0; 74 | } 75 | 76 | .flex { 77 | display: flex; 78 | } 79 | 80 | a { 81 | color: rgb(101, 206, 253); 82 | text-decoration: none; 83 | } 84 | 85 | a:hover { 86 | color: hsl(199, 83%, 45%); 87 | } 88 | 89 | li { 90 | margin-top: 1em; 91 | margin-bottom: 1em; 92 | } 93 | 94 | input, 95 | button { 96 | color: white; 97 | background-color: rgba(255, 255, 255, 0.0605); 98 | border: 1px solid rgba(255, 255, 255, 0.093); 99 | border-radius: 3px; 100 | text-align: center; 101 | min-height: 1em; 102 | font-size: 1.1em; 103 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 104 | } 105 | 106 | input:hover, 107 | button:hover { 108 | background-color: rgba(255, 255, 255, 0.0837); 109 | } 110 | 111 | input:active, 112 | button:active { 113 | background-color: rgba(255, 255, 255, 0.0326); 114 | border-color: rgba(255, 255, 255, 0.0698); 115 | color: rgba(255, 255, 255, 0.786); 116 | } 117 | 118 | input:active { 119 | border-bottom: 1px solid rgb(101, 206, 253); 120 | } 121 | 122 | .center { 123 | margin-left: auto; 124 | margin-right: auto; 125 | } 126 | 127 | hr { 128 | border: 1px solid rgba(255, 255, 255, 0.2); 129 | border-radius: 4px; 130 | margin: 10px; 131 | } 132 | 133 | .selected { 134 | background: rgba(255, 255, 255, 0.12) !important; 135 | border: 1px solid rgba(255, 255, 255, 0.12) !important; 136 | } 137 | 138 | .annotations { 139 | font-size: small; 140 | } 141 | 142 | .container { 143 | display: flex; 144 | min-height: 100vh; 145 | } 146 | 147 | .content { 148 | flex: 1; 149 | display: flex; 150 | flex-direction: column; 151 | margin-top: 70px; 152 | margin-left: 14.5em; 153 | margin-right: 15.2em; 154 | width: 80%; 155 | padding: 0 2em; 156 | } 157 | 158 | .content-index { 159 | margin-left: 14.5em; 160 | margin-right: 14.5em; 161 | padding: 0 2em; 162 | z-index: 0; 163 | } 164 | 165 | footer { 166 | text-align: center; 167 | padding: 5px; 168 | margin-bottom: 0; 169 | margin-top: 10px; 170 | outline: 1px solid rgba(0, 0, 0, 0.1); 171 | background-color: rgba(255, 255, 255, 0.0512); 172 | } 173 | 174 | .theme { 175 | background: rgb(32, 32, 32); 176 | color: white; 177 | font-family: arial, helvetica, sans-serif; 178 | } 179 | 180 | .section { 181 | opacity: 0; 182 | transition: opacity 1s ease; 183 | } 184 | 185 | .section.fade-in { 186 | opacity: 1; 187 | } 188 | 189 | .faq h4 { 190 | margin-top: 1.7em; 191 | margin-bottom: 0.2em; 192 | } 193 | 194 | .mirror { 195 | rotate: 180deg; 196 | } 197 | 198 | .width-90 { 199 | max-width: 90% !important; 200 | } 201 | 202 | .width-70 { 203 | max-width: 70% !important; 204 | } 205 | 206 | .width-60 { 207 | max-width: 60% !important; 208 | } 209 | 210 | .width-40 { 211 | max-width: 40% !important; 212 | } 213 | 214 | textarea { 215 | padding: 1em !important; 216 | color: white; 217 | resize: none; 218 | cursor: pointer; 219 | } 220 | 221 | @keyframes rotate { 222 | 50% { 223 | transform: translateY(-6px) rotateZ(180deg); 224 | } 225 | 100% { 226 | transform: translateY(0px) rotateZ(360deg); 227 | } 228 | } 229 | @keyframes slide-down { 230 | from { 231 | max-height: 0; 232 | margin-top: -0.12px; 233 | } 234 | to { 235 | max-height: 5000px; 236 | } 237 | } 238 | @keyframes slide-up { 239 | from { 240 | max-height: 1000px; 241 | } 242 | to { 243 | max-height: 0; 244 | margin-top: -0.12px; 245 | } 246 | } 247 | @media only screen and (max-width: 1220px) { 248 | .content, 249 | .content-index { 250 | margin-right: 0px !important; 251 | } 252 | } 253 | @media only screen and (max-width: 900px) { 254 | .content, 255 | .content-index { 256 | margin-left: 0px; 257 | } 258 | } 259 | @media only screen and (max-width: 700px) { 260 | ul { 261 | margin-left: -1.75em; 262 | } 263 | ol { 264 | margin-left: -1.75em; 265 | } 266 | .content { 267 | padding: 4px; 268 | width: 100%; 269 | min-width: 0; 270 | overflow-x: hidden; 271 | } 272 | .width-90 { 273 | max-width: 100% !important; 274 | } 275 | .width-70 { 276 | max-width: 90% !important; 277 | } 278 | .width-60 { 279 | max-width: 80% !important; 280 | } 281 | .width-40 { 282 | max-width: 70% !important; 283 | } 284 | #logoBig { 285 | display: none; 286 | } 287 | .container { 288 | min-width: 100%; 289 | overflow-x: hidden; 290 | } 291 | } 292 | @media only screen and (max-width: 470px) { 293 | .container { 294 | min-width: 100%; 295 | overflow-x: hidden; 296 | } 297 | .content { 298 | padding: 4px; 299 | width: 100%; 300 | min-width: 0; 301 | margin-left: 0; 302 | margin-right: 0; 303 | overflow-x: hidden; 304 | } 305 | .card, 306 | .card-red, 307 | .card-yellow, 308 | .card-green, 309 | .image-slider { 310 | max-width: 100%; 311 | overflow-x: hidden; 312 | } 313 | .image-container, 314 | .slider-container { 315 | max-width: 100% !important; 316 | } 317 | .slider-img { 318 | max-width: 100%; 319 | height: auto; 320 | } 321 | textarea { 322 | max-width: 95%; 323 | } 324 | }/*# sourceMappingURL=styles.css.map */ -------------------------------------------------------------------------------- /css/styles.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["styles.scss","styles.css"],"names":[],"mappings":"AAAA;EACI,sBAAA;EACA,uBAAA;EACA,8CAAA;EACA,qBAAA;EACA,sDAAA;ACCJ;;ADEA;EACI,WAAA;ACCJ;;ADEA;EACI,uBAAA;ACCJ;;ADEA;EACI,2CAAA;EACA,mBAAA;ACCJ;;ADEA;EACI,2CAAA;EACA,mBAAA;EACA,UAAA;ACCJ;;ADEA;EACI,2BAAA;ACCJ;;ADEA;EACI,cAAA;ACCJ;;ADEA;EACI,SAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;ACCJ;;ADEA;EACI,eAAA;EACA,gBAAA;EACA,iBAAA;ACCJ;;ADEA;EACI,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;ACCJ;;ADEA;EACI,gBAAA;EACA,gBAAA;EACA,mBAAA;ACCJ;;ADEA;EACI,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,mBAAA;ACCJ;;ADEA;EACI,WAAA;EACA,gBAAA;EACA,SAAA;EACA,UAAA;ACCJ;;ADEA;EACI,aAAA;ACCJ;;ADEA;EACI,yBAAA;EACA,qBAAA;ACCJ;;ADEA;EACI,yBAAA;ACCJ;;ADEA;EACI,eAAA;EACA,kBAAA;ACCJ;;ADEA;;EAEI,YAAA;EACA,6CAAA;EACA,4CAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,8CAAA;ACCJ;;ADEA;;EAEI,6CAAA;ACCJ;;ADEA;;EAEI,6CAAA;EACA,yCAAA;EACA,iCAAA;ACCJ;;ADEA;EACI,2CAAA;ACCJ;;ADEA;EACI,iBAAA;EACA,kBAAA;ACCJ;;ADEA;EACI,0CAAA;EACA,kBAAA;EACA,YAAA;ACCJ;;ADEA;EACI,gDAAA;EACA,sDAAA;ACCJ;;ADEA;EACI,gBAAA;ACCJ;;ADEA;EACI,aAAA;EACA,iBAAA;ACCJ;;ADEA;EACI,OAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,oBAAA;EACA,UAAA;EACA,cAAA;ACCJ;;ADEA;EACI,mBAAA;EACA,oBAAA;EACA,cAAA;EACA,UAAA;ACCJ;;ADEA;EACI,kBAAA;EACA,YAAA;EACA,gBAAA;EACA,gBAAA;EACA,qCAAA;EACA,6CAAA;ACCJ;;ADEA;EACI,2BAAA;EACA,YAAA;EACA,yCAAA;ACCJ;;ADEA;EACI,UAAA;EACA,2BAAA;ACCJ;;ADEA;EACI,UAAA;ACCJ;;ADEA;EACI,iBAAA;EACA,oBAAA;ACCJ;;ADEA;EACI,cAAA;ACCJ;;ADEA;EACI,yBAAA;ACCJ;;ADEA;EACI,yBAAA;ACCJ;;ADEA;EACI,yBAAA;ACCJ;;ADEA;EACI,yBAAA;ACCJ;;ADEA;EACI,uBAAA;EACA,YAAA;EACA,YAAA;EACA,eAAA;ACCJ;;ADEA;EACI;IACI,2CAAA;ECCN;EDEE;IACI,0CAAA;ECAN;AACF;ADIA;EACI;IACI,aAAA;IACA,mBAAA;ECFN;EDKE;IACI,kBAAA;ECHN;AACF;ADMA;EACI;IACI,kBAAA;ECJN;EDOE;IACI,aAAA;IACA,mBAAA;ECLN;AACF;ADQA;EAEI;;IAEI,4BAAA;ECPN;AACF;ADUA;EAEI;;IAEI,gBAAA;ECTN;AACF;ADYA;EACI;IACI,oBAAA;ECVN;EDaE;IACI,oBAAA;ECXN;EDcE;IACI,YAAA;IACA,WAAA;IACA,YAAA;IACA,kBAAA;ECZN;EDeE;IACI,0BAAA;ECbN;EDgBE;IACI,yBAAA;ECdN;EDiBE;IACI,yBAAA;ECfN;EDkBE;IACI,yBAAA;EChBN;EDmBE;IACI,aAAA;ECjBN;EDoBE;IACI,eAAA;IACA,kBAAA;EClBN;AACF;ADqBA;EACI;IACI,eAAA;IACA,kBAAA;ECnBN;EDsBE;IACI,YAAA;IACA,WAAA;IACA,YAAA;IACA,cAAA;IACA,eAAA;IACA,kBAAA;ECpBN;EDuBE;;;;;IAKI,eAAA;IACA,kBAAA;ECrBN;EDwBE;;IAEI,0BAAA;ECtBN;EDyBE;IACI,eAAA;IACA,YAAA;ECvBN;ED0BE;IACI,cAAA;ECxBN;AACF","file":"styles.css"} -------------------------------------------------------------------------------- /css/styles.scss: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | scroll-behavior: smooth; 4 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 5 | scrollbar-width: thin; 6 | scrollbar-color: rgba(255, 255, 255, 0.63) transparent; 7 | } 8 | 9 | *::-webkit-scrollbar { 10 | width: 12px; 11 | } 12 | 13 | *::-webkit-scrollbar-track { 14 | background: transparent; 15 | } 16 | 17 | *::-webkit-scrollbar-thumb { 18 | background-color: rgba(143, 143, 143, 0.63); 19 | border-radius: 20px; 20 | } 21 | 22 | *::-webkit-scrollbar-thumb:hover { 23 | background-color: rgba(240, 240, 240, 0.63); 24 | border-radius: 20px; 25 | scale: 10% 26 | } 27 | 28 | html { 29 | scroll-padding-top: 5.375em; 30 | } 31 | 32 | div { 33 | display: block; 34 | } 35 | 36 | body { 37 | margin: 0; 38 | font-size: 0.9em; 39 | font-weight: 400; 40 | line-height: 1.45em; 41 | } 42 | 43 | h1 { 44 | font-size: 40px; 45 | font-weight: 600; 46 | line-height: 52px; 47 | } 48 | 49 | h2 { 50 | font-size: 2.1em; 51 | font-weight: 600; 52 | line-height: 1.2em; 53 | cursor: pointer; 54 | } 55 | 56 | h3 { 57 | font-size: 1.5em; 58 | font-weight: 600; 59 | line-height: 1.25em; 60 | } 61 | 62 | #logoBig { 63 | display: flex; 64 | flex-direction: column; 65 | justify-content: center; 66 | align-items: center; 67 | } 68 | 69 | #logoBig img { 70 | width: 100%; 71 | max-width: 220px; 72 | margin: 0; 73 | padding: 0; 74 | } 75 | 76 | .flex { 77 | display: flex; 78 | } 79 | 80 | a { 81 | color: rgb(101, 206, 253); 82 | text-decoration: none; 83 | } 84 | 85 | a:hover { 86 | color: hsl(199, 83%, 45%); 87 | } 88 | 89 | li { 90 | margin-top: 1em; 91 | margin-bottom: 1em; 92 | } 93 | 94 | input, 95 | button { 96 | color: white; 97 | background-color: rgba(255, 255, 255, 6.05%); 98 | border: 1px solid rgba(255, 255, 255, 9.3%); 99 | border-radius: 3px; 100 | text-align: center; 101 | min-height: 1em; 102 | font-size: 1.1em; 103 | transition: all 187ms Cubic-Bezier(0, 0, 0, 1); 104 | } 105 | 106 | input:hover, 107 | button:hover { 108 | background-color: rgba(255, 255, 255, 8.37%); 109 | } 110 | 111 | input:active, 112 | button:active { 113 | background-color: rgba(255, 255, 255, 3.26%); 114 | border-color: rgba(255, 255, 255, 6.98%); 115 | color: rgba(255, 255, 255, 78.6%); 116 | } 117 | 118 | input:active { 119 | border-bottom: 1px solid rgb(101, 206, 253); 120 | } 121 | 122 | .center { 123 | margin-left: auto; 124 | margin-right: auto; 125 | } 126 | 127 | hr { 128 | border: 1px solid rgba(255, 255, 255, 0.2); 129 | border-radius: 4px; 130 | margin: 10px; 131 | } 132 | 133 | .selected { 134 | background: rgba(255, 255, 255, 0.12) !important; 135 | border: 1px solid rgba(255, 255, 255, 0.12) !important; 136 | } 137 | 138 | .annotations { 139 | font-size: small; 140 | } 141 | 142 | .container { 143 | display: flex; 144 | min-height: 100vh; 145 | } 146 | 147 | .content { 148 | flex: 1; 149 | display: flex; 150 | flex-direction: column; 151 | margin-top: 70px; 152 | margin-left: 14.5em; 153 | margin-right: 15.2em; 154 | width: 80%; 155 | padding: 0 2em; 156 | } 157 | 158 | .content-index { 159 | margin-left: 14.5em; 160 | margin-right: 14.5em; 161 | padding: 0 2em; 162 | z-index: 0; 163 | } 164 | 165 | footer { 166 | text-align: center; 167 | padding: 5px; 168 | margin-bottom: 0; 169 | margin-top: 10px; 170 | outline: 1px solid rgba(0, 0, 0, 10%); 171 | background-color: rgba(255, 255, 255, 5.12%); 172 | } 173 | 174 | .theme { 175 | background: rgb(32, 32, 32); 176 | color: white; 177 | font-family: arial, helvetica, sans-serif; 178 | } 179 | 180 | .section { 181 | opacity: 0; 182 | transition: opacity 1s ease; 183 | } 184 | 185 | .section.fade-in { 186 | opacity: 1; 187 | } 188 | 189 | .faq h4 { 190 | margin-top: 1.7em; 191 | margin-bottom: 0.2em; 192 | } 193 | 194 | .mirror { 195 | rotate: 180deg; 196 | } 197 | 198 | .width-90 { 199 | max-width: 90% !important; 200 | } 201 | 202 | .width-70 { 203 | max-width: 70% !important; 204 | } 205 | 206 | .width-60 { 207 | max-width: 60% !important; 208 | } 209 | 210 | .width-40 { 211 | max-width: 40% !important; 212 | } 213 | 214 | textarea { 215 | padding: 1em !important; 216 | color: white; 217 | resize: none; 218 | cursor: pointer; 219 | } 220 | 221 | @keyframes rotate { 222 | 50% { 223 | transform: translateY(-6px) rotateZ(180deg); 224 | } 225 | 226 | 100% { 227 | transform: translateY(0px) rotateZ(360deg); 228 | } 229 | 230 | } 231 | 232 | @keyframes slide-down { 233 | from { 234 | max-height: 0; 235 | margin-top: -0.12px; 236 | } 237 | 238 | to { 239 | max-height: 5000px; 240 | } 241 | } 242 | 243 | @keyframes slide-up { 244 | from { 245 | max-height: 1000px; 246 | } 247 | 248 | to { 249 | max-height: 0; 250 | margin-top: -0.12px; 251 | } 252 | } 253 | 254 | @media only screen and (max-width: 1220px) { 255 | 256 | .content, 257 | .content-index { 258 | margin-right: 0px !important; 259 | } 260 | } 261 | 262 | @media only screen and (max-width: 900px) { 263 | 264 | .content, 265 | .content-index { 266 | margin-left: 0px; 267 | } 268 | } 269 | 270 | @media only screen and (max-width: 700px) { 271 | ul { 272 | margin-left: -1.75em; 273 | } 274 | 275 | ol { 276 | margin-left: -1.75em; 277 | } 278 | 279 | .content { 280 | padding: 4px; 281 | width: 100%; 282 | min-width: 0; 283 | overflow-x: hidden; 284 | } 285 | 286 | .width-90 { 287 | max-width: 100% !important; 288 | } 289 | 290 | .width-70 { 291 | max-width: 90% !important; 292 | } 293 | 294 | .width-60 { 295 | max-width: 80% !important; 296 | } 297 | 298 | .width-40 { 299 | max-width: 70% !important; 300 | } 301 | 302 | #logoBig { 303 | display: none; 304 | } 305 | 306 | .container { 307 | min-width: 100%; 308 | overflow-x: hidden; 309 | } 310 | } 311 | 312 | @media only screen and (max-width: 470px) { 313 | .container { 314 | min-width: 100%; 315 | overflow-x: hidden; 316 | } 317 | 318 | .content { 319 | padding: 4px; 320 | width: 100%; 321 | min-width: 0; 322 | margin-left: 0; 323 | margin-right: 0; 324 | overflow-x: hidden; 325 | } 326 | 327 | .card, 328 | .card-red, 329 | .card-yellow, 330 | .card-green, 331 | .image-slider { 332 | max-width: 100%; 333 | overflow-x: hidden; 334 | } 335 | 336 | .image-container, 337 | .slider-container { 338 | max-width: 100% !important; 339 | } 340 | 341 | .slider-img { 342 | max-width: 100%; 343 | height: auto; 344 | } 345 | 346 | textarea { 347 | max-width: 95%; 348 | } 349 | } -------------------------------------------------------------------------------- /css/textIcons.css: -------------------------------------------------------------------------------- 1 | .link-download a::after, 2 | .link-page a::after { 3 | content: ""; 4 | margin-left: 10px; 5 | display: inline-block; 6 | width: 1.25em; 7 | height: 1.25em; 8 | transform: translateY(0.25em); 9 | background-size: contain; 10 | background-repeat: no-repeat; 11 | } 12 | 13 | .link-page a::after { 14 | background-image: url("../img/UI/Open.svg"); 15 | } 16 | 17 | .link-download a::after { 18 | background-image: url("../img/UI/Download.svg"); 19 | }/*# sourceMappingURL=textIcons.css.map */ -------------------------------------------------------------------------------- /css/textIcons.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["textIcons.scss","textIcons.css"],"names":[],"mappings":"AAAA;;EAEI,WAAA;EACA,iBAAA;EACA,qBAAA;EACA,aAAA;EACA,cAAA;EACA,6BAAA;EACA,wBAAA;EACA,4BAAA;ACCJ;;ADEA;EACI,2CAAA;ACCJ;;ADEA;EACI,+CAAA;ACCJ","file":"textIcons.css"} -------------------------------------------------------------------------------- /css/textIcons.scss: -------------------------------------------------------------------------------- 1 | .link-download a::after, 2 | .link-page a::after { 3 | content: ""; 4 | margin-left: 10px; 5 | display: inline-block; 6 | width: 1.25em; 7 | height: 1.25em; 8 | transform: translateY(0.25em); 9 | background-size: contain; 10 | background-repeat: no-repeat; 11 | } 12 | 13 | .link-page a::after { 14 | background-image: url("../img/UI/Open.svg"); 15 | } 16 | 17 | .link-download a::after { 18 | background-image: url("../img/UI/Download.svg"); 19 | } -------------------------------------------------------------------------------- /falloutnv.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | FNV Performance Guide 7 | 8 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
47 |
48 |
49 | 50 |
51 |
52 |
53 | 54 |
55 | 58 |
59 | 110 | 111 | 112 |
113 | 114 | 115 |
116 | 117 |

Introduction

118 |
119 |
120 |
121 |

122 |

Welcome!

123 | Goal of this guide is to fix the abysmal performance in Fallout: New Vegas by using more modern technologies and tweaks, and make you generally aware of its quirks and other potential issues. 124 |

125 |

126 | The guide is mostly written with an assumption that you've completed Utilities sections from 127 | Viva New Vegas 128 | or Essentials from 129 | The Best of Times, 130 | but it'll still cover mods contained within those guides. 131 |

132 |

133 | While the guide is focused on this particular game, most stuff shown here is applicable to other games. 134 |

135 |

136 | Content presented here may seem insanely long, but that's really just because I'm trying to explain everything in detail to reduce further questions and confusion - sadly there's a lot of "gotchas" when it comes to PC hardware and its configurations. 137 |
138 | Most abbreviations are explained in Terminology section, and can always be hovered over to see their full name. 139 |
140 | If you find some sections confusing, feel free to ask on Discord. 141 |

142 |
143 |
144 | 145 |
146 |
147 |
148 |

149 |

Why?

150 |

151 |

152 | Let's be honest here, the engine did not age well. The renderer is based on now 22 year old DirectX 9, which fails to fit-in with modern GPUs and Windows. 153 | It's extremely inefficient and CPU bound, has glaring issues with display modes, memory handling and overall stability. 154 |
155 | As for Bethesda's code - it also fails (horribly) to scale well with modern processors, something that you can see even in their latest titles. 156 |
157 | To make things worse, Fallout: New Vegas was compiled without compiler optimizations, which while making engine modding easier, reduces the overall performance. 158 |

159 |

160 | In short most performance issues can be summed with two words: CPU bottleneck. 161 |

162 |

163 | Even with that fact in mind, there are some tweaks to be done on the GPU and presentation side of things that can help with the overall responsiveness of the game, despite not fixing the performance on its own. 164 |

165 |
166 |
167 | 168 | 169 |
170 | 171 |

Terminology

172 |
173 |
174 |

Things You Should Know

175 |
    176 |
  • 177 | Vertical Synchronization (V-Sync) - technology allowing to keep display's scanout and refresh in phase to eliminate screen tearing, 178 | at the cost of higher latency. 179 |
    180 | (Latency lowers along with refresh rate) 181 |
  • 182 |
  • 183 | G-Sync | FreeSync - Variable Refresh Rate (VRR) technologies developed by NVIDIA and AMD respectively. 184 | They allow the display to adapt its refresh rate to the framerate, allowing to use V-Sync at arbitrary framerates and reduce its latency[1] . 185 |
  • 186 |
  • 187 | Multiplane Overlays (MPOs) - hardware scanout planes for the GPU. They allow for hardware image composition without any latency or performance penalty (for example displaying windows on top of each other), as well as 188 | their hardware scaling and stretching. 189 | MPOs are supported since Windows 8.1. Hardware capabilities vary between GPU manufacturers. 190 |
  • 191 |
  • 192 | Input Latency (lag) - time between input event (mouse click, keyboard press) and the event being displayed on the screen. The lower the latency, the more responsive the game feels. 193 |
    194 | There are multiple sources of latency, varying from GPU/CPU usage, display mode, framerate count and many more - most of them are covered in this guide. 195 |
  • 196 |
197 | 198 |
    199 |
  1. 200 | Yes, despite popular misinformation, VRR alone doesn't get rid of tearing. It can minimize the rolling tear however, but that varies between displays, and such, it's not a guaranteed feature. 201 | Additionally, the latency reduction applies only at framerates below V-Sync window (display's native refresh rate) - if framerate matches the native refresh rate, VRR engages V-Sync emulation. 202 |
  2. 203 |
204 |
205 |
206 |
207 |
208 |

209 |

Technicalities

210 | More text inside. Explains the concept of presentation models and display modes. While not needed to use the guide, it'll help you with understanding why things are the way they are. 211 |

212 |
213 | UI element - Chevron 214 |
215 |
216 |

217 |

    218 |
  • Presentation models:
  • 219 |
      220 |
    • 221 | Flip Model - presentation model first added in Windows 7 with D3D9Ex and upgraded in DXGI in Windows 8-10. 222 |
      223 | Allows "fullscreen-level" of performance and latency. Has native VRR support in Windowed Mode. Additionally, DXGI version supports tearing (V-Sync off) in Windowed Mode, HDR and has Multiplane Overlay (MPO) support. 224 |
      225 | DXGI variant is supported only in D3D10 and upwards[2], enforced only in D3D12, and exists only on Windows 8 and upwards. 226 |
      227 | D3D9Ex Flip Model is not feature matched and lacks any DXGI improvements. 228 |
      229 | More information here. 230 |
    • 231 |
    • 232 | BitBlt Model - older presentation model used by most applications. 233 | While performing similarly to Flip Model in Fullscreen, in Windowed Mode it has worse performance and always-on V-Sync on top of already additional latency caused by additional copy operations due to being software composed. 234 |
      235 | The only presentation model for Windowed D3D9 (and lower), but still very common in D3D10 and D3D11 games. 236 |

      237 | Vulkan and OpenGL[3] use BitBlt in Windowed Mode. 238 |

      239 |
    • 240 |
    241 |
  • 242 | Display modes: 243 |
  • 244 |
      245 |
    • 246 | Fullscreen Exclusive (FSE) - legacy method of displaying content where application takes complete ownership of the screen. 247 | Has slow Alt-Tab due to display ownership transfer, can be problematic if games are badly coded and switch to odd resolutions or refresh rates by default. Can lose color profiles. 248 | Despite that, it offers the best feature compatibility and perfomance for games that don't use Flip Model. Deprecated by Fullscreen Optimizations and Windowed with Flip Model for DirectX games. 249 |
      250 | Supported by every graphics API other than D3D12 251 |
    • 252 |
    • 253 | Fullscreen with Fullscreen Optimizations (Fullscreen Optimizations) - an update to FSE for DirectX added in Windows 10 1803. 254 |
      255 | Converts DirectX applications running in FSE mode into a pseudo borderless mode with Flip Model for faster Alt-Tab, 256 | lower latency, better color profile handling, and support for Windowed overlays (Xbox Game Bar, volume and brightness sliders etc.). 257 |
      258 | Because of being a Windowed Mode under the hood, it can break e.g. brightness control in old games that modify system gamma instead of window's. 259 |
      260 | Enabled by default for every application. 261 |
      262 | More information here. 263 |
    • 264 |
    • 265 | Windowed - method of displaying content in a window, always managed by DWM. Due to being a window, Alt-Tab is fast, and color profiles usually don't have any problems. 266 | If not using Flip Model, it has worse performance compared to Fullscreen Optimizations | FSE, lacks native VRR support, has increased input latency and uses always-on V-Sync 267 |
    • 268 |
    269 |
270 | 271 |
    272 |
  1. 273 | D3D10 and D3D11 supporting Flip Model doesn't mean that game actually uses it (Unity and UE4 implemented Flip Model support around 2019 - 7 years after its release!). 274 |
    275 | Flip Model in Windowed Mode can be enabled in those games using Special K (D3D11 only) or Windows 11's (22H2) Optimizations for Windowed Games (both D3D10 and D3D11). 276 |
    277 | Both implementations have good compatiblity, but there are some niche cases where a game can be unsupported by Special K, but supported by Windows - and vice versa. 278 |
    279 | Special K is recommended only for single player games due to anti-cheat concerns (it's a mod after all), while Windows' method is safe to use anywhere due to being a system feature. 280 |
  2. 281 |
  3. 282 | OpenGL can be displayed using D3D11 thanks to Special K, which enables Flip Model and all its benefits along with HDR. 283 |
    284 | Nvidia drivers can interop Vulkan and OpenGL to DXGI with Flip Model since driver version 526. 285 | OpenGL interop by default degrades performance, while DXVK compatibility requires toggling a flag in Nvidia Profile Inspector - see here how to resolve both of these issues. 286 |
    287 | AMD drivers have a D3D12 interop for OpenGL that can be toggled by enabling triple buffering in Radeon Settings. Vulkan interop is enabled automatically in windowed mode. 288 |
    289 | However, due to how it's implemented, it can cause crashes with games or mods that spawn both D3D12 and OpenGL devices. 290 |
  4. 291 |
292 |
293 |

294 |
295 |
296 | 297 |
298 |
299 | 300 | 301 |
302 | 303 |

lStewieAl's Mods

304 |
305 |
306 |

307 |

Rewritten

308 | lStewieAl has made a few of mods focused on improving the engine perfomance in multiple aspects (loading, rendering, AI processing). 309 |

310 |
311 |
312 |

313 | If you came here from Viva New Vegas or The Best of Times, you can skip this section and jump right to the NVTF configuration. 314 |

315 |
316 |
317 |

318 |

Installation

319 | Download and install the following mods with your mod manager: 320 |
    321 |
  1. lStewieAl's Tweaks and Engine Fixes
  2. 322 |
  3. Stewie Tweaks - VNV INI (or the Extended INI)
  4. 323 |
  5. lStewieAl's Engine Optimizations
  6. 324 |
  7. Faster Main Menu
  8. 325 |
326 |

327 |
328 |
329 | 330 | 331 |
332 | 333 |

New Vegas Tick Fix

334 |
335 |
336 |

337 |

Stutter Remover

338 | New Vegas Tick Fix is a mod by karut that fixes and improves game's internal clocks and memory management, which dramatically reduces stutter. 339 |
340 | It also allows playing above 60 FPS without breaking physics, although the recommended limit should be set to 120 FPS or below. 341 |
342 | Additionally, it has some DirectX changes, which help with performance and greatly reduce memory usage. 343 |

344 |
345 |
346 |

347 |

Installation

348 |
    349 |
  1. Once the mod has been installed, double-click it in the left pane of MO2.
  2. 350 |
  3. In the INI Files tab, open NVSE\Plugins\NVTF.ini
  4. 351 |
  5. Change the following option:
  6. 352 |
      353 |
    • Set bModifyDirectXBehavior to 1 if not enabled already.
    • 354 |
    • Set bUseDefaultPoolForTextures to 1.
    • 355 |
    356 |
    357 |

    358 | This setting Disables texture mirroring between VRAM and RAM, which decreases RAM usage and allows using high resolution textures. 359 |
    360 |
    361 | This also breaks Alt-Tab functionality in Fullscreen Mode.[4] 362 |
    363 | To mitigate that, either use DXVK, Windowed Mode or just avoid Alt-Tabbing. This is also covered later in the guide. 364 |

    365 |
    366 | 367 |
368 | 369 |
370 | 371 | 372 |
    373 |
  1. 374 | D3D9 loses the graphics device if it loses the screen ownership (Alt-Tab, Sleep, etc.). To recover, it needs to either have a copy of textures in RAM, or be able to reconstruct the memory from ground up. 375 |
    376 | Fallout: New Vegas, like most D3D9 games, use the first method. Thus by disabling this behavior, after Alt-Tabbing, game is in a limbo where it doesn't know what to do. 377 |
    378 | DXVK fixes this by simply being in place of D3D9, while Windowed mode guarantees the game will never own the screen in the first place. 379 |
  2. 380 |
381 |
382 |

383 |
384 |
385 | 386 | 387 |
388 | 389 |

zlib Updated

390 |
391 |
392 |

393 |

Compressed

394 | Fallout: New Vegas uses zlib compression for its BSA archives and plugins (NPC and Landscape records). 395 |
396 | zlib on its own does not belong to the fastest compression algorithms, and the version used by Bethesda is older than the game itself, which only makes things worse. 397 |
398 | By simply updating the library to the latest version, you can cut the time spent on decompression in half, which leads to faster loading times and less stuttering. 399 |
400 |

401 | This mod works only in cases where you actually have such compressed data in the first place. 402 |
403 | Most mods from 2024 should not have plugin compression, and we decompress vanilla game files using BSA Decompressor or by Tale of Two Wastelands. In such cases, this mod won't have any effect, as there's nothing to do in the first place. 404 |
405 |
406 | Unfortunately, there are a lot of older (and even new) mods with compression applied (even Yukichigai Unofficial Patch - YUP itself). 407 |
408 | In such cases it's recommended to actually decompress your plugins, which can be very easily done by following this guide. Prevention is better than mitigation, and costs nothing. 409 |
410 |
411 | Mods with BSA archives are already rare on Nexus, and usually recent, so most often they are not using compression, or deliberately compressed due to their large sizes. Using the plugin in such cases is more sensible. 412 |

413 |
414 |

415 |
416 |
417 |

418 |

Installation

419 |
    420 |
  1. 421 |

    422 | Download zlib Updated - NVSE and install it with your mod manager. 423 |

    424 |
  2. 425 |
426 |

427 |
428 |
429 | 430 | 431 |
432 | 433 |

Cell Offset Generator

434 |
435 |
436 |

437 |

Offset

438 | Automated tool for generating cell offsets on game startup, which massively reduces stutter when loading new cells. 439 |
440 | Without it, game has to scan all plugins to find cells, which can take a lot of time, especially if you have a lot of mods installed. 441 |

442 |
443 |
444 |

445 |

Installation

446 |
    447 |
  1. 448 |

    449 | Download Cell Offset Generator - NVSE and install it with your mod manager. 450 |

    451 |
  2. 452 |
    453 |

    454 | On your next game launch, you should see a progress bar during the initial loading screen. 455 |
    456 | Game will take a bit longer to load, but once it's done, most of the loading stutter should be gone. 457 |

    458 |

    459 | Subsequent loads will be much faster, as generated offsets are saved in the Data\CellOffsets folder. 460 |

    461 |
    462 |
463 |

464 |
465 |
466 | 467 | 468 |
469 | 470 |

Graphics Drivers and Windows

471 |
472 |
473 |

474 |

Driver Updates

475 |

476 | Not much to say here - for the best compatibility and performance, you must be using the newest driver for your graphics card. 477 |
478 |
479 | You can check what GPU you have by opening Task Manager, and going to the Performance tab - the last GPU in the left pane should be your main one. 480 |
481 | If you don't see any GPU there, that means your GPU is too old to use DXVK. 482 |

483 |

484 | IMPORTANT WARNING TO NVIDIA USERS: 485 |
486 | If you use a 50xx series GPU, drivers 576.02 and newer will crash the game when using DXVK. 487 |
488 | There is an unofficial patch for this issue - instructions are available on the GitHub page. Alternatively, you can downgrade to older drivers. 489 |

490 | 491 |
492 | 493 |

494 | IMPORTANT WARNING TO AMD USERS: 495 |
496 | Drivers between 24.1.1 and 24.5.1 will crash the game, so make sure that you have the latest drivers - at least 24.6.1 or newer. 497 |
498 |
499 | Alternatively, later in the guide you'll be able to fix these crashes by using DXVK. 500 |

501 |
502 | 503 | 504 | 507 | 508 | 509 | 518 | 527 | 536 | 537 |
505 |

Select your graphics card to go the driver download page

506 |
510 | 511 | 516 | 517 | 519 | 520 | 525 | 526 | 528 | 529 | 534 | 535 |
538 |

539 |

540 |
541 |
542 |

543 |

Multiplane Overlays and Windows Watermark

544 |

545 |

546 |

547 | This part applies only to D3D9 with Fullscreen Optimizations and DXVK with DXGI, since D3D9 Windowed is already in the DWM composed mode, and DXVK uses FSE. 548 |
549 | You can ignore this section if you have following GPUs: 550 |

    551 |
  • Nvidia 16 series and newer
  • 552 |
  • AMD Vega and newer (single display only)
  • 553 |
  • Intel CPUs 8th Gen and newer
  • 554 |
555 |

556 |
557 |

558 |

559 | Make sure your Windows is activated, otherwise the watermark will kick the game into the DWM composition, which leads to increased latency, worse performance and disables VRR. 560 |
561 | If you don't have a GPU with MPO (Multiplane Overlay) support, you can mitigate this by disabling Fullscreen Optimizations. 562 |
563 | (Keep in mind that this trick won't work on modern, D3D12 games, so it's still recommended to just activate Windows) 564 |
565 |
566 | How to check if your GPU supports MPOs: 567 |

    568 |
  1. 569 | Type dxdiag into Windows search 570 |
  2. 571 |
  3. 572 | Click Save All Information and save the file. 573 |
  4. 574 |
  5. 575 | Open the DxDiag.txt file, press Ctrl+F and look for MPO MaxPlanes 576 |
  6. 577 |
  7. 578 | If the number is greater than 1, then your GPU has MPO support. 579 |
  8. 580 |
581 |

582 |

583 |

584 |

585 | Having the watermark without MPOs will disable VRR and increase input latency and stuttering! 586 |

587 |
588 |

589 |

590 |
591 |
592 |

593 |

Virtualization

594 | Windows 11 uses virtualization features to increase system and inter-process security. Unfortunately, this can come at a performance cost, especially on lower-end hardware. 595 |
596 | I won't be writing on how to disable them, because... Microsoft already made a tutorial about it. 597 |
598 |
599 | This step is not mandatory, as when it comes to security, it's up to you to decide. Just letting you know that this exists, and that even Microsoft acknowledges the fact that it can degrade perfomance. 600 |

601 |
602 |
603 |

604 |

Power Plans and Modes

605 | With Windows 10, Microsoft introduced power modes, which are meant to be replacement for power plans in terms of power and perfomance management. 606 |
607 | Power modes require the Balanced power plan to be active to work. If you're any other power plan, you won't be able to use them (On most modern systems, you may find that you don't even have other power plans at all because of this). 608 |
609 |
610 | To change your power mode, go to Power settings, and select whatever highest performance option you have if the dropdown menu. 611 |
612 |

613 | On some older, or custom built machines you may not have selectable power modes at all - in that case, all that matters is just having the Balanced power plan active. 614 |

615 |

616 | If you are on a laptop, power modes are saved per connecton state - selecting a mode while on battery will not change the mode when you plug in the charger, and vice versa. 617 |

618 |
619 | 620 |
621 |

622 |

Warning!

623 | Using custom power plans is not recommended due to how integral the Balanced power plan is to Windows 10 and 11 at the low level. 624 |
625 | It can break power management on modern hardware, and can lead to increased power consumption and/or decreased performance (or even mess up things like fan speed). 626 |
627 |
628 | It is safer to customize the Balanced power plan to your liking, rather than using a custom one. (We all can agree this is not intuitive at all). 629 |

630 |
631 | 632 |

633 |
634 |
635 |

636 |

Game Mode

637 | Windows 10 introduced a feature called Game Mode, which puts the system in a more gaming-friendly state. 638 |
639 | Game Mode is a "power mode overlay", which means it requires power modes to work - the Balanced power plan must be active. 640 |

641 |

642 | Game Mode features: 643 |

    644 |
  • 645 | Enables AutoHDR for DXGI based games. 646 |
  • 647 |
  • 648 | Enables VRR optimizations for games using Flip Model - Forces the screen to sync to game's refresh rate instead of any windows that may be on top of it. 649 |
  • 650 |
  • 651 | Disables Windows Update. 652 |
  • 653 |
  • 654 | Disables notifications. 655 |
  • 656 |
  • 657 | Enables CPU scheduling optimizations for Ryzen CPUs. 658 |
  • 659 |
660 |

661 |

662 | Game Mode is enabled by default. If you had it disabled for some reason, you can enable it here. 663 |

664 |
665 |
666 | 667 | 668 |
669 | 670 |

Display Mode Differences

671 |
672 |
673 |

674 |

Presentation Problems

675 | Here's a comparison of three display modes you can use in this game. Situation is problematic mainly due to Vulkan and D3D9 using old presentation models. 676 |
677 |
678 | This section is purely informative, just to let you know what options you have and what to expect from them. 679 |
680 | 681 | 682 | 689 | 694 | 701 | 702 | 703 | 704 | 719 | 725 | 735 | 736 | 737 | 752 | 776 | 806 | 807 |
683 |

684 | Flip Model Windowed 685 |
686 | (DXVK with DXGI) 687 |

688 |
690 |

691 | Legacy/Optimized Fullscreen 692 |

693 |
695 |

696 | BitBlt Model Windowed 697 |
698 | (D3D9, Base DXVK) 699 |

700 |
705 |
    706 |
  • Best latency and performance
  • 707 |
  • Variable Refresh Rate works without any problems
  • 708 |
  • 709 | HDR output (Requires DXVK) 710 |
  • 711 |
  • 712 | Fast Alt-Tab 713 |
  • 714 |
  • 715 | Native support for color profiles 716 |
  • 717 |
718 |
720 |
    721 |
  • Best latency and performance, especially with Fullscreen Optimizations
  • 722 |
  • Variable Refresh Rate works without any problems
  • 723 |
724 |
726 |
    727 |
  • 728 | Fast Alt-Tab 729 |
  • 730 |
  • 731 | Better support for color profiles 732 |
  • 733 |
734 |
738 |
    739 |
  • 740 | In-Game brightness settings don't work 741 |
  • 742 |
  • 743 | Nvidia's interop increases memory usage by about 150-170MB, 744 |
    745 | and requires some manual setup to work with DXVK. 746 |
  • 747 |
  • 748 | Potential compatibility issues with overlays that can't properly discern between DXGI and Vulkan surfaces. 749 |
  • 750 |
751 |
753 |
    754 |
  • 755 | Slower and unstable Alt-Tab, especially without Fullscreen Optimizations 756 |
  • 757 |
    758 |

    759 | Alt-Tab doesn't work at all if NVTF's pool change 760 | is enabled, unless you use DXVK 761 |

    762 |
    763 |
  • 764 | Color profiles may disengage, especially without Fullscreen Optimizations 765 |
  • 766 |
  • 767 | When using DXVK, degrades performance on Nvidia laptops and AMD GPUs. 768 |
    769 | DXGI Interop with Flip Model must be used instead. 770 |
  • 771 |
  • 772 | HDR can be unstable - colorspace may be incorrect, and can cause issues on Alt-Tab, especially on AMD GPUs. 773 |
  • 774 |
775 |
777 |
    778 |
  • 779 | High input lag and worse performance, especially when not using any FPS limiter and/or using a laptop 780 |
  • 781 |
  • 782 | V-Sync is always on[5] 783 |
  • 784 |
  • 785 | Variable Refresh Rate doesn't work natively 786 |
  • 787 |
      788 |
    • 789 | AMD supports FreeSync in BitBlt windows that are fullscreen, but latency and performance penalties remain 790 |
    • 791 |
    • 792 | Nvidia's G-Sync support for BitBlt windows is broken[6] 793 |
    • 794 |
    795 |
  • 796 | In-Game brightness settings don't work 797 |
  • 798 |
  • 799 | Higher memory bandwidth and usage 800 |
  • 801 |
  • 802 | No HDR support 803 |
  • 804 |
805 |
808 |
809 | 810 |
    811 |
  1. 812 | Despite that disabled V-Sync unlocks the framerate, window itself is V-Synced, so you don't get any benefits. 813 |
  2. 814 |
  3. 815 | While AMD enables FreeSync for Fullscreen Windowed BitBlt surfaces, Nvidia allows G-Sync to run with any window. 816 |
    817 | This is problematic because refresh rate can get synchronized to wrong windows, framerate may break on other displays and display stutters may occur. 818 |
    819 | Enabling it globally is a bad idea, because it disrupts normal desktop usage (e.g. screen can sync to sleeping windows). 820 |
    821 | It's recommended to use Nvidia Profile Inspector to set G-Sync Application Mode to 822 | "Fullscreen and Windowed" in Fallout - New Vegas profile. This makes Windowed G-Sync run only when the game is running. 823 |
    824 | Keep in mind that even with this method, this G-Sync implementation is still buggy - if you get any of the forementioned issues, disable it. 825 |
    826 |

    Never enable Windowed G-Sync globally!

    827 |
  4. 828 |
829 |
830 |

831 |
832 |
833 | 834 | 835 |
836 | 837 |

DXVK

838 |
839 |
840 |

841 |

Translation Magic

842 | DXVK is an open source Direct3D 9-11 to Vulkan translator project lead by Philip Rebohle (doitsujin) and Joshua Ashton. While created mainly for Linux, works unofficially on Windows. 843 |
844 | In short, it allows you to run Fallout using the Vulkan API which has much lower draw call overhead than D3D9, which is one of the main performance limiting factors in this game. 845 |
846 |

847 | If you play on Linux, you are already using DXVK! You can skip this whole section. 848 |

849 |
850 |

851 |
852 |
853 |

854 |

Things to know

855 | Due to the nature of DXVK and Vulkan itself, there are some things you should be aware of: 856 |
    857 |
  • 858 |

    859 | DXVK improves performance in mainly draw call (CPU) bound scenarios (e.g. draw distance), and usually doesn't help much in GPU bound ones (e.g. resolution) 860 |

      861 |
    • 862 |

      863 | It is possible that DXVK won't change anything for you, or even make things worse 864 |

      865 |
    • 866 |
    867 |

    868 | 869 |
  • 870 |
  • 871 |

    872 | You may experience increased stutter at the beginning of your playthrough due to shader compilation. 873 |

    874 |
  • 875 |
  • 876 |

    877 | DXVK's GPU compatibility varies between manufacturers 878 |

      879 |
    • 880 |

      881 | Nvidia GPU laptops must use the DXGI interop (see below). 882 |
      883 | Using it on desktops is not required, but highly recommended for the most optimal experience 884 |

      885 |
    • 886 |
    • 887 |

      888 | AMD GPUs must use the DXGI interop (see below), otherwise they will suffer from severe performance issues or fail to launch the game. 889 |
      890 | Shader issues are more common on Windows compared to other GPUs (situation is completely reversed on Linux). 891 |
      892 |

      893 |
    • 894 |
    • 895 |

      896 | Intel GPUs from 6th Gen and newer can work provided you have newest drivers 897 | installed. 898 |
      899 | On some iGPUs, DXVK is broken past the 1.10.1 version. 900 |
      901 |

      902 |
    • 903 |
    904 |

    905 |
  • 906 |
  • 907 |

    908 | DXVK can introduce or expose few visual issues or annoyances: 909 |

      910 |
    • Transparency multisampling uses dithering - (Vulkan handles alpha to coverage differently than drivers)
    • 911 |
        912 |
      • 913 | Due to the nature of this effect, its quality improves alongside the level of MSAA used. It's recommended to use at least 4x MSAA. 914 |
      • 915 |
      • 916 | If you are an AMD, RADV Linux user, you can disable this behavior by setting RADV_DEBUG=noatocdithering environment variable. 917 |
      • 918 |
      919 |
    • Blood decals can suffer from color overflow and turn white - Fixed by Blood Decal Flashing Fix
    • 920 |
    921 |

    922 |
  • 923 |
924 |

925 |
926 |
927 |

928 |

929 |

930 | This section is only relevant if you have an HDR display, and even then it's completely optional. 931 |
932 | Due to the potentially complicated setup, it's recommended only for enthusiasts. 933 |

934 |
935 |

HDR-Mod

936 | HDR-Mod is a DXVK mod made by Lilium (aka EndlesslyFlowering) and me with the intention of adding HDR functionality to D3D9 games. 937 | Effectively it does 2 major things: 938 |
    939 |
  • 940 |

    941 | Allows to display the game in HDR (10 or 16 bit). 942 |

    943 |
  • 944 |
  • 945 |

    946 | Upgrades the precision with which the game calculates colors, greatly reducing banding - as long as you have a 10 bit display or better. 947 |

    948 |
  • 949 |
950 | 951 | You can download this version of DXVK in the next step, in Optional Files. 952 | 953 |
954 |

955 |

Tone mapping

956 | DXVK doesn't perform any HDR tone mapping, so you need to use Pumbo's ReShade AutoHDR. 957 |
958 | Failing to do so will result in washed out colors and incorrect brightness. 959 |
960 | Game's built-in screnshot function doesn't support HDR, so you need to use Game Bar, Steam or Nvidia Overlay to take screenshots. 961 |

962 |
963 |

964 |
965 |
966 |

Installation

967 |
    968 |
  1. 969 |

    970 | Manually download the latest DXVK version from Nexus. 971 |

    972 |
    973 |

    GPUs lacking Vulkan 1.3 support or having issues with 2.0, must use the 1.10.3 version.

    974 |

    Some older Intel iGPUs may need to use the 1.10.1 version.

    975 |
    976 |
  2. 977 |
  3. 978 |

    979 | Extract archive contents into your Fallout: New Vegas root folder. 980 |

    981 |
  4. 982 |
  5. 983 | If you have chosen the HDR version, download HDR Save Image Patch and install it with your mod manager. 984 |
  6. 985 |
986 |

987 |
988 |
989 |

990 |

Enabling Flip Model (DXVK with DXGI)

991 | Nvidia and AMD drivers have ability to use DirectX to display Vulkan games allowing for Flip Model in Windowed mode, which has HDR and VRR support, and better latency. 992 |
993 |

994 | This step is mandatory for Nvidia laptops and AMD GPUs to work with DXVK, otherwise you will suffer heavy performance issues. 995 |

996 |

997 | If you chose to install the HDR version of DXVK, you also must use this method. 998 |

999 |

1000 | Nvidia desktops can, and are recommended to use it for the best experience, but ultimately it's optional. 1001 |

1002 |
1003 | 1004 |
1005 | 1006 | Click on expanders below to see how to enable Flip Model for your GPU. 1007 | 1008 |
1009 |
1010 |

1011 |

1012 | Nvidia 1013 |

1014 |

1015 |
1016 | UI element - Chevron 1017 |
1018 |
1019 |
    1020 |
  1. 1021 | Enable Windowed mode in FalloutCustom.ini. 1022 |
    1023 |

    1024 | [Display] 1025 |
    1026 | bFull Screen=0 1027 |

    1028 |
    1029 |
  2. 1030 |
  3. 1031 | Download the premade Nvidia Driver Profile for Fallout New Vegas and Fallout 3. 1032 |
  4. 1033 |
  5. 1034 | Download Nvidia Profile Inspector. 1035 |
  6. 1036 |
  7. 1037 | Extract the archive and run the program. 1038 |
  8. 1039 |
  9. 1040 | Click on the Import user defined profiles button (green arrow pointing down), then Import profiles and select the FO-NvidiaProfile.nip file. 1041 |
  10. 1042 |
    1043 |

    1044 | Nvidia resets those settings on driver updates! Make sure to reapply them after updating. 1045 |
    1046 | Thanks Nvidia! 1047 |

    1048 |
    1049 |
  11. 1050 | Click Apply changes in the top right and exit. 1051 |
  12. 1052 |
  13. 1053 | Install OneTweak to disable window borders. 1054 |
  14. 1055 |
1056 |
1057 |
1058 |
1059 |

1060 |

1061 | AMD 1062 |

1063 |

1064 |
1065 | UI element - Chevron 1066 |
1067 |
1068 |
    1069 |
  1. 1070 | Enable Windowed mode in FalloutCustom.ini. 1071 |
  2. 1072 |
    1073 |

    1074 | [Display] 1075 |
    1076 | bFull Screen=0 1077 |

    1078 |
    1079 |
    1080 |
  3. 1081 | Install OneTweak to disable window borders. 1082 |
  4. 1083 |
1084 |
1085 | 1086 |

1087 |
1088 |
1089 | 1090 | 1091 |
1092 | 1093 |

Recommended FPS Limits

1094 |
1095 |
1096 |

1097 |

(Not) Pushing the Limits

1098 | Limiting framerate is very important for overall stability. 1099 |
1100 | First and foremost, if you are using a good limiter, you'll be implementing correct framepacing, which is the most important thing for the overall feel of fluidity. 1101 |
1102 | More advanced limiters can also reduce latency or power consumption (it's difficult to have both). 1103 |
1104 |

1105 | Always limit your framerate to an amount you can actually achieve, otherwise you won't get any benefits! 1106 |
1107 | Letting your GPU overwork itself has a big latency impact, so try to cap your framerate at such value, where your GPU doesn't sit at constant 100% usage. 1108 |
1109 | Running at smoother, lower framerate is always better than high, albeit laggy and stuttery one. 1110 |

1111 |
1112 |

1113 |
1114 |
1115 |

1116 |

Recommended Setups

1117 | Recommended configurations based on selected display scenarios: 1118 |
    1119 |
  • 1120 |

    V-Sync

    1121 | The "default" option - choose this if you don't have Variable Refresh Rate display or don't mind slight latency. 1122 |
      1123 |
    • 1124 | Framerate must be capped slightly below refresh rate to reduce latency. 1125 |
    • 1126 |
    1127 |
    1128 |

    1129 | V-Sync on its own is NOT a limiter. Using it as one introduces a massive latency penalty. 1130 |

    1131 |
    1132 |
  • 1133 |
  • 1134 |

    G-Sync | FreeSync

    1135 | Choose this if you have a Variable Refresh Rate display - it offers the best balance between latency and visual smoothness. 1136 |
      1137 |
    • 1138 | V-Sync must be enabled, in order to fully get rid of tearing. 1139 |
    • 1140 |
    • 1141 | Framerate must be capped below refresh rate, in order for VRR to not disengage and fallback to V-Sync, as this causes a very big increase in latency. 1142 |
    • 1143 |
    1144 |
  • 1145 |
  • 1146 |

    No V-Sync

    1147 | Choose this if you want to reduce latency as much as possible, and don't mind tearing. 1148 |
      1149 |
    • 1150 | No special prerequisites. 1151 |
    • 1152 |
      1153 |

      1154 | Due to Bethesda's oversight, the V-Sync toggle in the launcher doesn't work. 1155 |
      1156 | To disable V-Sync, in FalloutCustom.ini set the following: 1157 |

      1158 |

      1159 | [Display] 1160 |
      1161 | iPresentInterval=0 1162 |

      1163 |
      1164 | Disabling V-Sync through other means (Driver, DXVK) also works. 1165 |

      1166 |
      1167 |
    1168 |
  • 1169 |
1170 |
1171 | If you don't use, or not have VRR, it's best to limit your framerate to fractions of your refresh rate. (30 at 60hz, 72 at 144hz, etc.). 1172 |
1173 | Having framerate capped to a value that's not a clean fraction of your refresh rate will cause microstuttering (For example 40 at 60hz). 1174 |

1175 |
1176 |
1177 |

1178 |

1179 | RivaTuner Statistics Server 1180 |

1181 | Riva Tuner Statistic Server by Unwinder is probably the most famous FPS Limiter and OSD software, thanks to its performance, compatibility and versatile On-Screen Display. 1182 |

1183 | 1184 |

Installation and configuration

1185 |
    1186 |
  1. 1187 | Install and launch RTSS. Open your System Tray (the triangle pointing upwards on the taskbar) and click on the RTSS icon to open it 1188 |
  2. 1189 |
  3. 1190 | Press green Add button and select FalloutNV.exe 1191 |
  4. 1192 |
  5. 1193 | Set Application Detection Level to Low 1194 |
  6. 1195 |
  7. 1196 | Enter your refresh rate here for automatic calculation of FPS limits. You can find your exact refresh rate here. 1197 |
    1198 | 1199 | Done! Due to physics issues, it's not recommended to go above 120 FPS. 1200 |
    1201 |
    1202 |

    1203 | Even with New Vegas Tick Fix, game can still have issues with high framerates. It's recommended to cap your framerate to 120 FPS or below. 1204 |

    1205 |
    1206 |
  8. 1207 |
  9. 1208 | Set Framerate Limit to: 1209 |
      1210 |
    • 1211 | V-Sync 1212 |
      1213 |

      1214 | (RefreshRate - 0.05) 1215 |

      1216 |
      1217 |
    • 1218 |
    • 1219 | VRR + V-Sync 1220 |
      1221 |

      1222 | Any value between 48 and (RefreshRate * (1 - RefreshRate * 0.00028)). 1223 |

      1224 |
      1225 |

      1226 | You should select a value that will match your average obtainable framerate in the game. 1227 |

      1228 |
      1229 |
      1230 |
    • 1231 |
    • 1232 | No V-Sync 1233 |
      1234 |

      1235 | (RefreshRate) 1236 |

      1237 |
      1238 |
    • 1239 |
    1240 |
  10. 1241 |
  11. 1242 | Enter settings using Setup button and: 1243 |
      1244 |
    • 1245 | Enable Passive Waiting 1246 |
    • 1247 |
    • 1248 | Set framerate limiter to Front Edge Sync 1249 |
    • 1250 |
    1251 |
  12. 1252 |
  13. 1253 | Enable Start with Windows or launch RTSS everytime before you play 1254 |
  14. 1255 |

    1256 | Your configuration should look similar to this: 1257 |
    1258 |

    1259 | Screenshot showcasing RTSS' settings 1260 |
    1261 |
    1262 |
    1263 |

    1264 |
1265 |
1266 |
1267 | 1268 | 1269 |
1270 | 1271 |

FAQ

1272 |
1273 |
1274 |

1275 |

Are these questions really frequent?

1276 |
    1277 |
  • 1278 |

    I can't use DXVK, and I need to Alt-Tab!

    1279 | All you can do is download OneTweak and use the legacy Windowed mode. 1280 |
    1281 | Remember to enable Windowed mode itself in FalloutCustom.ini! 1282 |
    1283 |

    1284 | [Display] 1285 |
    1286 | bFull Screen=0 1287 |

    1288 |
    1289 |
  • 1290 |
  • 1291 |

    Fake Fullscreen, Borderless Windowed, Fullscreen Windowed, Windowed Fullscreen - is there any difference?

    1292 | No. All of these terms refer to the same thing - a borderless window that covers the whole screen. There's no official name for it, so people use different ways to describe it. 1293 |
  • 1294 |
  • 1295 |

    Why is guide recommending using Windows' Game Mode? I heard that it's bad.

    1296 | Most, if not all Game Mode stigma comes around from its initial implementation in 2017. 1297 |

    1298 | That version of Game Mode had two (now removed due to issues) features: 1299 |

      1300 |
    • 1301 | Resource prioritization - Game Mode would try to prioritize resources for the game, which led to issues with background applications, or breaking games themselves. 1302 |
    • 1303 |
    • 1304 | Flip Model upgrade for windowed games - Original implementation tried to upgrade selected D3D9 and D3D11 games, but often faced an issue where games would not exit software composition, leading to increased lag and worse performance. 1305 |
    • 1306 |
    1307 |

    1308 |

    1309 | Modern Game Mode does not have these features, and instead focuses on generic Windows tweaks, like disabling background services (Windows Update, Search Indexing). 1310 |
    1311 | Additionally, some vendors like AMD are using it to detect games and apply their own optimizations (CPU scheduling in AMD's case). 1312 |

    1313 | Flip Model upgrade functionality has been moved into Windows itself, split between Fullscreen Optimizations (All Direct3D versions; Windows 10) and Windowed Optimizations (Direct3D 10 and 11; Windows 11). 1314 |
    1315 | These features are enabled by default and don't suffer from the issues of the original Game Mode. 1316 |
  • 1317 |
  • 1318 |

    Any way change brightness in Windowed Mode?

    1319 | Use ReShade or Dynavision to change the brightness. 1320 |
  • 1321 |
  • 1322 |

    Do texture mods really have an impact on performance?

    1323 | In most cases, no. As long as you don't go over your VRAM budget and use NVTF's memory pool patch you'll be fine. If you happen to run out of VRAM, you'll get a massive performance degradation, due to graphics memory being spilled over into RAM. 1324 |
    1325 | What is guaranteed from higher resolution textures is increase in their load time. This can translate into longer stutter periods on cell loads. 1326 |
  • 1327 |
  • 1328 |

    You talk about HDR. I thought FNV already had it?

    1329 | HDR mentioned in game setting refers to HDR rendering, where game renders lighting passes in 16 bits, instead of 8. This leads to properly glowing lights thanks to the precision of using 65536 colors per channel instead of 256. (Glowing elements won't be clamped anymore, and will glow instead.) 1330 |
    1331 | Due to the old age of the game, this data is later converted to 8 bit SDR (HDR in Windows was added in 2017!). Additionally, D3D9 obviously doesn't support HDR output in the first place, hence the need for the DXGI interop. 1332 |
  • 1333 |
  • 1334 |

    DXVK is breaking HDR after exiting the game!

    1335 | Yes, unfortunately due to how FSE works, in addition to lack of native Windows support from DXVK, it doesn't properly handle the HDR API. 1336 |
    1337 | If your GPU supports it, use DXVK with DXGI to resolve this issue. 1338 |
  • 1339 |
  • 1340 |

    Is dgVoodoo 2 a viable alternative to DXVK?

    1341 | No. While it is true that you'd gain Windowed mode with Flip Model and HDR from it, in contrast to DXVK you are guaranteed to get lower perfomance due to the translation overhead. 1342 |
    1343 | If you can handle the performance loss, sure go ahead. 1344 |
  • 1345 |
  • 1346 |

    During ReShade installation, which API should I choose if I use DXVK?

    1347 | Vulkan. 1348 |
  • 1349 |
1350 |

1351 |
1352 |
1353 | 1354 | 1355 |
1356 | 1357 |

Finish

1358 |
1359 |
1360 |

1361 |

The End?

1362 | Congratulations! You've made it through! I hope this guide has helped you making Fallout: New Vegas a smoother experience. 1363 |
1364 | If you have any issues, questions, critiques or recommendations hit us up on Discord - wall_sogb and Ungeziefi. 1365 |
1366 | You can also find us on 1367 | ModdingLinked, 1368 | xNVSE, 1369 | Tale of Two Wastelands servers. 1370 |

1371 | I recommend checking this guide from time to time - We're not done yet. 1372 |

1373 |

1374 | If you found this guide helpful, share it with others or support me on Ko-Fi or Patreon 1375 |

1376 |

1377 |
1378 |
1379 |

1380 |

Things worth reading

1381 | Here are some links to stuff that I recommend checking out: 1382 |
    1383 |
  • 1384 | New Vegas Visual Renewal - nice and easy to follow graphics guide by Salamand3r that actually doesn't break your game for a nice change of pace. 1385 |
  • 1386 |
  • 1387 | PCGamingWiki - Great website, contains really helpful info about games, patches, fixes and other PC gaming related stuff. 1388 |
  • 1389 |
  • 1390 | BlurBusters - Amazing website by Mark Rejhon focused on displays, latency and image quality. Really worth checking it out if you are a geek for these things. 1391 |
  • 1392 |
  • 1393 | HDR Den - Discord server dedicated to HDR enthusiasts and developers. If you want to learn more about HDR, this is the place to go. 1394 |
  • 1395 |
1396 |

1397 |
1398 |
1399 |

1400 |

Credits

1401 | This is the part where I'd like to thank people who have helped me in whatever way to make this guide possible. 1402 |
    1403 |
  • 1404 | Whole xNVSE server for being a great community. Especially: 1405 |
      1406 |
    • 1407 | Ungeziefi for testing and helping with benchmarks. 1408 |
    • 1409 |
    • 1410 | c6 for fixing the some engine functions so my testing could be easier. 1411 |
    • 1412 |
    • 1413 | LOC (aka ItsMeJesusHChrist) for making the awesome logo for the guide. 1414 |
    • 1415 |
    • 1416 | Nice try karut, but you are not getting credited. 1417 |
    • 1418 |
    1419 |
  • 1420 |
  • 1421 | The Special K server for being a superb community with a lot of knowledgeable people. This guide would literally not exist without them. 1422 |
  • 1423 |
  • 1424 | Glaceon575 for helping with benchmarks and providing screenshots for AMD GPUs. 1425 |
  • 1426 |
  • 1427 | You. Image of Pepe the frog happily smiling and looking at the viewer 1428 |
  • 1429 |
1430 |

1431 |
1432 |
1433 |

1434 |

Changelog

1435 | Changes are documented in the commit history. 1436 |

1437 |
1438 |
1439 |
1440 |
1441 | 1442 | 1443 | 1449 | 1450 | 1451 | -------------------------------------------------------------------------------- /files/FO-NvidiaProfile.nip: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Fallout - New Vegas 5 | 6 | falloutnvbeta.exe 7 | falloutnv.exe 8 | falloutnvlauncher.exe 9 | fallout3nv.exe 10 | 11 | 12 | 13 | 14 | 540166535 15 | 524965 16 | Dword 17 | 18 | 19 | Vulkan/OpenGL present method 20 | 550932728 21 | 1 22 | Dword 23 | 24 | 25 | 26 | 27 | Fallout 3 28 | 29 | falloutlauncher.exe 30 | fallout3ng.exe 31 | fallout3.exe 32 | 33 | 34 | 35 | 36 | 540166535 37 | 524965 38 | Dword 39 | 40 | 41 | Vulkan/OpenGL present method 42 | 550932728 43 | 1 44 | Dword 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /files/SpecialK.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/files/SpecialK.7z -------------------------------------------------------------------------------- /graphs/fo4/test1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/graphs/fo4/test1.png -------------------------------------------------------------------------------- /graphs/fo4/test2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/graphs/fo4/test2.png -------------------------------------------------------------------------------- /graphs/fo4/test3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/graphs/fo4/test3.png -------------------------------------------------------------------------------- /img/UI/Arrow.svg: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /img/UI/Download.svg: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /img/UI/Maximize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/UI/Minimize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/UI/Navigation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/UI/Open.svg: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /img/favicon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/img/favicon.webp -------------------------------------------------------------------------------- /img/limiters/AMD.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/img/limiters/AMD.webp -------------------------------------------------------------------------------- /img/limiters/Nvidia.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/img/limiters/Nvidia.webp -------------------------------------------------------------------------------- /img/limiters/RTSS.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/img/limiters/RTSS.webp -------------------------------------------------------------------------------- /img/limiters/SK.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/img/limiters/SK.webp -------------------------------------------------------------------------------- /img/limiters/SK_SSE.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/img/limiters/SK_SSE.webp -------------------------------------------------------------------------------- /img/ui/Chevron Down.svg: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /img/ui/logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/img/ui/logo.webp -------------------------------------------------------------------------------- /img/ui/pepestare.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ModdingLinked/FalloutNV-Performance-Guide/c56b082b32d19d6e4de937aca0e0f85bd9f1445c/img/ui/pepestare.webp -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Optimization Guides 7 | 8 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
48 |
49 | 50 | 51 |
52 | 53 |

Introduction

54 |
55 |
56 |
57 |

58 |

Welcome!

59 | The performance guide is available for the following games, choose what you are currently modding. 60 |

61 |
62 |
63 |
64 |
65 |

66 | 67 | 🏜️ 68 | 🙃 69 | Fallout New Vegas 70 | 71 | 72 |

73 |
74 |
75 |
76 |
77 |
78 | 79 | 80 | -------------------------------------------------------------------------------- /js/javascript.js: -------------------------------------------------------------------------------- 1 | var menuIsOpen = false; 2 | 3 | // Global variables 4 | const progressBars = document.getElementsByClassName("progress-bar"); 5 | const sections = document.getElementsByClassName("section"); 6 | const sidebars = document.getElementsByClassName("sidebar"); 7 | const leftSideBar = document.getElementsByClassName("left-sidebar"); 8 | const autoSizeAreas = document.querySelectorAll('.auto-resize'); 9 | 10 | window.addEventListener('resize', sizeChanged); 11 | document.addEventListener('DOMContentLoaded', function () { 12 | updateProgressBarAndFadeIn(); 13 | createRightSidebar(); 14 | markActivePage(); 15 | resizeAllTextAreas(); 16 | setupExpanders(); 17 | 18 | const hash = window.location.hash; 19 | if (hash) { 20 | const id = hash.substring(1); 21 | openExpanderForID(id); 22 | } 23 | }); 24 | window.onscroll = updateProgressBarAndFadeIn; 25 | 26 | document.addEventListener('keydown', (e) => { 27 | if (e.code === "ArrowRight") { 28 | window.open(document.getElementById("next").href, "_self") 29 | } 30 | else if (e.code === "ArrowLeft") { 31 | window.open(document.getElementById("previous").href, "_self") 32 | } 33 | }); 34 | 35 | function sizeChanged() { 36 | if (leftSideBar && leftSideBar.length > 0) { 37 | if (document.documentElement.clientWidth > 760) { 38 | leftSideBar[0].style.width = ""; 39 | } 40 | } 41 | 42 | resizeAllTextAreas(); 43 | } 44 | 45 | function toggleNav() { 46 | var sideBar = leftSideBar[0]; 47 | if (sideBar.style.width == 0) { 48 | sideBar.style.width = "75%"; 49 | globalThis.menuIsOpen = true; 50 | } 51 | else { 52 | sideBar.style.width = ""; 53 | globalThis.menuIsOpen = false; 54 | } 55 | } 56 | 57 | function fadeOut(element) { 58 | element.style.opacity = "0%"; 59 | } 60 | 61 | function rotate(element, rotation = 180) { 62 | element.style.transform = 'rotatex(' + rotation + 'deg)'; 63 | } 64 | 65 | function setupExpanders() { 66 | const expanders = document.querySelectorAll('.expander-top'); 67 | 68 | expanders.forEach((expander, index) => { 69 | // Skip if already has an ID 70 | if (expander.id) 71 | return; 72 | 73 | // Remove any existing ID 74 | const oldId = expander.id; 75 | const contentId = oldId ? 76 | document.getElementById(oldId + 'expander') : 77 | expander.nextElementSibling; 78 | 79 | // Set new consistent IDs 80 | const newId = 'expander-' + index; 81 | expander.id = newId; 82 | 83 | if (contentId && contentId.classList.contains('expander-bottom')) { 84 | contentId.id = newId + '-content'; 85 | 86 | // Update onclick handler 87 | expander.setAttribute('onclick', `expandCard(this, document.getElementById('${newId}-content'))`); 88 | 89 | // Make sure it has the clickable class 90 | if (!expander.classList.contains('clickable')) { 91 | expander.classList.add('clickable'); 92 | } 93 | } 94 | }); 95 | } 96 | 97 | function expandCard(thisObj, $open, $dontReset) { 98 | const chevron = thisObj.getElementsByClassName("chevron")[0] 99 | if ($open.classList.contains('expander-opened') && !$dontReset) { 100 | rotate(chevron, 0) 101 | $open.classList.remove('expander-opened'); 102 | setTimeout(() => $open.style.display = "none", 400); 103 | thisObj.classList.remove('active'); 104 | } 105 | else { 106 | $open.classList.add('expander-opened'); 107 | rotate(chevron, 180); 108 | $open.style.display = "block"; 109 | thisObj.classList.add('active'); 110 | 111 | const textareas = $open.querySelectorAll('.auto-resize'); 112 | if (textareas) { 113 | for (var i = 0; i < textareas.length; i++) { 114 | autoResize(textareas[i]); 115 | } 116 | } 117 | } 118 | } 119 | 120 | // Opens an expander that CONTAINS (not is) the ID 121 | function openExpanderForID(id) { 122 | const object = document.getElementById(id); 123 | const expander = object.closest('.expander-bottom'); 124 | if (expander) { 125 | const expanderTop = expander.previousElementSibling; 126 | if (expanderTop) { 127 | expandCard(expanderTop, expander, true); 128 | expander.scrollIntoView({ behavior: 'smooth', block: 'start' }); 129 | } 130 | } 131 | } 132 | 133 | function resizeAllTextAreas() { 134 | if (autoSizeAreas && autoSizeAreas.length > 0) { 135 | for (var i = 0; i < autoSizeAreas.length; i++) { 136 | autoResize(autoSizeAreas[i]); 137 | } 138 | } 139 | } 140 | 141 | function autoResize(textarea) { 142 | textarea.style.height = 'auto'; 143 | textarea.style.height = textarea.scrollHeight + 'px'; 144 | } 145 | 146 | function emToPixels(em) { 147 | const baseFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize); 148 | return em * baseFontSize; 149 | } 150 | 151 | function updateProgressBarAndFadeIn() { 152 | var winScroll = document.body.scrollTop || document.documentElement.scrollTop; 153 | var height = window.innerHeight; 154 | 155 | if (sections) { 156 | for (var i = 0; i < sections.length; i++) { 157 | var sectionTop = sections[i].getBoundingClientRect().top; 158 | var sectionHeight = sections[i].clientHeight; 159 | 160 | if (sectionTop < height && sectionTop + sectionHeight > 0) { 161 | sections[i].classList.add("fade-in"); 162 | } 163 | } 164 | } 165 | 166 | var progressBar = progressBars[0]; 167 | if (progressBar) { 168 | height = document.documentElement.scrollHeight - document.documentElement.clientHeight; 169 | var scroll = (winScroll / height); 170 | var bottomMargin = (height - 25) / height; 171 | progressBar.style.width = scroll * 100 + "%"; 172 | } 173 | 174 | 175 | if (sidebars) { 176 | var styleVal = "calc(100vh - 6.25em)"; 177 | 178 | if (document.documentElement.clientHeight > 900 && scroll > bottomMargin) { 179 | styleVal = "calc(100vh - 8.5em)"; 180 | } 181 | 182 | for (var i = 0; i < sidebars.length; i++) { 183 | sidebars[i].style.height = styleVal; 184 | } 185 | } 186 | } 187 | 188 | function createRightSidebar() { 189 | const content = document.getElementsByClassName('content')[0]; 190 | const sidebar = document.getElementById('sidebarContent'); 191 | if (!content || !sidebar) return; 192 | 193 | const sections = content.getElementsByClassName('section'); 194 | if (!sections.length) return; 195 | 196 | // Create fragment for batch updates (better performance) 197 | const fragment = document.createDocumentFragment(); 198 | 199 | for (const section of sections) { 200 | // Get section elements (both cards and expanders) 201 | const elements = [...section.children].filter(el => 202 | (el.classList.contains('card') || el.classList.contains('expander-top')) && 203 | el.parentNode === section 204 | ).sort((a, b) => 205 | a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1 206 | ); 207 | 208 | // Process headers within section 209 | section.querySelectorAll('h2').forEach(header => { 210 | if (!header.innerHTML) return; 211 | 212 | const div = document.createElement('div'); 213 | 214 | // Create header link 215 | const b = document.createElement('b'); 216 | b.innerHTML = `${header.innerHTML}`; 217 | div.appendChild(b); 218 | 219 | // Add all elements for this section 220 | elements.forEach(element => { 221 | const text = element.getAttribute('title') || 222 | element.id.replace(/([A-Z])/g, ' $1').trim(); 223 | 224 | if (!text) return; 225 | 226 | const a = document.createElement('a'); 227 | a.href = `#${element.id}`; 228 | a.textContent = text; 229 | div.appendChild(a); 230 | }); 231 | 232 | fragment.appendChild(div); 233 | }); 234 | } 235 | 236 | sidebar.appendChild(fragment); 237 | } 238 | 239 | function markActivePage() { 240 | const leftSidebar = document.querySelector(".sidebar.left-sidebar"); 241 | 242 | if (!leftSidebar) 243 | return; 244 | 245 | const sidebarLinks = leftSidebar.querySelectorAll(".sidebar a"); 246 | 247 | if (!sidebarLinks) 248 | return; 249 | 250 | const currentPage = "./" + window.location.pathname.split("/").pop(); 251 | 252 | let currentIndex = -1; 253 | 254 | // Loop through the links to find the current page index 255 | sidebarLinks.forEach((link, index) => { 256 | const linkPage = link.getAttribute("href"); 257 | 258 | if (linkPage === currentPage) { 259 | link.classList.add("active"); 260 | currentIndex = index; 261 | 262 | if (link.classList.contains("sublink")) { 263 | link.setAttribute('style', 'display:flex !important'); 264 | } 265 | } 266 | }); 267 | 268 | const allowedPageLinks = leftSidebar.querySelectorAll(".pageLinks"); 269 | if (allowedPageLinks) { 270 | let linkCount = 0; 271 | 272 | for (let i = 0; i < allowedPageLinks.length; i++) { 273 | linkCount += allowedPageLinks[i].children.length; 274 | } 275 | 276 | if (currentIndex > linkCount - 1) 277 | currentIndex = -1; 278 | 279 | createPageArrows(currentIndex); 280 | } 281 | } 282 | 283 | function createPageArrows(currentIndex) { 284 | const linkSections = document.querySelectorAll(".pageLinks"); 285 | 286 | if (!linkSections) 287 | return; 288 | 289 | const prevLink = document.getElementById("previous"); 290 | const nextLink = document.getElementById("next"); 291 | 292 | let sidebarLinks = []; 293 | 294 | for (let i = 0; i < linkSections.length; i++) { 295 | var list = linkSections[i].querySelectorAll(".sidebar a"); 296 | for (let j = 0; j < list.length; j++) { 297 | sidebarLinks.push(list[j]); 298 | } 299 | } 300 | 301 | // Set the previous and next links if the current page is found 302 | // Otherwise default to the home page 303 | if (currentIndex !== -1) { 304 | if (prevLink) { 305 | if (currentIndex > 0) { 306 | const prevPage = sidebarLinks[currentIndex - 1]; 307 | prevLink.href = prevPage.getAttribute("href"); 308 | prevLink.querySelector(".arrowText").textContent = prevPage.textContent.trim(); 309 | } else { 310 | prevLink.style.display = "none"; 311 | } 312 | } 313 | 314 | if (nextLink) { 315 | if (currentIndex < sidebarLinks.length - 1) { 316 | const nextPage = sidebarLinks[currentIndex + 1]; 317 | nextLink.href = nextPage.getAttribute("href"); 318 | nextLink.querySelector(".arrowText").textContent = nextPage.textContent.trim(); 319 | } else { 320 | nextLink.style.display = "none"; 321 | } 322 | } 323 | } 324 | else if (prevLink) { 325 | console.log("Current page not found in sidebar links"); 326 | const prevPage = sidebarLinks[0]; 327 | prevLink.href = prevPage.getAttribute("href"); 328 | prevLink.querySelector(".arrowText").textContent = prevPage.textContent.trim(); 329 | } 330 | } 331 | 332 | function isChildOfSidebar(element) { 333 | while (element) { 334 | if (element.classList && element.classList.contains('sidebar') && element.classList.contains('left-sidebar')) { 335 | return true; 336 | } 337 | element = element.parentElement; 338 | } 339 | return false; 340 | } 341 | 342 | document.addEventListener('click', function (event) { 343 | if (globalThis.menuIsOpen) { 344 | const target = event.target; 345 | if (target.id != "navButton" && isChildOfSidebar(target) == false) { 346 | toggleNav(); 347 | } 348 | } 349 | }); -------------------------------------------------------------------------------- /js/perfguide.js: -------------------------------------------------------------------------------- 1 | function setD3D9Year() { 2 | var d3d9Year = document.getElementById("d3d9_year"); 3 | var d3d9Date = new Date(2001, 8, 24); // Windows XP RTM date - API is finalized by then 4 | var today = new Date(); 5 | var diff = today - d3d9Date; 6 | var years = Math.floor(diff / 31536000000); 7 | d3d9Year.innerHTML = years; 8 | } 9 | 10 | function disable(element) { 11 | element.style.display = "none"; 12 | } 13 | 14 | function createImageHandlers() { 15 | const overlay = document.getElementById('image-overlay'); 16 | const enlargedImage = document.getElementById('enlarged-image'); 17 | 18 | if (!enlargedImage || !overlay) 19 | return; 20 | 21 | const images = document.querySelectorAll('.content-img'); 22 | if (!images) 23 | return; 24 | 25 | images.forEach(image => { 26 | image.addEventListener('click', function () { 27 | overlay.style.display = "flex"; 28 | enlargedImage.src = this.src; 29 | }); 30 | }); 31 | 32 | overlay.addEventListener('click', function () { 33 | overlay.style.display = "none"; 34 | enlargedImage.src = ''; 35 | }); 36 | } 37 | 38 | function largestCommonFactor(rate) { 39 | for (let i = 120; i > 0; i--) { 40 | if (rate % i === 0) { 41 | return i; 42 | } 43 | } 44 | return 1; 45 | } 46 | 47 | function handleRRConfirmation(rr) { 48 | if (rr > 120) { 49 | const errorMsg = document.getElementsByClassName("applyError"); 50 | } 51 | else if (rr >= 60) { 52 | const confirmation = document.getElementsByClassName("applyConfirmation"); 53 | } 54 | } 55 | 56 | function refreshRateCalculations(thisObj) { 57 | const inputField = thisObj; 58 | rr = inputField.value; 59 | 60 | handleRRConfirmation(rr); 61 | 62 | if (rr >= 60) { 63 | var rrVRR = Math.round(rr * (1 - rr * 0.00028)); 64 | const fpsFixed = document.getElementsByClassName("fpsFixed"); 65 | const fpsVSync = document.getElementsByClassName("fpsVSync"); 66 | const fpsVRR = document.getElementsByClassName("fpsVRR"); 67 | 68 | let valueVRR = rrVRR; 69 | let valueVSync = rr - 0.05; 70 | let valueFixed = rr; 71 | 72 | let divider = 0; 73 | 74 | if (rr > 120) { 75 | valueVRR = 120; 76 | valueVSync = largestCommonFactor(rr); 77 | if (valueVSync < 60) { 78 | valueVSync = "Invalid refresh rate - can't be cleanly divided!"; 79 | } 80 | 81 | valueFixed = valueVSync; 82 | divider = rr / valueVSync; 83 | 84 | if (divider > 1) { 85 | let scanModeSetup = document.getElementsByClassName("scanModeSetup"); 86 | for (let i = 0; i < scanModeSetup.length; i++) { 87 | scanModeSetup[i].style.display = "block"; 88 | } 89 | 90 | let scanModeDivider = document.getElementsByClassName("scanModeDivider"); 91 | for (let i = 0; i < scanModeDivider.length; i++) { 92 | scanModeDivider[i].innerHTML = "1/" + divider; 93 | } 94 | } 95 | } 96 | else { 97 | let scanModeSetup = document.getElementsByClassName("scanModeSetup"); 98 | for (let i = 0; i < scanModeSetup.length; i++) { 99 | scanModeSetup[i].style.display = "none"; 100 | } 101 | } 102 | 103 | for (let i = 0; i < fpsFixed.length; i++) { 104 | fpsFixed[i].innerHTML = valueFixed; 105 | } 106 | 107 | for (let i = 0; i < fpsVSync.length; i++) { 108 | fpsVSync[i].innerHTML = valueVSync; 109 | } 110 | 111 | for (let i = 0; i < fpsVRR.length; i++) { 112 | fpsVRR[i].innerHTML = valueVRR; 113 | } 114 | } 115 | } 116 | 117 | function markActiveSection() { 118 | const sections = document.querySelectorAll('.section'); 119 | const navLinks = document.querySelectorAll('.sidebar .pageLinks a'); 120 | 121 | function setActiveSection() { 122 | let index = sections.length; 123 | while (--index && window.scrollY + 400 < sections[index].offsetTop) { } 124 | navLinks.forEach((link) => link.classList.remove('active')); 125 | navLinks[index].classList.add('active'); 126 | } 127 | 128 | window.addEventListener('scroll', setActiveSection); 129 | setActiveSection(); 130 | } -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "background_color": "#202020", 3 | "description": "A guide to making Fallout New Vegas run smoother. Hopefully.", 4 | "dir": "auto", 5 | "display": "minimal-ui", 6 | "name": "New Vegas Performance Guide", 7 | "orientation": "any", 8 | "scope": "/", 9 | "short_name": "New Vegas Performance Guide", 10 | "start_url": "/", 11 | "theme_color": "#202020", 12 | "categories": [], 13 | "screenshots": [], 14 | "icons": [ 15 | { 16 | "src": "https://performance.moddinglinked.com/ui/logo.webp" 17 | } 18 | ], 19 | "shortcuts": [], 20 | "lang": "en" 21 | } -------------------------------------------------------------------------------- /sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | https://performance.moddinglinked.com/falloutnv.html 5 | 1.00 6 | 2025-05-31 7 | 8 | 9 | https://performance.moddinglinked.com 10 | 0.90 11 | 2024-08-29 12 | 13 | --------------------------------------------------------------------------------