<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://opengoal.dev/blog</id>
    <title>OpenGOAL Blog</title>
    <updated>2026-03-31T10:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://opengoal.dev/blog"/>
    <subtitle>OpenGOAL Blog</subtitle>
    <icon>https://opengoal.dev/img/favicon.png</icon>
    <entry>
        <title type="html"><![CDATA[Progress Report - Q1 2026]]></title>
        <id>https://opengoal.dev/blog/progress-report-q1-2026</id>
        <link href="https://opengoal.dev/blog/progress-report-q1-2026"/>
        <updated>2026-03-31T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Q1 2026's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>The right man in the wrong place can make all the difference in the world.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-q1-2026#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (<code>jak-project</code> repo) release is <del><code>0.2.32</code></del> <code>0.3.0</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-q1-2026#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="gordon-and-daxter">Gordon and Daxter<a href="https://opengoal.dev/blog/progress-report-q1-2026#gordon-and-daxter" class="hash-link" aria-label="Direct link to Gordon and Daxter" title="Direct link to Gordon and Daxter" translate="no">​</a></h3>
<p>MFO came out swinging with their first mod - a recreation of Half-Life physics/movement built natively in OpenGOAL! You can read more about the technicals of how this mod works <a href="https://github.com/mfOliveira19/GordonAndDaxter-Mod/blob/main/README.md" target="_blank" rel="noopener noreferrer" class="">here</a>.</p>
<p>Whether you're a veteran bhopper or you've never touched a Source Engine game before, this one is definitely worth checking out. Speedrun.com actually held an <a href="https://www.speedrun.com/challenges/64y602yr-jak1-gordon-daxter-speedrun-challenge" target="_blank" rel="noopener noreferrer" class="">official Challenge</a> for this mod earlier this month.</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/gordon-f719ebb2d293ab1aedabf0e9f160b33e.mp4" controls=""></video><!--/$-->
<p>&nbsp;</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want to play these mods (and others), follow the instructions <a href="https://jakmods.dev/" target="_blank" rel="noopener noreferrer" class="">here</a> to set up the mod list for the OpenGOAL launcher.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-q1-2026#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-links-to-mod-websites-">Add links to mod websites <a href="https://github.com/open-goal/launcher/pull/910" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#add-links-to-mod-websites-" class="hash-link" aria-label="Direct link to add-links-to-mod-websites-" title="Direct link to add-links-to-mod-websites-" translate="no">​</a></h3>
<p>Sometimes mods have a README or other website with additional info that doesn't fit in the launcher description. This change makes the mod name a clickable link whenever there's a related website.</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/mods-links-7ce59a25d7959285f82508e3a26a538c.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="split-progress-bars-for-mod-download-vs-extraction-">Split progress bars for mod download vs extraction <a href="https://github.com/open-goal/launcher/pull/908" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#split-progress-bars-for-mod-download-vs-extraction-" class="hash-link" aria-label="Direct link to split-progress-bars-for-mod-download-vs-extraction-" title="Direct link to split-progress-bars-for-mod-download-vs-extraction-" translate="no">​</a></h3>
<p>Previously there was a single "Extraction" progress bar that also included the time spent downloading the mod. This caused confusion for users downloading large mods or with slower internet speeds, thinking something had gone wrong during extraction. Now there is a separate progress bar just for the mod download process.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improve-error-handling-user-notifications-and-debugging-information------------">Improve error handling, user notifications, and debugging information <a href="https://github.com/open-goal/launcher/pull/902" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/909" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/913" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/914" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/937" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/938" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/939" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/940" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/941" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/942" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/950" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/951" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#improve-error-handling-user-notifications-and-debugging-information------------" class="hash-link" aria-label="Direct link to improve-error-handling-user-notifications-and-debugging-information------------" title="Direct link to improve-error-handling-user-notifications-and-debugging-information------------" translate="no">​</a></h3>
<p>Various changes to improve the launcher’s ability to handle errors and to surface useful information when something goes wrong, either to the user directly or in the support package for developer debugging.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="misc-internal-code-refactors-----------------------">Misc internal code refactors <a href="https://github.com/open-goal/launcher/pull/911" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/912" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/921" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/922" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/923" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/924" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/925" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/926" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/927" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/928" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/929" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/930" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/931" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/932" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/933" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/934" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/935" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/936" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/943" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/945" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/946" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/947" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/949" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#misc-internal-code-refactors-----------------------" class="hash-link" aria-label="Direct link to misc-internal-code-refactors-----------------------" title="Direct link to misc-internal-code-refactors-----------------------" translate="no">​</a></h3>
<p>A handful of internal changes aiming to streamline the code for readability.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-q1-2026#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="translations--">Translations <a href="https://github.com/open-goal/jak-project/pull/4142" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/952" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#translations--" class="hash-link" aria-label="Direct link to translations--" title="Direct link to translations--" translate="no">​</a></h3>
<p>All translations from <a href="https://crowdin.com/project/opengoal" target="_blank" rel="noopener noreferrer" class="">Crowdin</a> should now be updated and added to the games. This includes changes for French, Spanish, Catalan, Czech, German, Finnish, Italian, Japanese, Dutch, Norwegian, Polish, Portuguese, Danish, Hungarian, Croatian, Arabic, Greek, Serbian, and Portuguese (Brazilian)!</p>
<p>If you're interested in contributing translations, check out <a href="https://opengoal.dev/docs/category/contributing" target="_blank" rel="noopener noreferrer" class="">these guides</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3--jak-2">Jak 3 / Jak 2<a href="https://opengoal.dev/blog/progress-report-q1-2026#jak-3--jak-2" class="hash-link" aria-label="Direct link to Jak 3 / Jak 2" title="Direct link to Jak 3 / Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="reset-speedrun-autosplitter-after-blackout-">Reset speedrun autosplitter after blackout <a href="https://github.com/open-goal/jak-project/pull/4126" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#reset-speedrun-autosplitter-after-blackout-" class="hash-link" aria-label="Direct link to reset-speedrun-autosplitter-after-blackout-" title="Direct link to reset-speedrun-autosplitter-after-blackout-" translate="no">​</a></h3>
<p>Improves the timing of the autosplitter reset to better match leaderboard timing (first non-blackout frame). Previously it would reset as soon as the menu option was chosen, and timing could vary depending on what levels needed to be loaded/unloaded.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-split-boxes-debug-option-">Fix Split Boxes debug option <a href="https://github.com/open-goal/jak-project/pull/4133" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#fix-split-boxes-debug-option-" class="hash-link" aria-label="Direct link to fix-split-boxes-debug-option-" title="Direct link to fix-split-boxes-debug-option-" translate="no">​</a></h3>
<p>Prevents the Split Boxes debug visualization tool from immediately crashing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-q1-2026#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-memory-card-boxes-on-custom-aspect-ratios-">Fix memory card boxes on custom aspect ratios <a href="https://github.com/open-goal/jak-project/pull/4116" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#fix-memory-card-boxes-on-custom-aspect-ratios-" class="hash-link" aria-label="Direct link to fix-memory-card-boxes-on-custom-aspect-ratios-" title="Direct link to fix-memory-card-boxes-on-custom-aspect-ratios-" translate="no">​</a></h3>
<p>Improves the handling of the boxes around the memory cards across various aspect ratios.</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/memcard-be861ada4a3da1edc294c83dbfc835b2.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mountain-pass-speedrun-fixes--">Mountain Pass speedrun fixes <a href="https://github.com/open-goal/jak-project/pull/4124" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4131" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#mountain-pass-speedrun-fixes--" class="hash-link" aria-label="Direct link to mountain-pass-speedrun-fixes--" title="Direct link to mountain-pass-speedrun-fixes--" translate="no">​</a></h3>
<p>Restores a change that was inadvertently reverted awhile back, skipping the Klaww cutscene when doing Mountain Pass individual level speedruns.</p>
<p>Also fixes a visual bug where the column Klaww destroys during the cutscene was still being spawned when the cutscene was skipped.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/klaww-column-79aedaf3ff0be69a8fa8d5edb683dd12.png" width="3840" height="2160" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="light-eco-speedrun-autosplitter-fixes--">Light Eco speedrun autosplitter fixes <a href="https://github.com/open-goal/speedrunning/pull/30" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/speedrunning/pull/31" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q1-2026#light-eco-speedrun-autosplitter-fixes--" class="hash-link" aria-label="Direct link to light-eco-speedrun-autosplitter-fixes--" title="Direct link to light-eco-speedrun-autosplitter-fixes--" translate="no">​</a></h3>
<p>Fixes a bug where the checkbox for splitting on collecting Light Eco was being ignored and always splitting.</p>
<p>Adds an option for splitting only once after collecting Light Eco (the existing option will split repeatedly until all splits are completed). This is useful for routes where you have more to do after collecting Light Eco.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1>Oh yeah and Jak 3 is released in the launcher. Happy April Fools' Day 😎</h1>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/j3-3d25bcb89ffc40ba9bf25ce6c3adfe7b.png" width="1002" height="752" class="img_ev3q"></p>]]></content>
        <author>
            <name>barg034</name>
            <uri>https://github.com/dallmeyer</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - Q4 2025]]></title>
        <id>https://opengoal.dev/blog/progress-report-q4-2025</id>
        <link href="https://opengoal.dev/blog/progress-report-q4-2025"/>
        <updated>2025-12-31T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Q4 2025's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Happy Holidays! Lots of fixes across all 3 games the past few months.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-q4-2025#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.31</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_l16ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_l16ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-q4-2025#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cratetopia">Cratetopia<a href="https://opengoal.dev/blog/progress-report-q4-2025#cratetopia" class="hash-link" aria-label="Direct link to Cratetopia" title="Direct link to Cratetopia" translate="no">​</a></h3>
<p>GratefulForest (of <a href="https://www.youtube.com/watch?v=ZbhsCHf6X1s" target="_blank" rel="noopener noreferrer" class="">Platformia</a> infamy) is back with Cratetopia, a familiar-looking block game recreated in the OpenGOAL engine!</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/cratetopia-cf48c57ba503d014aa080babb83d99cb.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pogo">Pogo<a href="https://opengoal.dev/blog/progress-report-q4-2025#pogo" class="hash-link" aria-label="Direct link to Pogo" title="Direct link to Pogo" translate="no">​</a></h3>
<p>EvelynTSMG came up with this Jak 1 challenge mod, where Jak is forced to keep jumping at all times! Be sure to check out the mod settings where you can adjust various difficulty settings.</p>
<!--$?--><template id="B:0"></template><!--/$-->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want to play these mods (and others), follow the instructions <a href="https://jakmods.dev/" target="_blank" rel="noopener noreferrer" class="">here</a> to set up the mod list for the OpenGOAL launcher.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-q4-2025#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-new-appimage-format--">Build new AppImage format <a href="https://github.com/open-goal/launcher/pull/853" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/858" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#build-new-appimage-format--" class="hash-link" aria-label="Direct link to build-new-appimage-format--" title="Direct link to build-new-appimage-format--" translate="no">​</a></h3>
<p>Upgrades our Tauri version to support portable AppImages.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="disable-content-selection-in-sidebar-">Disable content selection in sidebar <a href="https://github.com/open-goal/launcher/pull/862" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#disable-content-selection-in-sidebar-" class="hash-link" aria-label="Direct link to disable-content-selection-in-sidebar-" title="Direct link to disable-content-selection-in-sidebar-" translate="no">​</a></h3>
<p>Fixes minor bug where you could highlight unintended parts of the UI.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="restore-playtime-feature-">Restore playtime feature <a href="https://github.com/open-goal/launcher/pull/872" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#restore-playtime-feature-" class="hash-link" aria-label="Direct link to restore-playtime-feature-" title="Direct link to restore-playtime-feature-" translate="no">​</a></h3>
<p>Restores a feature to track playtime per game, which was inadvertently removed during code cleanup.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/playtime-e452127fdc224b7b3ff8ea96dd5fe84c.png" width="828" height="356" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-window-resizing--allow-linux-users-to-change-install-directory-">Support window resizing &amp; allow Linux users to change install directory <a href="https://github.com/open-goal/launcher/pull/856" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#support-window-resizing--allow-linux-users-to-change-install-directory-" class="hash-link" aria-label="Direct link to support-window-resizing--allow-linux-users-to-change-install-directory-" title="Direct link to support-window-resizing--allow-linux-users-to-change-install-directory-" translate="no">​</a></h3>
<p>Now that the CSS is responsive, we can allow for the launcher window to be resized (e.g. fullscreen on Steamdeck). Also fixed an issue where Linux users couldn't change their installation directory.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improve-support-package-output-">Improve support package output <a href="https://github.com/open-goal/launcher/pull/875" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#improve-support-package-output-" class="hash-link" aria-label="Direct link to improve-support-package-output-" title="Direct link to improve-support-package-output-" translate="no">​</a></h3>
<p>Improves the accuracy of installation metadata collected for the support package, which users can provide to developers to get help troubleshooting.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="restore-changelog-page-">Restore changelog page <a href="https://github.com/open-goal/launcher/pull/873" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#restore-changelog-page-" class="hash-link" aria-label="Direct link to restore-changelog-page-" title="Direct link to restore-changelog-page-" translate="no">​</a></h3>
<p>Adds back the page detailing what has changed when new updates are available. This also fixes responsive issues with the "Update Available" header positioning.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="replace-svelte-navigator-with-sv-router-">Replace <code>svelte-navigator</code> with <code>sv-router</code> <a href="https://github.com/open-goal/launcher/pull/874" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#replace-svelte-navigator-with-sv-router-" class="hash-link" aria-label="Direct link to replace-svelte-navigator-with-sv-router-" title="Direct link to replace-svelte-navigator-with-sv-router-" translate="no">​</a></h3>
<p>Replaces the deprecated <code>svelte-navigator</code> with the more modern <code>sv-router</code>, which has some new features and a much nicer reactive model.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="correct-header-version-display-for-mods-">Correct header version display for mods <a href="https://github.com/open-goal/launcher/pull/879" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#correct-header-version-display-for-mods-" class="hash-link" aria-label="Direct link to correct-header-version-display-for-mods-" title="Direct link to correct-header-version-display-for-mods-" translate="no">​</a></h3>
<p>Properly distinguishes between vanilla and mod versions in the header.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/mod_version-51a96a3e370a6f7313131be4a4be661d.png" width="528" height="130" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="texture-pack--mod-feature-cleanup--">Texture Pack / Mod feature cleanup <a href="https://github.com/open-goal/launcher/pull/886" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/891" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#texture-pack--mod-feature-cleanup--" class="hash-link" aria-label="Direct link to texture-pack--mod-feature-cleanup--" title="Direct link to texture-pack--mod-feature-cleanup--" translate="no">​</a></h3>
<p>Fixes a bunch of typescript errors and refactored Texture Packs and Mods into isolated components.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-local-mod-installation-">Fix local mod installation <a href="https://github.com/open-goal/launcher/pull/880" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-local-mod-installation-" class="hash-link" aria-label="Direct link to fix-local-mod-installation-" title="Direct link to fix-local-mod-installation-" translate="no">​</a></h3>
<p>Fixes an issue where mods could no longer be installed from a local release package.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-offline-mod-support--">Fix offline mod support <a href="https://github.com/open-goal/launcher/pull/848" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/887" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-offline-mod-support--" class="hash-link" aria-label="Direct link to fix-offline-mod-support--" title="Direct link to fix-offline-mod-support--" translate="no">​</a></h3>
<p>Fixes an issue where already-installed mods could not be played while offline. The launcher will now cache metadata about mods during installation, and will fall back to this if the information cannot be fetched from the mod list source (i.e. while offline).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-brief-ui-flashes-while-navigating-">Fix brief UI flashes while navigating <a href="https://github.com/open-goal/launcher/pull/885" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-brief-ui-flashes-while-navigating-" class="hash-link" aria-label="Direct link to fix-brief-ui-flashes-while-navigating-" title="Direct link to fix-brief-ui-flashes-while-navigating-" translate="no">​</a></h3>
<p>Fixes an issue where previous component state could be briefly visible while naviating between pages.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-q4-2025#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="translations---">Translations <a href="https://github.com/open-goal/jak-project/pull/4027" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4028" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4107" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#translations---" class="hash-link" aria-label="Direct link to translations---" title="Direct link to translations---" translate="no">​</a></h3>
<p>All translations from <a href="https://crowdin.com/project/opengoal" target="_blank" rel="noopener noreferrer" class="">Crowdin</a> should now be updated and added to the games. This includes changes for Spanish, Czech, Portuguese (Brazilian), French, Dutch, German, Polish, Finnish, and Norwegian!</p>
<p>If you're interested in contributing translations, check out <a href="https://opengoal.dev/docs/category/contributing" target="_blank" rel="noopener noreferrer" class="">these guides</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-repl-function-offset-of-">Add REPL function <code>offset-of</code> <a href="https://github.com/open-goal/jak-project/pull/4081" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#add-repl-function-offset-of-" class="hash-link" aria-label="Direct link to add-repl-function-offset-of-" title="Direct link to add-repl-function-offset-of-" translate="no">​</a></h3>
<p>Adds a new function to the REPL which will return the offset in memory for a field within a reference type.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/offset-of-5cb2feee664a2f76ec87b233348520a4.png" width="1015" height="1441" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improved-decompiler-output-for-part-tracker-">Improved decompiler output for <code>part-tracker</code> <a href="https://github.com/open-goal/jak-project/pull/4082" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#improved-decompiler-output-for-part-tracker-" class="hash-link" aria-label="Direct link to improved-decompiler-output-for-part-tracker-" title="Direct link to improved-decompiler-output-for-part-tracker-" translate="no">​</a></h3>
<p>Improves the readability of decompiler output relating to particle groups / particle trackers. For example:</p>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token unchanged prefix unchanged"> </span><span class="token unchanged line">(process-spawn part-tracker :init part-tracker-init</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token unchanged line"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (-&gt; *part-group-id-table* 104)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">   group-part-yellow-eco-fireball-hit</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-custom-model-meshes-when-reusing-materials-">Fix custom model meshes when reusing materials <a href="https://github.com/open-goal/jak-project/pull/4070" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-custom-model-meshes-when-reusing-materials-" class="hash-link" aria-label="Direct link to fix-custom-model-meshes-when-reusing-materials-" title="Direct link to fix-custom-model-meshes-when-reusing-materials-" translate="no">​</a></h3>
<p>Fixes an issue where collision and visibility on custom actors would get skipped if multiple Blender objects shared the same material.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-custom-level-missing-collision-issue-">Fix custom level missing collision issue <a href="https://github.com/open-goal/jak-project/pull/4060" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-custom-level-missing-collision-issue-" class="hash-link" aria-label="Direct link to fix-custom-level-missing-collision-issue-" title="Direct link to fix-custom-level-missing-collision-issue-" translate="no">​</a></h3>
<p>Fixes an edge case in the BVH tree logic when processing custom level collision.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="speedrunner-modeautosplitter-updates------">Speedrunner mode/autosplitter updates <a href="https://github.com/open-goal/jak-project/pull/4085" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/speedrunning/pull/27" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4086" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/speedrunning/pull/28" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4103" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/speedrunning/pull/29" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#speedrunner-modeautosplitter-updates------" class="hash-link" aria-label="Direct link to speedrunner-modeautosplitter-updates------" title="Direct link to speedrunner-modeautosplitter-updates------" translate="no">​</a></h3>
<p>Various changes relating to speedrunner mode and autosplitter:</p>
<ul>
<li class="">Jak 1<!-- -->
<ul>
<li class="">Fixes Hub 2/3 100% categories to start with correct Scout Fly counts for previous levels</li>
</ul>
</li>
<li class="">Jak 2<!-- -->
<ul>
<li class="">Adds intro autosplit points for the Stadium races</li>
</ul>
</li>
<li class="">Jak 3<!-- -->
<ul>
<li class="">Adds useful non-resolution autosplit points</li>
<li class="">Fixes end split timing to line up with last hit on final boss</li>
<li class="">Updates suggested splits/routes for LiveSplit</li>
</ul>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-q4-2025#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-zoom-blur-and-color-filter-effect--">Add zoom blur and color filter effect <a href="https://github.com/open-goal/jak-project/pull/4031" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4037" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#add-zoom-blur-and-color-filter-effect--" class="hash-link" aria-label="Direct link to add-zoom-blur-and-color-filter-effect--" title="Direct link to add-zoom-blur-and-color-filter-effect--" translate="no">​</a></h3>
<p>Adds the zoom blur effect, as used in some cutscenes and for a few weapons:</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/zoom-blur-cd56ff5528700fd414a224f9e38ff538.mp4" controls=""></video><!--/$-->
<p>Adds the color filter effect, as used in Misson Failed screen:</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/color-filter-41aac36a8b5d468d711a4c52e12f8e6c.mp4" controls=""></video><!--/$-->
<p><code>slow-time</code> blur effect and fixed color filter:</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/slow-time-ebb580023ab5c6cb0b2ea4b9b9fcf02f.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-crash-when-entering-freedom-league-hq--">Fix crash when entering Freedom League HQ <a href="https://github.com/open-goal/jak-project/pull/4035" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4038" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-crash-when-entering-freedom-league-hq--" class="hash-link" aria-label="Direct link to fix-crash-when-entering-freedom-league-hq--" title="Direct link to fix-crash-when-entering-freedom-league-hq--" translate="no">​</a></h3>
<p>Fixes some issues that would lead to a crash when entering the Freedom League HQ.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-crash-from-vag-out-of-bounds-access-">Fix crash from VAG out-of-bounds access <a href="https://github.com/open-goal/jak-project/pull/4040" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-crash-from-vag-out-of-bounds-access-" class="hash-link" aria-label="Direct link to fix-crash-from-vag-out-of-bounds-access-" title="Direct link to fix-crash-from-vag-out-of-bounds-access-" translate="no">​</a></h3>
<p>Fixes an issue where all stereo VAG commands would write to an out-of-bounds array element and corrupt the whole VAG queue list. This was the cause of various sound-related crashes, such as when using Light Jak Freeze.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-support-for-brightness-and-contrast-modifiers-">Add support for brightness and contrast modifiers <a href="https://github.com/open-goal/jak-project/pull/4041" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#add-support-for-brightness-and-contrast-modifiers-" class="hash-link" aria-label="Direct link to add-support-for-brightness-and-contrast-modifiers-" title="Direct link to add-support-for-brightness-and-contrast-modifiers-" translate="no">​</a></h3>
<p>Adds renderer support for modifying brightness and contrast, a new feature added to the graphics options in Jak 3.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-subtitle-speaker-colors-">Fix subtitle speaker colors <a href="https://github.com/open-goal/jak-project/pull/4043" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-subtitle-speaker-colors-" class="hash-link" aria-label="Direct link to fix-subtitle-speaker-colors-" title="Direct link to fix-subtitle-speaker-colors-" translate="no">​</a></h3>
<p>Fixes copy/paste from Jak 2 for the text color of speakers in subtitles.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="decouple-wasteland-storm-particles-and-wind-pushback-effect-from-framerate-">Decouple wasteland storm particles and wind pushback effect from framerate <a href="https://github.com/open-goal/jak-project/pull/4046" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#decouple-wasteland-storm-particles-and-wind-pushback-effect-from-framerate-" class="hash-link" aria-label="Direct link to decouple-wasteland-storm-particles-and-wind-pushback-effect-from-framerate-" title="Direct link to decouple-wasteland-storm-particles-and-wind-pushback-effect-from-framerate-" translate="no">​</a></h3>
<p>Fixes an issue where the sandstorm in the wasteland had overly-aggressive particle effects and pushback effects on Jak. Players may have noticed this issue in the PS3 port, as it occurs because the newer console could maintain a better framerate than the PS2.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="misc-high-fps-fixes--">Misc high FPS fixes <a href="https://github.com/open-goal/jak-project/pull/4055" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4059" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#misc-high-fps-fixes--" class="hash-link" aria-label="Direct link to misc-high-fps-fixes--" title="Direct link to misc-high-fps-fixes--" translate="no">​</a></h3>
<p>Various fixes to support framerates higher than 60 FPS:</p>
<ul>
<li class=""><code>prebot</code> sword attack and projectile speed</li>
<li class="">Fast first person camera turning speed</li>
<li class="">Slow turret camera turning speed</li>
<li class=""><code>flyingsaw</code> movement and rotation speed</li>
<li class="">Green eco drain rate on jetboard during <code>forest-kill-plants</code> mission</li>
<li class=""><code>skeet</code> rotation speed</li>
<li class=""><code>maker-grenade</code> tumble speed</li>
<li class="">Jetboard spin speed</li>
<li class="">Texscroll speed</li>
<li class="">Slow walk anim after landing from a jump</li>
<li class=""><code>hud-skill</code> rotation speed</li>
<li class=""><code>gun-dark-shot</code> projectile speed</li>
<li class=""><code>target-float</code> up/down speed</li>
<li class="">Prevents instantly killing Jak when exiting some vehicles</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="collision-renderer-support-for-new-pat-events-and-pat-materials-">Collision Renderer support for new <code>pat-event</code>s and <code>pat-material</code>s <a href="https://github.com/open-goal/jak-project/pull/4049" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#collision-renderer-support-for-new-pat-events-and-pat-materials-" class="hash-link" aria-label="Direct link to collision-renderer-support-for-new-pat-events-and-pat-materials-" title="Direct link to collision-renderer-support-for-new-pat-events-and-pat-materials-" translate="no">​</a></h3>
<p>Adds support to the OpenGOAL collision renderer for new <code>pat-event</code>s and <code>pat-material</code>s added in Jak 3:</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/pat-event-82ea647096e6de1853adb027b3859f86.png" width="3840" height="2110" class="img_ev3q">
<img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/pat-material-b60645cb6b694066ff66358df258fe2c.png" width="3840" height="2110" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-cutscene-blackout-issues-">Fix cutscene blackout issues <a href="https://github.com/open-goal/jak-project/pull/4056" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-cutscene-blackout-issues-" class="hash-link" aria-label="Direct link to fix-cutscene-blackout-issues-" title="Direct link to fix-cutscene-blackout-issues-" translate="no">​</a></h3>
<p>Fixes an edge case where cutscenes with a non-zero <code>artist-base</code> would start with an awkward amount of blackout frames, depending on framerate. This is another issue that can be seen on PS3 but not PS2 because of the framerate the consoles can maintain - for example during the Metal Head Tower <code>tower-destroy-res</code> scene.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-menu-scissoring-for-missionscene-select-">Fix menu scissoring for Mission/Scene Select <a href="https://github.com/open-goal/jak-project/pull/4061" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-menu-scissoring-for-missionscene-select-" class="hash-link" aria-label="Direct link to fix-menu-scissoring-for-missionscene-select-" title="Direct link to fix-menu-scissoring-for-missionscene-select-" translate="no">​</a></h3>
<p>Fixes the scissoring in the pause menu on the Mission Select and Scene Select screens.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-opengoal-exclusive-cheats-city-peace-and-desert-peace-">Add OpenGOAL-exclusive cheats <code>city-peace</code> and <code>desert-peace</code> <a href="https://github.com/open-goal/jak-project/pull/4079" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#add-opengoal-exclusive-cheats-city-peace-and-desert-peace-" class="hash-link" aria-label="Direct link to add-opengoal-exclusive-cheats-city-peace-and-desert-peace-" title="Direct link to add-opengoal-exclusive-cheats-city-peace-and-desert-peace-" translate="no">​</a></h3>
<p>Adds support for the <code>city-peace</code> cheat similar to what we added in Jak 2, which disables all enemies throughout Haven City. Also adds a new <code>desert-peace</code> cheat which disables the sandstorm effects and all maruaders in the Wasteland.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-generic2prim-zbuffer-issue-and-progress-menu-crash-">Fix <code>generic2</code>/<code>prim</code> zbuffer issue and progress menu crash <a href="https://github.com/open-goal/jak-project/pull/4091" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-generic2prim-zbuffer-issue-and-progress-menu-crash-" class="hash-link" aria-label="Direct link to fix-generic2prim-zbuffer-issue-and-progress-menu-crash-" title="Direct link to fix-generic2prim-zbuffer-issue-and-progress-menu-crash-" translate="no">​</a></h3>
<p>Fixes an issue in how the zbuffer is handled for the <code>generic2</code> renderer. This was quite noticeable in the Dark Strike and Arc Wielder effects.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/zbuffer-before-399cafaa6066b6dd65cf534f093d134b.png" width="468" height="374" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-directional-pad-controls-for-eco-grid-pac-man-minigame-">Support directional pad controls for Eco Grid (Pac-Man) minigame <a href="https://github.com/open-goal/jak-project/pull/4083" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#support-directional-pad-controls-for-eco-grid-pac-man-minigame-" class="hash-link" aria-label="Direct link to support-directional-pad-controls-for-eco-grid-pac-man-minigame-" title="Direct link to support-directional-pad-controls-for-eco-grid-pac-man-minigame-" translate="no">​</a></h3>
<p>Adds a toggle under controller options to allow use of the directional pad for the Eco Grid minigame. Normally this minigame only respects inputs from the left analog stick.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-rigid-body-physics-to-not-depend-on-fps-">Fix <code>rigid-body</code> physics to not depend on FPS <a href="https://github.com/open-goal/jak-project/pull/4095" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-rigid-body-physics-to-not-depend-on-fps-" class="hash-link" aria-label="Direct link to fix-rigid-body-physics-to-not-depend-on-fps-" title="Direct link to fix-rigid-body-physics-to-not-depend-on-fps-" translate="no">​</a></h3>
<p>Fixes a issue where the physics logic for <code>rigid-body</code> systems (e.g. zoomer vehicles) depended on framerate. This was another difference that could be observed between PS3 and PS2.</p>
<p>For example, the "Superfasthoverbikeglitch" on OpenGOAL (pre-fix) vs PCSX2:</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/sfhbg-6d5f74e3d278e3ae9d7380421b468764.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-war-factory-hemi-gradient-flames-texture-and-ocean-culling-">Fix War Factory <code>hemi-gradient-flames</code> texture and ocean culling <a href="https://github.com/open-goal/jak-project/pull/4036" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-war-factory-hemi-gradient-flames-texture-and-ocean-culling-" class="hash-link" aria-label="Direct link to fix-war-factory-hemi-gradient-flames-texture-and-ocean-culling-" title="Direct link to fix-war-factory-hemi-gradient-flames-texture-and-ocean-culling-" translate="no">​</a></h3>
<p>Fixes a small typo relating to the <code>hemi-gradient-flames</code> texture used in the Hellcat bomb during the War Factory mission. Also fixes an issue with ocean culling during this mission, caused by the rotating background effect.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-prebot-sword-texture-">Fix <code>prebot</code> sword texture <a href="https://github.com/open-goal/jak-project/pull/4097" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-prebot-sword-texture-" class="hash-link" aria-label="Direct link to fix-prebot-sword-texture-" title="Direct link to fix-prebot-sword-texture-" translate="no">​</a></h3>
<p>Fixes a small issue with the Precursor Robot's sword trail texture not rendering.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-audio-language-setting-">Fix audio language setting <a href="https://github.com/open-goal/jak-project/pull/4093" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-audio-language-setting-" class="hash-link" aria-label="Direct link to fix-audio-language-setting-" title="Direct link to fix-audio-language-setting-" translate="no">​</a></h3>
<p>Fixes an issue where changing language didn't actually change the audio used for play hints and cutscenes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-same-attack-invulnerable-timeout-clock-drift-bug-">Fix <code>same-attack-invulnerable-timeout</code> clock drift bug <a href="https://github.com/open-goal/jak-project/pull/3978" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-same-attack-invulnerable-timeout-clock-drift-bug-" class="hash-link" aria-label="Direct link to fix-same-attack-invulnerable-timeout-clock-drift-bug-" title="Direct link to fix-same-attack-invulnerable-timeout-clock-drift-bug-" translate="no">​</a></h3>
<p>Fixes an original game bug that could lead to increasingly long cooldowns between taking damage from the same source, such as a flaming torch. This is also fixed for Jak 2.</p>
<p>The game tracks when the player last took damage using one clock, but compares this to a different clock when deciding if the player should take damage if it's from the same source. Only one of these clocks is affected by slow-down effects, such as during mission fails, Dark Jak special attacks, or Light Jak freeze. After one or more of these slow-down effects, these two clocks can end up drifting significantly apart, and throw off the intended cooldown logic.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-traffic-height-map-array-out-of-bounds-bug-">Fix <code>*traffic-height-map*</code> array out-of-bounds bug <a href="https://github.com/open-goal/jak-project/pull/4106" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-traffic-height-map-array-out-of-bounds-bug-" class="hash-link" aria-label="Direct link to fix-traffic-height-map-array-out-of-bounds-bug-" title="Direct link to fix-traffic-height-map-array-out-of-bounds-bug-" translate="no">​</a></h3>
<p>Fixes an original game bug, where extreme <code>h-vehicle</code> coordinates could lead to a crash by accessing out-of-bounds data in the <code>*traffic-height-map*</code>. This is also fixed for Jak 2.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-q4-2025#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-wakeupthread-overlordiop-issue-">Fix <code>WakeupThread</code> Overlord/IOP issue <a href="https://github.com/open-goal/jak-project/pull/4047" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-wakeupthread-overlordiop-issue-" class="hash-link" aria-label="Direct link to fix-wakeupthread-overlordiop-issue-" title="Direct link to fix-wakeupthread-overlordiop-issue-" translate="no">​</a></h3>
<p>Fixes an issue where <code>StreamListThread</code> should have been deadlocked waiting for the uninitialized <code>LfoList</code> semaphore, but instead it would get woken up by <code>WakeupThread</code> erroneously.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-hud-alignment-for-various-aspect-ratios-">Fix HUD alignment for various aspect ratios <a href="https://github.com/open-goal/jak-project/pull/4075" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-hud-alignment-for-various-aspect-ratios-" class="hash-link" aria-label="Direct link to fix-hud-alignment-for-various-aspect-ratios-" title="Direct link to fix-hud-alignment-for-various-aspect-ratios-" translate="no">​</a></h3>
<p>Fixes alignment of HUD elements to correctly scale with widescreen aspect ratios.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="misc-high-fps-fixes---1">Misc high FPS fixes <a href="https://github.com/open-goal/jak-project/pull/4055" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4059" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#misc-high-fps-fixes---1" class="hash-link" aria-label="Direct link to misc-high-fps-fixes---1" title="Direct link to misc-high-fps-fixes---1" translate="no">​</a></h3>
<p>Various fixes to support framerates higher than 60 FPS:</p>
<ul>
<li class=""><code>hud-skill</code> rotation speed</li>
<li class=""><code>gun-dark-shot</code> projectile speed</li>
<li class=""><code>target-float</code> up/down speed</li>
<li class="">Prevents instantly killing Jak when exiting some vehicles</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-q4-2025#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="subtitle-fixes-">Subtitle fixes <a href="https://github.com/open-goal/jak-project/pull/4063" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#subtitle-fixes-" class="hash-link" aria-label="Direct link to subtitle-fixes-" title="Direct link to subtitle-fixes-" translate="no">​</a></h3>
<p>Fixes a few typos in Uncle, Farmer, and Geologist subtitles.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="misc-high-fps-fixes---">Misc high FPS fixes <a href="https://github.com/open-goal/jak-project/pull/4067" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4069" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4105" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#misc-high-fps-fixes---" class="hash-link" aria-label="Direct link to misc-high-fps-fixes---" title="Direct link to misc-high-fps-fixes---" translate="no">​</a></h3>
<p>Various fixes to support framerates higher than 60 FPS:</p>
<ul>
<li class="">Water ripple effect</li>
<li class=""><code>balance-plat</code> speeds</li>
<li class="">Speed of slider options in pause menu</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-opening-logo-letterboxing-for-widescreen-aspect-ratios-">Fix opening logo letterboxing for widescreen aspect ratios <a href="https://github.com/open-goal/jak-project/pull/4073" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-opening-logo-letterboxing-for-widescreen-aspect-ratios-" class="hash-link" aria-label="Direct link to fix-opening-logo-letterboxing-for-widescreen-aspect-ratios-" title="Direct link to fix-opening-logo-letterboxing-for-widescreen-aspect-ratios-" translate="no">​</a></h3>
<p>Fixes letterboxing/blackout during the opening "Jak and Daxter" logo for widescreen aspect ratios. Previously you would start to see Sandover Village on the sides of the screen early, before the logo burst animation happened.</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/logo-ca7c653911285b9696b52eff384ddcc6.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-custom-levels-tpages-">Fix custom levels tpages <a href="https://github.com/open-goal/jak-project/pull/4074" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-custom-levels-tpages-" class="hash-link" aria-label="Direct link to fix-custom-levels-tpages-" title="Direct link to fix-custom-levels-tpages-" translate="no">​</a></h3>
<p>Fixes an issue where the <code>tpage</code> list for custom levels was ignored, which could cause texture remapping to behave incorrectly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-aspect-ratio-selection-issues-">Fix aspect ratio selection issues <a href="https://github.com/open-goal/jak-project/pull/4101" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q4-2025#fix-aspect-ratio-selection-issues-" class="hash-link" aria-label="Direct link to fix-aspect-ratio-selection-issues-" title="Direct link to fix-aspect-ratio-selection-issues-" translate="no">​</a></h3>
<p>Fixes an issue where aspect ratio was not properly updated from the progress menu upon selection.</p>]]></content>
        <author>
            <name>barg034</name>
            <uri>https://github.com/dallmeyer</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - Q3 2025]]></title>
        <id>https://opengoal.dev/blog/progress-report-q3-2025</id>
        <link href="https://opengoal.dev/blog/progress-report-q3-2025"/>
        <updated>2025-09-30T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Q3 2025's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>As promised, the Q3 report, albeit likely not containing the progress you had hoped for.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-q3-2025#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.30</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-q3-2025#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="brume-village">Brume Village<a href="https://opengoal.dev/blog/progress-report-q3-2025#brume-village" class="hash-link" aria-label="Direct link to Brume Village" title="Direct link to Brume Village" translate="no">​</a></h3>
<p>Cuttlefish (custom level creator behind <a href="https://www.youtube.com/watch?v=P3R-UODGtXw" target="_blank" rel="noopener noreferrer" class="">Glacier</a>, <a href="https://www.youtube.com/watch?v=Kbb2yiYg0cw" target="_blank" rel="noopener noreferrer" class="">Overgrown</a>, and <a href="https://www.youtube.com/watch?v=hrH-foTn0IQ&amp;pp=0gcJCfYJAYcqIYzv" target="_blank" rel="noopener noreferrer" class="">Rockpool</a>) recently dropped not just a new custom level, but an entire custom hub with 4 new levels! Collect all 24 Power Cells and restore power to Brume Village, home of the Yellow Sage!</p>
<!--$?--><template id="B:0"></template><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sandpit">Sandpit<a href="https://opengoal.dev/blog/progress-report-q3-2025#sandpit" class="hash-link" aria-label="Direct link to Sandpit" title="Direct link to Sandpit" translate="no">​</a></h3>
<p>Sandpit is another custom level from a new mod creator, Slak. Miners have vanished from a nearby excavation site, leaving behind their tools and Power Cells!</p>
<!--$?--><template id="B:1"></template><!--/$-->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want to play these mods (and others), follow the instructions <a href="https://jakmods.dev/" target="_blank" rel="noopener noreferrer" class="">here</a> to set up the mod list for the OpenGOAL launcher.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-q3-2025#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="replace-pcrtc-framebuffer-blit-with-screen-quad-draw-">Replace PCRTC framebuffer blit with screen quad draw <a href="https://github.com/open-goal/jak-project/pull/3980" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#replace-pcrtc-framebuffer-blit-with-screen-quad-draw-" class="hash-link" aria-label="Direct link to replace-pcrtc-framebuffer-blit-with-screen-quad-draw-" title="Direct link to replace-pcrtc-framebuffer-blit-with-screen-quad-draw-" translate="no">​</a></h3>
<p>Taking the suggestion from <a href="https://github.com/open-goal/jak-project/pull/3943#issuecomment-3017359144" target="_blank" rel="noopener noreferrer" class="">@Calinou</a>, this replaces the resolve/render framebuffer -&gt; window framebuffer blit with an actual drawn tri-strip which covers the entire viewport, which the PCRTC blackout already does.</p>
<p>It appears we have no guarantee what state the internal window framebuffer will be in, so drawing an actual primitive and letting the fragment shader do all the work seems to be the more compatible/functional solution here.</p>
<p>Thanks for the suggestion!</p>
<p>We hope that this resolves some issues for some select users (such as the black screen issue)</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="properly-handle-symlinks-">Properly handle symlinks <a href="https://github.com/open-goal/jak-project/pull/3990" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#properly-handle-symlinks-" class="hash-link" aria-label="Direct link to properly-handle-symlinks-" title="Direct link to properly-handle-symlinks-" translate="no">​</a></h3>
<p>If you use symlinks with your installation, this contribution updated our filesystem library so they would be handled properly.  Thanks for the fix!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="korean-language-support-">Korean language support <a href="https://github.com/open-goal/jak-project/pull/3988" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#korean-language-support-" class="hash-link" aria-label="Direct link to korean-language-support-" title="Direct link to korean-language-support-" translate="no">​</a></h3>
<p>TLDR, the original korean option in Jak 2 and Jak 3 is now working.  In Jak 3 this also resolved a crash when you would select it in the menu.</p>
<p>If you want to learn more, about what had to be done / how it was done, take a look at the PR description.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-q3-2025#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-was-pre-game-crash-and-egg-spider-bbush-">Fix <code>was-pre-game</code> crash and <code>egg-spider</code> bbush <a href="https://github.com/open-goal/jak-project/pull/4000" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#fix-was-pre-game-crash-and-egg-spider-bbush-" class="hash-link" aria-label="Direct link to fix-was-pre-game-crash-and-egg-spider-bbush-" title="Direct link to fix-was-pre-game-crash-and-egg-spider-bbush-" translate="no">​</a></h3>
<p>Fixes <a href="https://github.com/open-goal/jak-project/issues/3997" target="_blank" rel="noopener noreferrer" class="">https://github.com/open-goal/jak-project/issues/3997</a></p>
<ul>
<li class="">The script for the orb that is spawned when getting a medal in the satellite game was using the wrong entity name.</li>
</ul>
<p>Fixes <a href="https://github.com/open-goal/jak-project/issues/3998" target="_blank" rel="noopener noreferrer" class="">https://github.com/open-goal/jak-project/issues/3998</a></p>
<ul>
<li class="">The spider-manager process was invalid for one frame, causing the score to be set to the value of #f, winning the game instantly.</li>
</ul>
<p>Also doubled the PC port texture count, which should hopefully fix the crash that happens when playing the game all the way through to the end of the Destroy Dark Eco Tanks mission in one sitting.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-q3-2025#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2-duplicate-input-menu-entry-">Jak 2 duplicate input menu entry <a href="https://github.com/open-goal/jak-project/pull/4024" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#jak-2-duplicate-input-menu-entry-" class="hash-link" aria-label="Direct link to jak-2-duplicate-input-menu-entry-" title="Direct link to jak-2-duplicate-input-menu-entry-" translate="no">​</a></h3>
<p><code>Right Analog Stick Left</code> was accidentally placed in the remapping menu in Jak 2 twice, fixed!  Thank you!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-q3-2025#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="allow-skipping-jak-1-credits-in-speedrunner-mode-">Allow skipping Jak 1 credits in speedrunner mode <a href="https://github.com/open-goal/jak-project/pull/3981" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#allow-skipping-jak-1-credits-in-speedrunner-mode-" class="hash-link" aria-label="Direct link to allow-skipping-jak-1-credits-in-speedrunner-mode-" title="Direct link to allow-skipping-jak-1-credits-in-speedrunner-mode-" translate="no">​</a></h3>
<p>Originally in Jak 1 you couldn't skip the credits, similar to how you couldn't skip the cutscenes.  Now you can!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="some-jak-1-autosplitter-fixes--">Some Jak 1 autosplitter fixes <a href="https://github.com/open-goal/jak-project/pull/3996" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/4022" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#some-jak-1-autosplitter-fixes--" class="hash-link" aria-label="Direct link to some-jak-1-autosplitter-fixes--" title="Direct link to some-jak-1-autosplitter-fixes--" translate="no">​</a></h3>
<ul>
<li class="">Don't update cell/orb/fly autosplit counters during blackout (prevents extra splits when loading file)</li>
<li class="">Fix lavatube oranges autosplit</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1-qbert-crash-">Jak 1 qbert crash <a href="https://github.com/open-goal/jak-project/pull/4006" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#jak-1-qbert-crash-" class="hash-link" aria-label="Direct link to jak-1-qbert-crash-" title="Direct link to jak-1-qbert-crash-" translate="no">​</a></h3>
<p>There was a somewhat common crash that would happen in Lost Precursor City, while passing through the central room with the whirlpool in the middle. After you've completed the puzzle room challenge, if you leave the area and come back, when the <code>qbert-plat-master</code> spawns it tries to open up the room where the cell would be. It sends <code>'trigger</code> events to the processes for the door and the <code>wall-plat</code> under the door. In some scenarios, the <code>qbert-plat-master</code> will have a bad reference to one of these processes, and the <code>send-event-function</code> will crash trying to invoke the process's <code>event-hook</code>.</p>
<p>The fix is simply to add an extra check in <code>send-event-function</code> that we have a valid <code>process</code> before we try to send it the event. Making the fix here in <code>send-event-function</code> (in Jak 2 and 3 as well) means this could potentially address other crashes throughout the games too.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rename-water_ancgo-to-water-ancgo-during-jak-1-installation-">Rename <code>WATER_AN.CGO</code> to <code>WATER-AN.CGO</code> during Jak 1 Installation <a href="https://github.com/open-goal/jak-project/pull/3890" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#rename-water_ancgo-to-water-ancgo-during-jak-1-installation-" class="hash-link" aria-label="Direct link to rename-water_ancgo-to-water-ancgo-during-jak-1-installation-" title="Direct link to rename-water_ancgo-to-water-ancgo-during-jak-1-installation-" translate="no">​</a></h3>
<p>If you dump your ISO with a very outdated tool, it is possible that it will rename this one file incorrectly on you, and you will fail to install.</p>
<p>Since this is the only file in the entire quadrilogy that uses an invalid ISO-9660 character, we will attempt to correct it for you.</p>
<p>However, we will be updating the ISO extraction advice on the site soon to avoid people making bad dumps.  As truly that is the solution -- you gotta dump your ISO properly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1-bosnian-language-">Jak 1 Bosnian Language <a href="https://github.com/open-goal/jak-project/pull/4011" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q3-2025#jak-1-bosnian-language-" class="hash-link" aria-label="Direct link to jak-1-bosnian-language-" title="Direct link to jak-1-bosnian-language-" translate="no">​</a></h3>
<p>Another impressive full game translation, thanks a ton for all the effort on this contribution!</p>]]></content>
        <author>
            <name>barg034</name>
            <uri>https://github.com/dallmeyer</uri>
        </author>
        <author>
            <name>Vaser</name>
            <uri>https://github.com/xTVaser</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - Q2 2025]]></title>
        <id>https://opengoal.dev/blog/progress-report-q2-2025</id>
        <link href="https://opengoal.dev/blog/progress-report-q2-2025"/>
        <updated>2025-06-01T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Q2 2025's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>As many of you noticed, it's been awhile since the last Progress Report 😅. Worry not, the project is still alive and well, but development on OpenGOAL Jak 3 has been a bit slower as of late.</p>
<p>While we of course appreciate the enthusiasm and interest in the project, please keep in mind that this project only exists thanks to a small number of people working on it in their free time. Jak 3 development is quite far along, most missions are playable, but the known issues and missing features will take some dedicated time to complete. There is no ETA for a launcher release at this time, given the unknowns in the remaining work and uncertainty of developer availability.</p>
<p>You may also have noticed the title of this Progress Report says "Q2 2025" instead of "May 2025". Going forward, we are planning to release these Progress Reports on a quarterly basis, as we feel this should better match the pace of development (and less developer time spent putting together reports = Jak 3 sooner, right?)</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-q2-2025#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.27</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_l1mldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_l1mldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-q2-2025#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-forgotten-lands-chapter-3">The Forgotten Lands: Chapter 3<a href="https://opengoal.dev/blog/progress-report-q2-2025#the-forgotten-lands-chapter-3" class="hash-link" aria-label="Direct link to The Forgotten Lands: Chapter 3" title="Direct link to The Forgotten Lands: Chapter 3" translate="no">​</a></h3>
<p>Kuitar and HatKid return with another update for The Forgotten Lands! If you've been living under a rock, The Forgotten Lands is an incredible Jak 1 mod with fully-fledged custom levels, music, voicelines, and more! We won't spoil too much here, but check out the trailer below.</p>
<!--$?--><template id="B:0"></template><!--/$-->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want to play this mod (and others), follow the instructions <a href="https://jakmods.dev/" target="_blank" rel="noopener noreferrer" class="">here</a> to set up the mod list for the OpenGOAL launcher.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="customjak">CustomJak<a href="https://opengoal.dev/blog/progress-report-q2-2025#customjak" class="hash-link" aria-label="Direct link to CustomJak" title="Direct link to CustomJak" translate="no">​</a></h3>
<p>Kuitar also recently blessed us with an amazing Blender plugin that lets you create a custom skin for the Jak model in Jak 1! This tool lets you change the color of Jak's clothes/skin/hair/etc, toggle accessories like a nosering, sword, or his backpack, and much more. See the video below for more info.</p>
<!--$?--><template id="B:1"></template><!--/$-->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want to use this plugin, download the latest release <a href="https://github.com/Kuitar5/customJak/releases/latest" target="_blank" rel="noopener noreferrer" class="">here</a>.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="known-issues">Known Issues<a href="https://opengoal.dev/blog/progress-report-q2-2025#known-issues" class="hash-link" aria-label="Direct link to Known Issues" title="Direct link to Known Issues" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher-not-auto-updating">Launcher not auto-updating<a href="https://opengoal.dev/blog/progress-report-q2-2025#launcher-not-auto-updating" class="hash-link" aria-label="Direct link to Launcher not auto-updating" title="Direct link to Launcher not auto-updating" translate="no">​</a></h3>
<p>Certain versions of the Launcher (2.7.x) have a bug where you won't be automatically prompted to update to the latest Launcher version. If this affects you, you'll need to manually install the latest version (and then going forward it should auto-update again).</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_l4uldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_l4uldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher-appimage-is-broken-linux-">Launcher AppImage is broken (Linux) <a href="https://github.com/open-goal/launcher/issues/722" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#launcher-appimage-is-broken-linux-" class="hash-link" aria-label="Direct link to launcher-appimage-is-broken-linux-" title="Direct link to launcher-appimage-is-broken-linux-" translate="no">​</a></h3>
<p>Certain versions of the Launcher are broken on Linux due to <a href="https://github.com/tauri-apps/tauri/pull/12491" target="_blank" rel="noopener noreferrer" class="">an issue in how the AppImage is bundled</a>. There also appear to be some issues running the Launcher with certain SteamOS versions (e.g. on SteamDeck).</p>
<p>You can confirm if this issue is affecting you by running the AppImage in a terminal - if you see an error in the logs involving <code>EGL_BAD_PARAMETER</code>, you are indeed affected.</p>
<p>As a workaround, you can download a <code>jak-project</code> release directly and install manually, <a href="https://opengoal.dev/docs/usage/installation/#step-2b-installing-via-a-jak-project-release" target="_blank" rel="noopener noreferrer" class="">see the guide here</a>. Or on SteamDeck you also have the option to use the <a href="https://opengoal.dev/docs/usage/installation/#decky-plugin" target="_blank" rel="noopener noreferrer" class="">Decky plugin</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-q2-2025#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="translations-">Translations <a href="https://github.com/open-goal/jak-project/pull/3942" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#translations-" class="hash-link" aria-label="Direct link to translations-" title="Direct link to translations-" translate="no">​</a></h3>
<p>All translations from <a href="https://crowdin.com/project/opengoal" target="_blank" rel="noopener noreferrer" class="">Crowdin</a> should now be updated and added to the games. The previous update was back in February, so this includes changes for Italian, Polish, Portuguese (Brazilian), Galician, French, Hungarian, Spanish, Catalan, Czech, German, English (UK), and Croatian!</p>
<p>If you're interested in contributing translations, check out <a href="https://opengoal.dev/docs/category/contributing" target="_blank" rel="noopener noreferrer" class="">these guides</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-merc-transparency-for-custom-actors-">Fix <code>merc</code> transparency for custom actors <a href="https://github.com/open-goal/jak-project/pull/3875" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-merc-transparency-for-custom-actors-" class="hash-link" aria-label="Direct link to fix-merc-transparency-for-custom-actors-" title="Direct link to fix-merc-transparency-for-custom-actors-" translate="no">​</a></h3>
<p>Because merc effects for custom models would always have the <code>envmap-usage</code> flag set, this would also set the <code>ignore-alpha</code> flag, making transparency effects not work. Now the <code>envmap-usage</code> flag is only set when the effect actually has an envmap, allowing for proper transparency support in custom models.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="update-to-sdl3----">Update to SDL3 <a href="https://github.com/open-goal/jak-project/pull/3852" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3913" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3932" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3923" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#update-to-sdl3----" class="hash-link" aria-label="Direct link to update-to-sdl3----" title="Direct link to update-to-sdl3----" translate="no">​</a></h3>
<p>Simple DirectMedia Layer (SDL) is a library used by OpenGOAL which provides low level access to audio, keyboard, mouse, joystick, and graphics hardware. This PR upgraded from SDL2 to SDL3, which brought with it a handful of new features!</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="controller-functionality">Controller functionality<a href="https://opengoal.dev/blog/progress-report-q2-2025#controller-functionality" class="hash-link" aria-label="Direct link to Controller functionality" title="Direct link to Controller functionality" translate="no">​</a></h4>
<ul>
<li class="">Pressure sensitivity support for DS3 controllers<!-- -->
<ul>
<li class="">This option is disabled by default</li>
<li class="">Only tested on Windows. You will need <a href="https://docs.nefarius.at/projects/DsHidMini" target="_blank" rel="noopener noreferrer" class="">DsHidMini</a> and to be using SXS mode.</li>
</ul>
</li>
<li class="">Trigger resistance and vibration effects for DualSense controllers<!-- -->
<ul>
<li class="">resistance when changing to dark jak</li>
<li class="">different gun shooting effects<!-- -->
<ul>
<li class="">red (resistance)</li>
<li class="">yellow (weapon trigger)</li>
<li class="">blue (vibrates)</li>
<li class="">purple (less resistance)</li>
</ul>
</li>
</ul>
</li>
<li class="">Trigger vibration effects for Xbox One controllers<!-- -->
<ul>
<li class="">small vibrate when collecting dark eco</li>
<li class="">big vibrate when changing to dark jak</li>
<li class="">vibrate when shooting gun, proportional to gun type</li>
</ul>
</li>
</ul>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The gun shooting effects require enabling a new "Swap R1 and R2" option</p></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-imgui-menu">New ImGUI Menu<a href="https://opengoal.dev/blog/progress-report-q2-2025#new-imgui-menu" class="hash-link" aria-label="Direct link to New ImGUI Menu" title="Direct link to New ImGUI Menu" translate="no">​</a></h4>
<p>The ImGUI menu options have been expanded to assist in selecting the active controller:</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/sdl3_imgui-597a62d7a7f4908a997383f37b68dde9.png" width="423" height="187" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="de-duplicate-custom-level-textures-fix-">De-duplicate custom level textures fix <a href="https://github.com/open-goal/jak-project/pull/3874" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#de-duplicate-custom-level-textures-fix-" class="hash-link" aria-label="Direct link to de-duplicate-custom-level-textures-fix-" title="Direct link to de-duplicate-custom-level-textures-fix-" translate="no">​</a></h3>
<p>Blender has some special logic to display unique names for textures even if their underlying filenames are identical, but it doesn't use these unique names when exporting to a GLB file.</p>
<p>Previously the custom level tooling would de-dupe textures simply based on their filename, meaning one texture could be ignored and replaced by another texture that shares the same filename. This PR fixes the de-duplication logic to actually compare the file contents before discarding potential duplicates.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="all-extracted-assets-in-one-folder-">All extracted assets in one folder <a href="https://github.com/open-goal/jak-project/pull/3882" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#all-extracted-assets-in-one-folder-" class="hash-link" aria-label="Direct link to all-extracted-assets-in-one-folder-" title="Direct link to all-extracted-assets-in-one-folder-" translate="no">​</a></h3>
<p>Previously, textures and audio extracted from the games would end up in a <code>decompiler_out</code> folder, extracted levels would land in <code>glb_out</code>, and extracted collision in <code>debug_out</code>. With this change, all of these extractions now end up in the <code>decompiler_out</code> folder (and the newest launcher has a button to take you right there, see below)</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/decompiler_out-2df57269c12b0521de0560e6f6d93d97.png" width="783" height="356" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="open-extracted-assets-folder-">Open Extracted Assets Folder <a href="https://github.com/open-goal/launcher/pull/763" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#open-extracted-assets-folder-" class="hash-link" aria-label="Direct link to open-extracted-assets-folder-" title="Direct link to open-extracted-assets-folder-" translate="no">​</a></h3>
<p>Going hand-in-hand with the above change, we added an option in the Launcher to jump directly to the folder containing extracted assets.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/extract_button-8029ffb2553883f7e5b0619d819477fe.png" width="1000" height="754" class="img_ev3q"></p>
<p>We've also added a brief explanation about how to use the related Decompiler settings.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/extract_explanation-e351a560fe6124baf63cbfd0b3c06b95.png" width="1004" height="747" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="toggle-fullscreen-with-alt--enter-">Toggle fullscreen with Alt + Enter <a href="https://github.com/open-goal/jak-project/pull/3901" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#toggle-fullscreen-with-alt--enter-" class="hash-link" aria-label="Direct link to toggle-fullscreen-with-alt--enter-" title="Direct link to toggle-fullscreen-with-alt--enter-" translate="no">​</a></h3>
<p>Adds a keybind (default is <code>Alt</code> + <code>Enter</code>) to toggle between Fullscreen and Windowed display modes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="toggle-imgui-menu-on-initial-key-press-only-">Toggle ImGUI menu on initial key press only <a href="https://github.com/open-goal/jak-project/pull/3911" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#toggle-imgui-menu-on-initial-key-press-only-" class="hash-link" aria-label="Direct link to toggle-imgui-menu-on-initial-key-press-only-" title="Direct link to toggle-imgui-menu-on-initial-key-press-only-" translate="no">​</a></h3>
<p>Previously the ImGUI menu would flash between being hidden and shown repeatedly while holding <code>Alt</code>. With this PR, visibility is only toggled on the initial "key down" event, and <em>holding</em> the key down is ignored.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="analog-stick-sensitivity-setting-">Analog Stick sensitivity setting <a href="https://github.com/open-goal/jak-project/pull/3919" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#analog-stick-sensitivity-setting-" class="hash-link" aria-label="Direct link to analog-stick-sensitivity-setting-" title="Direct link to analog-stick-sensitivity-setting-" translate="no">​</a></h3>
<p>This introduces a simple multiplier to the gamepad axis input value received from SDL events. Normally the values it provides cannot satisfy the square range of the stick input. This is usually fine but it might play differently with different controllers and compared to on-console, especially considering the DualShock 1/2 have automatic calibration which works in mysterious ways.</p>
<p>This PR sets 133% as the default, and exposes the setting in the Jak 1 and 2 menus so the user can adjust it for their controllers from 50% all the way to 200%.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-blink-speed-at-high-fps-">Fix blink speed at high FPS <a href="https://github.com/open-goal/jak-project/pull/3759" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-blink-speed-at-high-fps-" class="hash-link" aria-label="Direct link to fix-blink-speed-at-high-fps-" title="Direct link to fix-blink-speed-at-high-fps-" translate="no">​</a></h3>
<p>The timing for characters blinking was previously tied to frame rate, and so at high frame rates they would blink both too often and too quickly. This PR fixes that across all 3 games.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-buttons-being-considered-held-down-on-boot-">Fix buttons being considered held down on boot <a href="https://github.com/open-goal/jak-project/pull/3938" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-buttons-being-considered-held-down-on-boot-" class="hash-link" aria-label="Direct link to fix-buttons-being-considered-held-down-on-boot-" title="Direct link to fix-buttons-being-considered-held-down-on-boot-" translate="no">​</a></h3>
<p>Users were reporting that some controller buttons were incorrectly considered held down upon booting the game, and wouldn't reset until the user actually pressed that button. For example, Square would be considered held and would cause players to brake constantly in the zoomer.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-iso-extraction-validation-bug-">Fix ISO extraction validation bug <a href="https://github.com/open-goal/jak-project/pull/3937" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-iso-extraction-validation-bug-" class="hash-link" aria-label="Direct link to fix-iso-extraction-validation-bug-" title="Direct link to fix-iso-extraction-validation-bug-" translate="no">​</a></h3>
<p>Fixes a bug where only the first 2^32 bytes were being properly extracted and hashed for validation.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="default-to-msaa-off-">Default to MSAA off <a href="https://github.com/open-goal/jak-project/pull/3943" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#default-to-msaa-off-" class="hash-link" aria-label="Direct link to default-to-msaa-off-" title="Direct link to default-to-msaa-off-" translate="no">​</a></h3>
<p>MSAA will now default to off instead of 2X (if you don't already have saved graphics settings, such as after a fresh install). We hope this will help with some black screen and performance issues some users have been facing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-q2-2025#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pause-menu-pc-adjustments-">Pause menu PC adjustments <a href="https://github.com/open-goal/jak-project/pull/3898" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#pause-menu-pc-adjustments-" class="hash-link" aria-label="Direct link to pause-menu-pc-adjustments-" title="Direct link to pause-menu-pc-adjustments-" translate="no">​</a></h3>
<p>One common enhancement needed in these PC ports is to handle different screen resolutions and aspect ratios. The <code>progress</code> code for the pause menus throughout the games are notoriously fragile when it comes to supporting this. The settings code also needs to be extended to handle all the new options supported in the PC Port (MSAA, V-Sync, etc). This PR addresses a big chunk of this work for Jak 3.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="subrails-pillar-transparency-fixed-">Subrails pillar transparency fixed <a href="https://github.com/open-goal/jak-project/pull/3933" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#subrails-pillar-transparency-fixed-" class="hash-link" aria-label="Direct link to subrails-pillar-transparency-fixed-" title="Direct link to subrails-pillar-transparency-fixed-" translate="no">​</a></h3>
<p>When these pillars get very close to the screen, they fade it out, to avoid blocking the camera. But, for unknown reasons, they move this to an alpha bucket as well (normally not required for fade), but rely on merc disabling alpha blend.</p>
<p>OpenGOAL's detection of alpha blending just checks the bucket, but there's more logic than this in the shader. Rather than figuring this out, this PR just fixes this specific case for now.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/subrails_alpha-b06fbf15cbd09f0073a234c5406e52b9.png" width="3840" height="2160" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="desert-sand-texture-filtering-">Desert sand texture filtering <a href="https://github.com/open-goal/jak-project/pull/3933" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#desert-sand-texture-filtering-" class="hash-link" aria-label="Direct link to desert-sand-texture-filtering-" title="Direct link to desert-sand-texture-filtering-" translate="no">​</a></h3>
<p>Fixes missing texture filtering in the desert's <code>hfrag</code> renderer.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-no-memory-card-inserted-warning-">Fix "No Memory Card inserted" warning <a href="https://github.com/open-goal/jak-project/pull/3933" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-no-memory-card-inserted-warning-" class="hash-link" aria-label="Direct link to fix-no-memory-card-inserted-warning-" title="Direct link to fix-no-memory-card-inserted-warning-" translate="no">​</a></h3>
<p>In retail mode you'd previously get blocked by a warning about "No Memory Card inserted". We don't need this check in OpenGOAL 😅</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/memcard-f26648fbd060ac818f5facb4b844e6f5.png" width="1920" height="1080" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-shadow-renderer-crash-">Fix shadow renderer crash <a href="https://github.com/open-goal/jak-project/pull/3934" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-shadow-renderer-crash-" class="hash-link" aria-label="Direct link to fix-shadow-renderer-crash-" title="Direct link to fix-shadow-renderer-crash-" translate="no">​</a></h3>
<p>This fixes a crash which could be reproduced by firing the Super Nova in Dark Ship. When the <code>dp-bipedal</code>s get blown up, their bones go to NaNs on the last frame. The shadow renderer doesn't handle this well and draws all possible triangles as single tris. This overflows the vif <code>unpack</code> field and triggered an assert when sizes inside the shadow renderer weren't consistent. As a workaround, if the bones are NaN, the shadow renderer treats them as 0, meaning there is no shadow drawn.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-ai-ignore-nav-mesh-original-game-bug-">Fix <code>ai-ignore-nav-mesh</code> original game bug <a href="https://github.com/open-goal/jak-project/pull/3941" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-ai-ignore-nav-mesh-original-game-bug-" class="hash-link" aria-label="Direct link to fix-ai-ignore-nav-mesh-original-game-bug-" title="Direct link to fix-ai-ignore-nav-mesh-original-game-bug-" translate="no">​</a></h3>
<p>On Windows, a couple of enemy types were acting very strange when it came to following their intended paths (the 4 Marauders you chase through the desert, and the desert Metalheads you shoot from the vehicle turret). This appears to be an original Naughty Dog bug, where the <code>ai-ignore-nav-mesh</code> event is missing a parameter to control whether the behavior is enabled or disabled.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/nav-aab7e4a6d5610f5811b45ad31326cbac.png" width="550" height="345" class="img_ev3q"></p>
<p>By complete chance, this just happens to work out fine on some machines (e.g. Linux and PS2) - so long as the uninitialized value on the stack <code>(-&gt; arg3 param 0)</code> is anything but <code>#f</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-q2-2025#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="subtitle-fixes---">Subtitle fixes <a href="https://github.com/open-goal/jak-project/pull/3872" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3907" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3910" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#subtitle-fixes---" class="hash-link" aria-label="Direct link to subtitle-fixes---" title="Direct link to subtitle-fixes---" translate="no">​</a></h3>
<p>While adding support for subtitles in new languages (such as Polish), a bug was introduced where the selected subtitle language wasn't saved properly, causing crashes and incorrect subtitle languages to be used.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-pagination-in-speedrun-popup-menu-">Fix pagination in speedrun popup menu <a href="https://github.com/open-goal/jak-project/pull/3883" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-pagination-in-speedrun-popup-menu-" class="hash-link" aria-label="Direct link to fix-pagination-in-speedrun-popup-menu-" title="Direct link to fix-pagination-in-speedrun-popup-menu-" translate="no">​</a></h3>
<p>Fixes a small bug in how we paginate entries in non-dynamic popup menus (e.g. some submenus within the speedrun popup menu).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-issue-in-atoll-sig-mission-">Fix issue in <code>atoll-sig</code> mission <a href="https://github.com/open-goal/jak-project/pull/3935" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-issue-in-atoll-sig-mission-" class="hash-link" aria-label="Direct link to fix-issue-in-atoll-sig-mission-" title="Direct link to fix-issue-in-atoll-sig-mission-" translate="no">​</a></h3>
<p>Due to a <a href="https://github.com/open-goal/jak-project/issues/3929" target="_blank" rel="noopener noreferrer" class="">bug</a> that is not fully understood yet, sometimes an actor's bones will have NaN coordinates (garbage data). One manifestation of this bug is some weird behavior/softlock in the <code>atoll-sig</code> mission, and to add to the mystery: it seems to only happens on SteamDeck with certain SteamOS versions!</p>
<p>The sniper Metalheads will jump to 0,0,0 every other frame (far away from the mission), which causes Sig to stop charging his gun, and thus prevents you from progressing further in the mission. This PR adds a workaround to handle this scenario and prevent the mission from softlocking.</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/atoll_sniper-3076dcd1bfc8bf2eaca8d01c18cab8b7.mp4" controls=""></video><!--/$-->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-q2-2025#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fixed-collision-extract-scaling-">Fixed collision extract scaling <a href="https://github.com/open-goal/jak-project/pull/3882" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fixed-collision-extract-scaling-" class="hash-link" aria-label="Direct link to fixed-collision-extract-scaling-" title="Direct link to fixed-collision-extract-scaling-" translate="no">​</a></h3>
<p>Fixed a small bug for Jak 1 where the extracted collision was scaled incorrectly (it was 1/16th the scale of the extracted level geometry).</p>
<p>Before:
<img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/collision_scale_before-c82d1930abc5b33bc4f5fcb4308c4ddc.png" width="2882" height="1452" class="img_ev3q"></p>
<p>After:
<img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/collision_scale_after-ca5436837db4e9b29449cef8b1f63cb9.png" width="1708" height="1178" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="speedrunner-mode-improvements-">Speedrunner Mode improvements <a href="https://github.com/open-goal/jak-project/pull/3902" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#speedrunner-mode-improvements-" class="hash-link" aria-label="Direct link to speedrunner-mode-improvements-" title="Direct link to speedrunner-mode-improvements-" translate="no">​</a></h3>
<p>Fixed up a few things for speedrunner mode in Jak 1:</p>
<ul>
<li class="">Changed autosplitter to (re)start run in line with ruleset (timing starts the first frame after blackout where jak is touching ground)<!-- -->
<ul>
<li class="">Also tweaked the verification text shown in bottom left to show "Run Started: Yes/No" to match this</li>
</ul>
</li>
<li class="">Changed speedrun menu button combo to match Jak 2/3 (only need to hold <code>L1</code>+<code>R1</code> and press <code>Start</code>/<code>Select</code>, no longer need to hold <code>X</code>)</li>
<li class="">Treat speedrun menu via <code>Select</code> the same as <code>Start</code> (no more potential for funny pause buffer where actors freeze)</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/speedrun_nostart-6784984c3ba3c16c974727741af6d7b8.png" width="1920" height="1080" class="img_ev3q">
<img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/speedrun_start-82e5577349a4c65ec01eefe87a340cb3.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tooling-improvements">Tooling Improvements<a href="https://opengoal.dev/blog/progress-report-q2-2025#tooling-improvements" class="hash-link" aria-label="Direct link to Tooling Improvements" title="Direct link to Tooling Improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher-upgraded-to-tauri-v2----">Launcher upgraded to Tauri v2 <a href="https://github.com/open-goal/launcher/pull/585" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/708" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/719" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/738" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#launcher-upgraded-to-tauri-v2----" class="hash-link" aria-label="Direct link to launcher-upgraded-to-tauri-v2----" title="Direct link to launcher-upgraded-to-tauri-v2----" translate="no">​</a></h3>
<p>Tauri is the framework used by the OpenGOAL Launcher, and this PR upgraded the launcher to use the newer v2 version. The major benefit of this is flatpak support.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="check-dgocgos-exist-within-the-objectdb-when-building-levels-">Check DGO/CGOs exist within the ObjectDB when building levels <a href="https://github.com/open-goal/jak-project/pull/3888" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#check-dgocgos-exist-within-the-objectdb-when-building-levels-" class="hash-link" aria-label="Direct link to check-dgocgos-exist-within-the-objectdb-when-building-levels-" title="Direct link to check-dgocgos-exist-within-the-objectdb-when-building-levels-" translate="no">​</a></h3>
<p>Adds some simple safe-guarding code that will improve the error messaging when an expected DGO/CGO does not exist in the ObjectDB, instead of just a vague invalid map error.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/dgo_objectdb-cf48af1e51d0c7db7986dbf6ebbfad3c.png" width="1243" height="162" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="optimized-vcc-checks-and-reduced-log-spam----">Optimized VCC checks and reduced log spam <a href="https://github.com/open-goal/launcher/pull/710" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/715" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/717" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/712" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#optimized-vcc-checks-and-reduced-log-spam----" class="hash-link" aria-label="Direct link to optimized-vcc-checks-and-reduced-log-spam----" title="Direct link to optimized-vcc-checks-and-reduced-log-spam----" translate="no">​</a></h3>
<p>The launcher checks the user's VCC version to ensure they'll be able to run the game properly. This PR reduces the number of times/places we do that check, and avoids flooding the logs with redundant info.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-extractor-assuming-jak-1-">Fix extractor assuming Jak 1 <a href="https://github.com/open-goal/jak-project/pull/3896" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-extractor-assuming-jak-1-" class="hash-link" aria-label="Direct link to fix-extractor-assuming-jak-1-" title="Direct link to fix-extractor-assuming-jak-1-" translate="no">​</a></h3>
<p>Previously the <code>extractor</code> would assume you were trying to run in <code>Jak1</code> game mode if the optional <code>--game</code> argument wasn't provided. Since the user must provide the ISO to <code>extractor</code>, we can just determine the game mode dynamically from the ISO hash/contents. This PR fixes the extractor to make use of that information when the <code>--game</code> argument isn't specified.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-macos-dynamically-linked-library-">Fix MacOS dynamically linked library <a href="https://github.com/open-goal/jak-project/pull/3915" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#fix-macos-dynamically-linked-library-" class="hash-link" aria-label="Direct link to fix-macos-dynamically-linked-library-" title="Direct link to fix-macos-dynamically-linked-library-" translate="no">​</a></h3>
<p><code>libidn2</code> which is a potential part of <code>libcurl</code> seemingly slipped into the latest release (0.2.25) and it was dynamically linked for MacOS, causing issues. The theory for why is that the underlying MacOS image changed (now includes this library) and so the cmake detected that and started building with it. This PR just disables it, as we don't need it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="misc-launcher-cleanupfixes-----------">Misc launcher cleanup/fixes <a href="https://github.com/open-goal/launcher/pull/721" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/723" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/725" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/736" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/739" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/745" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/746" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/755" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/756" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/757" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/launcher/pull/762" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-q2-2025#misc-launcher-cleanupfixes-----------" class="hash-link" aria-label="Direct link to misc-launcher-cleanupfixes-----------" title="Direct link to misc-launcher-cleanupfixes-----------" translate="no">​</a></h3>
<ul>
<li class="">Fixed button to open logs directory on MacOS</li>
<li class="">Fixed bug where only 1 mod could be installed per launcher boot</li>
<li class="">Fixed settings navigation to automatically open specific tabs (general, versions, mods)</li>
<li class="">Fixed bug preventing texture pack installation</li>
<li class="">Add confirmation dialog before auto-updating launcher</li>
<li class="">Disabled navigation to other pages while updating/installing</li>
<li class="">Fixed hard-to-read text in custom light/dark modes</li>
</ul>]]></content>
        <author>
            <name>barg034</name>
            <uri>https://github.com/dallmeyer</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - February 2025]]></title>
        <id>https://opengoal.dev/blog/progress-report-feb-2025</id>
        <link href="https://opengoal.dev/blog/progress-report-feb-2025"/>
        <updated>2025-03-02T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[February 2025's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>A big translation update, and a couple Jak 3 fixes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-feb-2025#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.24</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_596ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_596ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-feb-2025#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="linux-built-on-ubuntu-2204-now-">Linux Built on Ubuntu 22.04 Now <a href="https://github.com/open-goal/jak-project/pull/3860" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2025#linux-built-on-ubuntu-2204-now-" class="hash-link" aria-label="Direct link to linux-built-on-ubuntu-2204-now-" title="Direct link to linux-built-on-ubuntu-2204-now-" translate="no">​</a></h2>
<p>Ubuntu 20.04 is end-of-life, this means that our minimum glibc and what-not has been updated, the launcher will soon follow suit.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="translations--">Translations <a href="https://github.com/open-goal/jak-project/pull/3590" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3872" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2025#translations--" class="hash-link" aria-label="Direct link to translations--" title="Direct link to translations--" translate="no">​</a></h2>
<p>All translations have been updated and added to the menus of the games.  The Italian translations are one that got a major bump, and the changes <em>may</em> not have made it into this month's release due a mistake on my part, they should sort themselves out by next month however.</p>
<p>The game's translations havn't been updated since October so, apologies for that.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-feb-2025#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="envmap-fixes-">Envmap Fixes <a href="https://github.com/open-goal/jak-project/pull/3862" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2025#envmap-fixes-" class="hash-link" aria-label="Direct link to envmap-fixes-" title="Direct link to envmap-fixes-" translate="no">​</a></h3>
<p>This fixes some env-map related issues in the subrail sections.  It still may not be perfect but it's looking better.</p>
<p>Before:</p>
<!--$--><video style="display:block;width:320px;height:180px" class="blog-video" src="/assets/medias/envmap_before-14909c9e4007214fe19e25417c0f5e67.mp4" controls=""></video><!--/$-->
<p>After:</p>
<!--$--><video style="display:block;width:320px;height:180px" class="blog-video" src="/assets/medias/envmap_after-565bf82940777031e218f26fc30460ed.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-subrail-crash-">Fix Subrail crash <a href="https://github.com/open-goal/jak-project/pull/3863" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2025#fix-subrail-crash-" class="hash-link" aria-label="Direct link to fix-subrail-crash-" title="Direct link to fix-subrail-crash-" translate="no">​</a></h3>
<p>Small crash fixed in the subrail section introduced by the vector decompilation cleanup.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tooling-improvements">Tooling Improvements<a href="https://opengoal.dev/blog/progress-report-feb-2025#tooling-improvements" class="hash-link" aria-label="Direct link to Tooling Improvements" title="Direct link to Tooling Improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="better-vector-function-decompilation-output-">Better vector function decompilation output <a href="https://github.com/open-goal/jak-project/pull/3861" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2025#better-vector-function-decompilation-output-" class="hash-link" aria-label="Direct link to better-vector-function-decompilation-output-" title="Direct link to better-vector-function-decompilation-output-" translate="no">​</a></h3>
<p>Vector operation related outputs is now a lot less verbose!</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/vectors-7d3cd6dfa9c40eba21a0fb1749dd7961.png" width="510" height="322" class="img_ev3q"></p>]]></content>
        <author>
            <name>Vaser</name>
            <uri>https://github.com/xTVaser</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - January 2025]]></title>
        <id>https://opengoal.dev/blog/progress-report-jan-2025</id>
        <link href="https://opengoal.dev/blog/progress-report-jan-2025"/>
        <updated>2025-02-04T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[January 2025's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Decompiler improvements, custom actor support for Jak 2 and 3 and more.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-jan-2025#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.22</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-jan-2025#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="decompiler-improvements">Decompiler Improvements<a href="https://opengoal.dev/blog/progress-report-jan-2025#decompiler-improvements" class="hash-link" aria-label="Direct link to Decompiler Improvements" title="Direct link to Decompiler Improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-more-vf-macros--">Add More VF Macros <a href="https://github.com/open-goal/jak-project/pull/3824" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3849" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2025#add-more-vf-macros--" class="hash-link" aria-label="Direct link to add-more-vf-macros--" title="Direct link to add-more-vf-macros--" translate="no">​</a></h3>
<p>The PS2's Vector Units had a lot of instructions for vector operations that let you define a mask to only operate on specific parts of a vector. Our macros for this were a bit lackluster and required you to manually define the mask as a bitfield. This adds extra convenience macros for every mask combination, cleaning up the code a bit.</p>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (.add.w.vf vf2 vf0 vf5 :mask #b0001)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (.add.z.vf vf2 vf0 vf5 :mask #b0010)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (.sub.y.vf vf2 vf0 vf5 :mask #b0100)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (.sub.w.vf vf2 vf0 vf0 :mask #b1000)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (.add.w.vf.x vf2 vf0 vf5)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (.add.z.vf.y vf2 vf0 vf5)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (.sub.y.vf.z vf2 vf0 vf5)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (.sub.w.vf.w vf2 vf0 vf0)</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="detect-vector-and-more--">Detect <code>vector*!</code> And More <a href="https://github.com/open-goal/jak-project/pull/3828" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3845" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2025#detect-vector-and-more--" class="hash-link" aria-label="Direct link to detect-vector-and-more--" title="Direct link to detect-vector-and-more--" translate="no">​</a></h3>
<p>In Jak 2 and 3, the <code>vector*!</code> function was inlined, which the decompiler now detects. Along with this, some other common operations are now also detected:</p>
<ul>
<li class=""><code>new-stack-matrix0</code></li>
</ul>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (let ((s4-2 (new 'stack-no-clear 'matrix)))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; s4-2 rvec quad) (the-as uint128 0))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; s4-2 uvec quad) (the-as uint128 0))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; s4-2 fvec quad) (the-as uint128 0))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; s4-2 trans quad) (the-as uint128 0))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (let ((f30-0 (-&gt; arg0 bounds w)))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">     (matrix-4x4-inverse! s4-2 (-&gt; arg1 data 0 bone transform))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">     (set! (-&gt; arg0 bounds w) 1.0)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">     (vector-matrix*! (-&gt; arg0 bounds) (-&gt; arg0 bounds) s4-2)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">     (set! (-&gt; arg0 bounds w) f30-0)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">     )</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (let ((s4-2 (new-stack-matrix0))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">       (f30-0 (-&gt; arg0 bounds w))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">       )</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">   (matrix-4x4-inverse! s4-2 (-&gt; arg1 data 0 bone transform))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">   (set! (-&gt; arg0 bounds w) 1.0)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">   (vector-matrix*! (-&gt; arg0 bounds) (-&gt; arg0 bounds) s4-2)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">   (set! (-&gt; arg0 bounds w) f30-0)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">   )</span><br></span></code></pre></div></div>
<ul>
<li class=""><code>matrix-copy!</code></li>
</ul>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (let* ((a3-0 (-&gt; this parent 0 node-list data a0-6 bone transform))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">        (a2-0 (-&gt; s3-0 mat))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">        (v1-9 (-&gt; a3-0 rvec quad))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">        (a0-8 (-&gt; a3-0 uvec quad))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">        (a1-4 (-&gt; a3-0 fvec quad))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">        (a3-1 (-&gt; a3-0 trans quad))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">        )</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; a2-0 rvec quad) v1-9)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; a2-0 uvec quad) a0-8)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; a2-0 fvec quad) a1-4)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; a2-0 trans quad) a3-1)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (let ((a3-0 (-&gt; this parent 0 node-list data a0-6 bone transform)))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">   (matrix-copy! (-&gt; s3-0 mat) a3-0)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)">   )</span><br></span></code></pre></div></div>
<ul>
<li class=""><code>vector-copy!</code></li>
</ul>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (set! (-&gt; s5-1 trans quad) (-&gt; self sphere quad))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (vector-copy! (-&gt; s5-1 trans) (-&gt; self sphere))</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="as-type-macro-and-font-inline-method-detection-"><code>as-type</code> Macro and Font Inline Method Detection <a href="https://github.com/open-goal/jak-project/pull/3855" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2025#as-type-macro-and-font-inline-method-detection-" class="hash-link" aria-label="Direct link to as-type-macro-and-font-inline-method-detection-" title="Direct link to as-type-macro-and-font-inline-method-detection-" translate="no">​</a></h3>
<p>Another very common operation in Jak 2 and 3 is to check if an object is of a specific type and then cast it to that type, similar to <code>dynamic_cast</code> in C++.</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">let*</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">s</span><span class="token number" style="color:rgb(181, 206, 168)">4</span><span class="token number" style="color:rgb(181, 206, 168)">-0</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">-&gt;</span><span class="token plain"> </span><span class="token symbol">this</span><span class="token plain"> </span><span class="token symbol">process</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">       </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">a</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token number" style="color:rgb(181, 206, 168)">-15</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">type?</span><span class="token plain"> </span><span class="token symbol">s4-0</span><span class="token plain"> </span><span class="token symbol">process-focusable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token symbol">s4-0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token symbol">...</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<p>This operation is now detected and will use the <code>as-type</code> macro:</p>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (let* ((s4-0 (-&gt; this process))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">        (a0-15 (if (type? s4-0 process-focusable) s4-0)))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   ...)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (let ((a0-15 (as-type (-&gt; this process) process-focusable))) ...)</span><br></span></code></pre></div></div>
<p>Additionally, <code>font-context</code> methods that were previously inlined are now properly detected:</p>
<div class="language-diff codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-diff codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (let ((v1-14 gp-0))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; v1-14 width) (the float 440))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   )</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"> (let ((v1-15 gp-0))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   (set! (-&gt; v1-15 height) (the float 140))</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token deleted-sign deleted prefix deleted" style="color:rgb(206, 145, 120)">-</span><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)">   )</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token deleted-sign deleted line" style="color:rgb(206, 145, 120)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (set-width! gp-0 440)</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"></span><span class="token inserted-sign inserted prefix inserted" style="color:rgb(181, 206, 168)">+</span><span class="token inserted-sign inserted line" style="color:rgb(181, 206, 168)"> (set-height! gp-0 140)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-levels">Custom Levels<a href="https://opengoal.dev/blog/progress-report-jan-2025#custom-levels" class="hash-link" aria-label="Direct link to Custom Levels" title="Direct link to Custom Levels" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-enviroment-mapping-in-jak-2-and-3-">Support Enviroment Mapping in Jak 2 and 3 <a href="https://github.com/open-goal/jak-project/pull/3851" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2025#support-enviroment-mapping-in-jak-2-and-3-" class="hash-link" aria-label="Direct link to support-enviroment-mapping-in-jak-2-and-3-" title="Direct link to support-enviroment-mapping-in-jak-2-and-3-" translate="no">​</a></h3>
<p>The environment mapping support that was added recently for Jak 1 now also works in Jak 2 and 3.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-actor-support-in-jak-2-and-3-">Custom Actor Support in Jak 2 and 3 <a href="https://github.com/open-goal/jak-project/pull/3851" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2025#custom-actor-support-in-jak-2-and-3-" class="hash-link" aria-label="Direct link to custom-actor-support-in-jak-2-and-3-" title="Direct link to custom-actor-support-in-jak-2-and-3-" translate="no">​</a></h3>
<p>Jak 2 and 3 have received support for custom actors! Previously only available for Jak 1, this allows you to create a model in Blender with animations and import it into the game to create your own game objects with custom behavior.</p>
<p>You can find a guide on how to make your own custom actors <a class="" href="https://opengoal.dev/docs/developing/custom_levels/custom_actors">here</a> if interested.</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/build-actor2-7b3d9f69e15c4b764c9a7b1d35c63029.mp4" controls=""></video><!--/$-->
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/build-actor3-f1fa9ab733b4e7aaa0ae5df915be47bf.mp4" controls=""></video><!--/$-->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-jan-2025#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-tie-wind-regression-">Fix TIE Wind Regression <a href="https://github.com/open-goal/jak-project/pull/3837" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2025#fix-tie-wind-regression-" class="hash-link" aria-label="Direct link to fix-tie-wind-regression-" title="Direct link to fix-tie-wind-regression-" translate="no">​</a></h3>
<p>The camera code improvements from last month's release have caused a regression that made objects using wind, such as trees, vanish.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-jan-2025#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-camera-other-regression-">Fix <code>camera-other</code> Regression <a href="https://github.com/open-goal/jak-project/pull/3843" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2025#fix-camera-other-regression-" class="hash-link" aria-label="Direct link to fix-camera-other-regression-" title="Direct link to fix-camera-other-regression-" translate="no">​</a></h3>
<p>Along with wind, there was another regression in Jak 2/3 that broke levels like the Palace Throne, which uses the <code>camera-other</code> effect to rotate parts of the level.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-jan-2025#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="enemy-code-cleanup-">Enemy Code Cleanup <a href="https://github.com/open-goal/jak-project/pull/3845" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2025#enemy-code-cleanup-" class="hash-link" aria-label="Direct link to enemy-code-cleanup-" title="Direct link to enemy-code-cleanup-" translate="no">​</a></h3>
<p>The code for enemy types has been cleaned up to make it a lot more readable.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - December 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-dec-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-dec-2024"/>
        <updated>2025-01-05T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[December 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Despite the holiday season, some work was still accomplished.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-dec-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.21</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-dec-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-apple-silicon-via-the-launcher-">Support Apple Silicon via the Launcher <a href="https://github.com/open-goal/launcher/pull/648" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#support-apple-silicon-via-the-launcher-" class="hash-link" aria-label="Direct link to support-apple-silicon-via-the-launcher-" title="Direct link to support-apple-silicon-via-the-launcher-" translate="no">​</a></h3>
<p>To coincide with the changes in last month's upgrade, the launcher is now natively built for Apple Silicon and the application will actually let you install the tooling and games appropriately.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-caron-diacritics-and-czech-alphabet--">Support Caron Diacritics and Czech Alphabet <a href="https://github.com/open-goal/jak-project/pull/3815" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3816" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#support-caron-diacritics-and-czech-alphabet--" class="hash-link" aria-label="Direct link to support-caron-diacritics-and-czech-alphabet--" title="Direct link to support-caron-diacritics-and-czech-alphabet--" translate="no">​</a></h3>
<p>Caron diacritics have been added to the games font, as well as some additional diacritics to fully support the Czech alphabet. A reminder once again that if you would like to translate the games into a language but your font is not fully supported, please still reach out. As long as the alphabet only requires some simple modifications with the game's existing glyphs (such as adding diacritics to the latin alphabet) it's relatively simple to accomodate.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="avoid-duplicate-model-replacement-processing-">Avoid Duplicate Model Replacement Processing <a href="https://github.com/open-goal/jak-project/pull/3789" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#avoid-duplicate-model-replacement-processing-" class="hash-link" aria-label="Direct link to avoid-duplicate-model-replacement-processing-" title="Direct link to avoid-duplicate-model-replacement-processing-" translate="no">​</a></h3>
<p>Store a small database of which models have already been swapped out in a level to prevent duplicate processing.</p>
<p>Also a small fix for cases where using a model replacement that has no armature would cause merc nightmares due to only having a <code>max_bones</code> of 3.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-hiding-imgui-with-a-mouse-click-">Support Hiding ImGUI with a mouse click <a href="https://github.com/open-goal/jak-project/pull/3791" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#support-hiding-imgui-with-a-mouse-click-" class="hash-link" aria-label="Direct link to support-hiding-imgui-with-a-mouse-click-" title="Direct link to support-hiding-imgui-with-a-mouse-click-" translate="no">​</a></h3>
<p>Yet another way to hide the topbar.</p>
<p><img decoding="async" loading="lazy" alt="topbar" src="https://opengoal.dev/assets/images/topbar-059811274af6d5118faf8fd2971d6088.png" width="767" height="152" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-drawing-custom-models-for-foreground-hud-elements-">Support Drawing Custom Models for Foreground HUD Elements <a href="https://github.com/open-goal/jak-project/pull/3793" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#support-drawing-custom-models-for-foreground-hud-elements-" class="hash-link" aria-label="Direct link to support-drawing-custom-models-for-foreground-hud-elements-" title="Direct link to support-drawing-custom-models-for-foreground-hud-elements-" translate="no">​</a></h3>
<p>Add a version of <code>draw-bones-hud</code> that uses merc to support drawing foreground HUD elements that use custom models.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-animations-involving-a-full-180-degree-rotation-">Fix Animations Involving a full 180 degree Rotation <a href="https://github.com/open-goal/jak-project/pull/3794" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#fix-animations-involving-a-full-180-degree-rotation-" class="hash-link" aria-label="Direct link to fix-animations-involving-a-full-180-degree-rotation-" title="Direct link to fix-animations-involving-a-full-180-degree-rotation-" translate="no">​</a></h3>
<p>Fixes the issue with animations doing a full 180 degree rotation and disappearing. The quaternions in the GLB export "flip", and when interpolating animation frames in between a flip, we got bogus quaternions.</p>
<p>Also fix a crash in <code>goalc</code> when using merc models without any materials.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="convert-inverse-multiplication-into-division-in-decompiled-output-">Convert Inverse-Multiplication into Division in Decompiled Output <a href="https://github.com/open-goal/jak-project/pull/3795" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#convert-inverse-multiplication-into-division-in-decompiled-output-" class="hash-link" aria-label="Direct link to convert-inverse-multiplication-into-division-in-decompiled-output-" title="Direct link to convert-inverse-multiplication-into-division-in-decompiled-output-" translate="no">​</a></h3>
<p>More readable output</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improved-color-palette-generation-for-custom-levels-">Improved Color Palette Generation for Custom Levels <a href="https://github.com/open-goal/jak-project/pull/3797" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#improved-color-palette-generation-for-custom-levels-" class="hash-link" aria-label="Direct link to improved-color-palette-generation-for-custom-levels-" title="Direct link to improved-color-palette-generation-for-custom-levels-" translate="no">​</a></h3>
<p>A few improvements to color palette selection. These were made by tracing some particularly bad colors through and seeing where it made obviously bad decisions for splitting. I tested on crystal cave, and a test GLBs from Kuitar that previously had issues with alpha.</p>
<ul>
<li class="">The previous approach to splitting was based on trying to keep a tree of deduplicated colors balanced (same count in each leaf). This is not really a good idea for generating color palettes. A better approach is to try to minimize the volume of the child node, limiting how inaccurate a color can be. Splitting is now chosen based on the average of the <em>deduplicated channel values</em>, which in practice seems to work pretty well for Kuitar's levels. Other approaches could work here too.</li>
<li class="">The previous approach of alternating through dimensions to split on was kept.</li>
<li class="">The depth of the KD tree during the initial split was increased, allowing it to use up to 8192 colors, instead of just 1024.</li>
<li class="">In most cases, not all child nodes of the tree have colors in them, meaning that a tree of depth 13 would have less than 8192 colors. If this happens, child nodes are split until the color count reaches 8192. The selection of which nodes to split is somewhat arbitrary, but is breadth-first. The axis for splitting is the one with the largest range. (which might be a better idea in general?)</li>
</ul>
<p>On crystal-cave, the worst case color error was reduced from 221 to 9.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="option-to-copy-modeye-draws-from-original-model-">Option to copy mod/eye draws from Original Model <a href="https://github.com/open-goal/jak-project/pull/3800" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#option-to-copy-modeye-draws-from-original-model-" class="hash-link" aria-label="Direct link to option-to-copy-modeye-draws-from-original-model-" title="Direct link to option-to-copy-modeye-draws-from-original-model-" translate="no">​</a></h3>
<p>Two new flags were added to the Blender plugin to allow reusing the mod and/or eye draws of the original model that is being replaced. Works pretty well for eyes, but the blerc draws can cause some Z-fighting with the non-moving parts of the model.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-animation-compression-for-custom-actors-">Fix Animation Compression for Custom Actors <a href="https://github.com/open-goal/jak-project/pull/3802" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#fix-animation-compression-for-custom-actors-" class="hash-link" aria-label="Direct link to fix-animation-compression-for-custom-actors-" title="Direct link to fix-animation-compression-for-custom-actors-" translate="no">​</a></h3>
<p>Fix a missing scale factor when using the large mode in the animation compressor. This would make some joints have a translation of near 0 if the original animation had stuff moving a large distance</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improve-camera-math-">Improve Camera Math <a href="https://github.com/open-goal/jak-project/pull/3825" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#improve-camera-math-" class="hash-link" aria-label="Direct link to improve-camera-math-" title="Direct link to improve-camera-math-" translate="no">​</a></h3>
<p>I finally went through and worked out the math for the camera matrix, and improved how it works for PC rendering. I was able to finally avoid the double perspective divide issue, which I always thought would cause accuracy issues.</p>
<p>This will help tfrag, tie (no envmap), shrub, and hfrag have less z-fighting in cases where the camera and the thing you're looking at are pretty close, but the entire level is far from the origin - like jak 3 temple. I was able to modify the camera matrix so we don't have to do all the weird scaling/addition in the shader.</p>
<p>Here's a screenshot from the temple oracle checkpoint, cropped from 4k. This used to have a lot of fighting issues.</p>
<p><img decoding="async" loading="lazy" alt="image" src="https://opengoal.dev/assets/images/camera-5dad773dfbee536e2e9527358d290021.png" width="358" height="420" class="img_ev3q"></p>
<p>It doesn't help issues where the thing you're looking at is very far away (jak 1 mountains, some jak 2 city stuff). It also doesn't help with jak's skirt/scarf, since those use a different renderer.</p>
<p>There's definitely more to do here, but this is a good starting point and proof that I can at least figure out the math.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="increase-print-buffer-and-check-size-">Increase Print Buffer and Check Size <a href="https://github.com/open-goal/jak-project/pull/3826" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#increase-print-buffer-and-check-size-" class="hash-link" aria-label="Direct link to increase-print-buffer-and-check-size-" title="Direct link to increase-print-buffer-and-check-size-" translate="no">​</a></h3>
<p>This should fix the crash when entering the freedom HQ elevator. It was caused by a large number of prints, one for each process in the city being killed by <code>check-for-rougue-process</code>, which would overflow the print buffer. So I increased the print buffer.</p>
<p>Detecting buffer overflow here is hard because lots of things are allowed to write to it, including the user's GOAL print methods. I added a basic check that will assert when there's 1k or less space in the buffer. It won't catch every overflow, but it would have caught this one.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2-and-jak-3">Jak 2 and Jak 3<a href="https://opengoal.dev/blog/progress-report-dec-2024#jak-2-and-jak-3" class="hash-link" aria-label="Direct link to Jak 2 and Jak 3" title="Direct link to Jak 2 and Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="unstretch-sun-and-moon-">Unstretch Sun and Moon <a href="https://github.com/open-goal/jak-project/pull/3822" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#unstretch-sun-and-moon-" class="hash-link" aria-label="Direct link to unstretch-sun-and-moon-" title="Direct link to unstretch-sun-and-moon-" translate="no">​</a></h3>
<p>Fix the issue where the moon gets wide when using PC aspect ratios</p>
<p><img decoding="async" loading="lazy" alt="stretch" src="https://opengoal.dev/assets/images/stretch-6655ed4b9d66db896e0cb1ade45b56f8.png" width="2036" height="712" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-dec-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-cloth-disappearing-after-600-orbs-">Fix Cloth Disappearing after 600 Orbs <a href="https://github.com/open-goal/jak-project/pull/3790" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#fix-cloth-disappearing-after-600-orbs-" class="hash-link" aria-label="Direct link to fix-cloth-disappearing-after-600-orbs-" title="Direct link to fix-cloth-disappearing-after-600-orbs-" translate="no">​</a></h3>
<p>After collecting 600 orbs, cloth systems that didn't have any <code>alt-tex-name</code>s defined would vanish because the <code>static-cloth-params</code> macro doesn't default them to <code>#f</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-missing-shadows-on-light-jak-wings-">Fix Missing Shadows on Light Jak Wings <a href="https://github.com/open-goal/jak-project/pull/3803" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#fix-missing-shadows-on-light-jak-wings-" class="hash-link" aria-label="Direct link to fix-missing-shadows-on-light-jak-wings-" title="Direct link to fix-missing-shadows-on-light-jak-wings-" translate="no">​</a></h3>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="adjust-overlord-spu-dma-to-avoid-audio-hangs-">Adjust Overlord SPU DMA to Avoid Audio Hangs <a href="https://github.com/open-goal/jak-project/pull/3804" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#adjust-overlord-spu-dma-to-avoid-audio-hangs-" class="hash-link" aria-label="Direct link to adjust-overlord-spu-dma-to-avoid-audio-hangs-" title="Direct link to adjust-overlord-spu-dma-to-avoid-audio-hangs-" translate="no">​</a></h3>
<p>Change jak 3 SPU DMA to run the interrupt handler "immediately" (or at least before <code>DMA_SendToSPUAndSync</code> returns).</p>
<p>This fixes an issue where audio can hang during fast cutscene playback. I'm hoping it fixes more issues with looping/stuck audio as well, but this needs more testing.</p>
<p>I originally wanted to do it this way, but thought that it didn't work - from Jak 2 it seemed like things broke if the DMA was too fast. But, at least for Jak 3, everything seems to work like this. This will remove a huge source of non-deterministic timing in audio stuff and hopefully make things easier to debug. It also means that a large portion of streaming audio code will never have to run - from the game's point of view there's always the next SPU buffer available.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-issue-where-vag-streams-never-queue-">Fix issue where VAG Streams Never Queue <a href="https://github.com/open-goal/jak-project/pull/3805" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#fix-issue-where-vag-streams-never-queue-" class="hash-link" aria-label="Direct link to fix-issue-where-vag-streams-never-queue-" title="Direct link to fix-issue-where-vag-streams-never-queue-" translate="no">​</a></h3>
<p>Accidentally incrementing <code>s</code> twice in the loop, so queued streams in slot 1, and 3 were skipped by the overlord.
This would usually cause the audio to never start playing because the game would wait for the audio to successfully get queued.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="workaround-language-setting-issue-">Workaround Language Setting Issue <a href="https://github.com/open-goal/jak-project/pull/3818" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#workaround-language-setting-issue-" class="hash-link" aria-label="Direct link to workaround-language-setting-issue-" title="Direct link to workaround-language-setting-issue-" translate="no">​</a></h3>
<p>In Jak 3, the default PC settings file would have a language of 255 because it runs before the first settings update. This would cause the game to crash the second time it is started.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="update-texture-remap-table-">Update texture remap table <a href="https://github.com/open-goal/jak-project/pull/3821" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#update-texture-remap-table-" class="hash-link" aria-label="Direct link to update-texture-remap-table-" title="Direct link to update-texture-remap-table-" translate="no">​</a></h3>
<p>Jak 2 and 3 use this annoying trick where they store multiple images in the same texture by just changing the CLUT. This breaks some PC code because those two textures will have the same TBP address. so there's a table of remaps to fix this, generated by the decompiler. Unfortunately, I generated that table before the decompiler loaded the .STR file with these textures, so it was missing the remaps. This is automatically generated in the texture folder when you run the decompiler - I just copied it to the C++ file.</p>
<p><img decoding="async" loading="lazy" alt="texture" src="https://opengoal.dev/assets/images/texture-3c5c952827ee50eb732688196add1315.png" width="785" height="495" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-cloth-nans-">Fix Cloth NaNs <a href="https://github.com/open-goal/jak-project/pull/3827" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-dec-2024#fix-cloth-nans-" class="hash-link" aria-label="Direct link to fix-cloth-nans-" title="Direct link to fix-cloth-nans-" translate="no">​</a></h3>
<p>Kind of silly fix.</p>
<p>The cloth update function sometimes runs before the "setup" is done (<code>need-setup</code> is set), which divides by zero in a bunch of places. This fix prevents NaNs from spreading during this time.</p>]]></content>
        <author>
            <name>Vaser</name>
            <uri>https://github.com/xTVaser</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - November 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-nov-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-nov-2024"/>
        <updated>2024-11-30T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[November 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Wouldn't you know it, more Jak 3 fixes!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-nov-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.20</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_l16ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_l16ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-nov-2024#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want to play these mods, follow the instructions <a href="https://jakmods.dev/" target="_blank" rel="noopener noreferrer" class="">here</a> to set up the mod list for the OpenGOAL launcher.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-the-chicken">Jak The Chicken<a href="https://opengoal.dev/blog/progress-report-nov-2024#jak-the-chicken" class="hash-link" aria-label="Direct link to Jak The Chicken" title="Direct link to Jak The Chicken" translate="no">​</a></h3>
<p>Jak the Chicken, a mod that brings the gameplay mechanics and levels from the PS1 game "Mort the Chicken" to Jak, is not a new mod, but it has recently taken the Jak speedrunning community by storm after a couple of big updates by author Zed, which included tons of bug fixes and a facelift for all the levels. The short length and replayability make for a highly movement focused run with little room for mistakes or to catch your breath. Since the end of October, the Any% time has been lowered from ~11m all the way to 9m28s and counting.</p>
<p>There is also an open tournament going on that was recently announced and even has a small cash prize pool for the top 3 finalists. If you are interested, you can check out the latest announcement in the <a href="https://discord.gg/NYfqndF" target="_blank" rel="noopener noreferrer" class="">Jak Racing Discord</a> for more information on how to register. Ricky also has a good tutorial video for the Any% route if you want to learn:</p>
<!--$?--><template id="B:0"></template><!--/$-->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-nov-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-crash-with-long-filenames-">Fix Crash With Long Filenames <a href="https://github.com/open-goal/jak-project/pull/3771" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-crash-with-long-filenames-" class="hash-link" aria-label="Direct link to fix-crash-with-long-filenames-" title="Direct link to fix-crash-with-long-filenames-" translate="no">​</a></h3>
<p>If the game was installed in a really long file path (128+ characters) and tried to access files in that path (e.g. from reading/writing to the settings file), the game could crash due to a buffer overflow as there was only space for 128 characters in the character buffer.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-apple-silicon-via-rosetta-2-">Support Apple Silicon Via Rosetta 2 <a href="https://github.com/open-goal/jak-project/pull/3754" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#support-apple-silicon-via-rosetta-2-" class="hash-link" aria-label="Direct link to support-apple-silicon-via-rosetta-2-" title="Direct link to support-apple-silicon-via-rosetta-2-" translate="no">​</a></h3>
<p>Apple's compatibility layer for running x86 applications, Rosetta 2, has received AVX2 support in macOS Sequoia, meaning that after some updates to our CPU checking code, it is now possible to run OpenGOAL on Apple silicon devices via Rosetta 2.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-fullscreen-on-macos-">Fix Fullscreen On macOS <a href="https://github.com/open-goal/jak-project/pull/3756" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-fullscreen-on-macos-" class="hash-link" aria-label="Direct link to fix-fullscreen-on-macos-" title="Direct link to fix-fullscreen-on-macos-" translate="no">​</a></h3>
<p>Due to an issue with high DPI screens, turning on fullscreen on macOS would cause the game to be displayed in a small area inside the game window.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-texture-macro-for-jak-1-and-jak-2-"><code>get-texture</code> Macro For Jak 1 and Jak 2 <a href="https://github.com/open-goal/jak-project/pull/3778" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#get-texture-macro-for-jak-1-and-jak-2-" class="hash-link" aria-label="Direct link to get-texture-macro-for-jak-1-and-jak-2-" title="Direct link to get-texture-macro-for-jak-1-and-jak-2-" translate="no">​</a></h3>
<p>The <code>get-texture</code> macro added during the decompilation of Jak 3 has been backported to Jak 1 and 2's codebase. A database of every texture and texture page in the game is built during asset extraction, which is then used to turn code like this:</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">set!</span><span class="token plain"> </span><span class="token symbol">*font-texture*</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">lookup-texture-by-id</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token reader-macro operator" style="color:rgb(212, 212, 212)">'</span><span class="token symbol">static</span><span class="token plain"> </span><span class="token reader-macro operator" style="color:rgb(212, 212, 212)">'</span><span class="token symbol">texture-id</span><span class="token plain"> :</span><span class="token symbol">index</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">#x1</span><span class="token plain"> :</span><span class="token symbol">page</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">#x4fe</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<p>Into:</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">set!</span><span class="token plain"> </span><span class="token symbol">*font-texture*</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">get-texture</span><span class="token plain"> </span><span class="token symbol">ascii.12lo</span><span class="token plain"> </span><span class="token symbol">gamefontnew</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<p>The <code>defpart</code> macro was also adjusted to support this:</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">defpart</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">304</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  :</span><span class="token symbol">init-specs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">:</span><span class="token symbol">texture</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token reader-macro operator" style="color:rgb(212, 212, 212)">'</span><span class="token symbol">static</span><span class="token plain"> </span><span class="token reader-macro operator" style="color:rgb(212, 212, 212)">'</span><span class="token symbol">texture-id</span><span class="token plain"> :</span><span class="token symbol">page</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">#x2</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">:</span><span class="token symbol">num</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token symbol">...</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">defpart</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">304</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  :</span><span class="token symbol">init-specs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">:</span><span class="token symbol">texture</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">bigpuff</span><span class="token plain"> </span><span class="token symbol">effects</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">:</span><span class="token symbol">num</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1.0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token symbol">...</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-models">Custom Models<a href="https://opengoal.dev/blog/progress-report-nov-2024#custom-models" class="hash-link" aria-label="Direct link to Custom Models" title="Direct link to Custom Models" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="environment-mapping-support----">Environment Mapping Support <a href="https://github.com/open-goal/jak-project/pull/3777" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3782" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3784" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3785" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#environment-mapping-support----" class="hash-link" aria-label="Direct link to environment-mapping-support----" title="Direct link to environment-mapping-support----" translate="no">​</a></h3>
<p>It is now possible to apply environment mapping effects to materials to give models a shiny effect. Works with model replacements and custom actors.</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/envmap-b04436f58137c4440436370cfdca64d1.mp4" controls=""></video><!--/$-->
<p><img decoding="async" loading="lazy" alt="Custom model envmap" src="https://opengoal.dev/assets/images/envmap-b9a1295d1063a8f0ccacccbd01bd5c35.png" width="1625" height="1393" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="allow-custom-bone-weights-">Allow Custom Bone Weights <a href="https://github.com/open-goal/jak-project/pull/3761" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#allow-custom-bone-weights-" class="hash-link" aria-label="Direct link to allow-custom-bone-weights-" title="Direct link to allow-custom-bone-weights-" translate="no">​</a></h3>
<p>With a new flag in the OpenGOAL Blender plugin, it is now possible to use custom bone weights to improve the look of model replacements.</p>
<!--$?--><template id="B:1"></template><!--/$-->
<p><img decoding="async" loading="lazy" alt="Custom Bone Weights" src="https://opengoal.dev/assets/images/custom-bone-weights-2e1bc47c59124faf1b28d4f17932cf2d.png" width="1033" height="1133" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-nov-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-precd-extraction-">Fix <code>precd</code> Extraction <a href="https://github.com/open-goal/jak-project/pull/3744" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-precd-extraction-" class="hash-link" aria-label="Direct link to fix-precd-extraction-" title="Direct link to fix-precd-extraction-" translate="no">​</a></h3>
<p>A bug in the background geometry data for <code>precd</code>, the Dark Ship hangar area, was causing the level extraction to fail. With this, every level in the game is now accessible!</p>
<p><img decoding="async" loading="lazy" alt="Dark Ship Hangar" src="https://opengoal.dev/assets/images/precd-44d379c469e67d749f704df323ca6276.png" width="3840" height="2160" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-for-ocean-crash-">Fix For Ocean Crash <a href="https://github.com/open-goal/jak-project/pull/3746" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-for-ocean-crash-" class="hash-link" aria-label="Direct link to fix-for-ocean-crash-" title="Direct link to fix-for-ocean-crash-" translate="no">​</a></h3>
<p>Rarely, when a level was being loaded, the game would crash somewhere in the graphics code for the ocean renderer. This was very consistent when using the warp gate after getting Light Jak Heal. This turned out to be a four year old bug that has miraculously never caused issues until now, where DMA transfer sizes would be considered to be 12 bits in size instead of 16 bits.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="port-of-jak-2-subtitle-system-">Port of Jak 2 Subtitle System <a href="https://github.com/open-goal/jak-project/pull/3758" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#port-of-jak-2-subtitle-system-" class="hash-link" aria-label="Direct link to port-of-jak-2-subtitle-system-" title="Direct link to port-of-jak-2-subtitle-system-" translate="no">​</a></h3>
<p>The improved subtitle system that we added in Jak 2, with support for non-cutscene subtitles, color-coded speaker names, etc. was brought over to Jak 3. Even excluding cutscenes, Jak 3 has <strong>a LOT</strong> of text (and tons and tons of unused voice lines as well), so transcribing all of that is going to take a while.</p>
<p><img decoding="async" loading="lazy" alt="Color-coded speaker names in subtitles" src="https://opengoal.dev/assets/images/subtitle3-20a015d4a7f6dead0b74756c8245a500.png" width="3835" height="2159" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="speedrunner-mode-">Speedrunner Mode <a href="https://github.com/open-goal/jak-project/pull/3761" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#speedrunner-mode-" class="hash-link" aria-label="Direct link to speedrunner-mode-" title="Direct link to speedrunner-mode-" translate="no">​</a></h3>
<p>Speedrunner mode has been ported over to Jak 3.</p>
<p><img decoding="async" loading="lazy" alt="Speedrunner Mode Menu" src="https://opengoal.dev/assets/images/speedrunner-mode-44f67b39b526afc4c336fa1be5c6e974.png" width="3834" height="2158" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-highres-sky-">Add Highres Sky <a href="https://github.com/open-goal/jak-project/pull/3761" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#add-highres-sky-" class="hash-link" aria-label="Direct link to add-highres-sky-" title="Direct link to add-highres-sky-" translate="no">​</a></h3>
<p>Another feature brought over from Jak 2, the high resolution sky texture animations have been added to Jak 3.</p>
<p><img decoding="async" loading="lazy" alt="Highres Sky Day" src="https://opengoal.dev/assets/images/highres-sky-day-e91b354ffedb3160c90136c005ad3963.png" width="2560" height="1440" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Highres Sky Night" src="https://opengoal.dev/assets/images/highres-sky-night-2c3c25c38fadb2711b300721ee85803f.png" width="2560" height="1440" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-soundbank-unloading-">Fix Soundbank Unloading <a href="https://github.com/open-goal/jak-project/pull/3762" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-soundbank-unloading-" class="hash-link" aria-label="Direct link to fix-soundbank-unloading-" title="Direct link to fix-soundbank-unloading-" translate="no">​</a></h3>
<p>Fixed an issue with unloading soundbanks, which was the cause of a couple of issues, like the blue gun variants using the wrong sounds from each other.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-marauder-spawns-">Fix Marauder Spawns <a href="https://github.com/open-goal/jak-project/pull/3765" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-marauder-spawns-" class="hash-link" aria-label="Direct link to fix-marauder-spawns-" title="Direct link to fix-marauder-spawns-" translate="no">​</a></h3>
<p>Marauders would often spawn halfway clipped into the ground and in other weird spots due to a decompilation mistake.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-intro-crash-">Fix Intro Crash <a href="https://github.com/open-goal/jak-project/pull/3770" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-intro-crash-" class="hash-link" aria-label="Direct link to fix-intro-crash-" title="Direct link to fix-intro-crash-" translate="no">​</a></h3>
<p>After watching the intro cutscene all the way to the end, the game would crash as soon as it transitions to displaying the title screen.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-ragdolls-settling-too-early-">Fix Ragdolls Settling Too Early <a href="https://github.com/open-goal/jak-project/pull/3775" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-ragdolls-settling-too-early-" class="hash-link" aria-label="Direct link to fix-ragdolls-settling-too-early-" title="Direct link to fix-ragdolls-settling-too-early-" translate="no">​</a></h3>
<p>A small decompilation error was causing ragdolls to be considered "settled" too early.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-some-background-textures-">Fix Some Background Textures <a href="https://github.com/open-goal/jak-project/pull/3777" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-some-background-textures-" class="hash-link" aria-label="Direct link to fix-some-background-textures-" title="Direct link to fix-some-background-textures-" translate="no">​</a></h3>
<p>Some background elements in levels had missing textures, on OpenGOAL, this would manifest by using the texture in texture slot 0, which happens to be the default eye texture, resulting in this:</p>
<p><img decoding="async" loading="lazy" alt="The Hills Have Eyes" src="https://opengoal.dev/assets/images/tfrag-eyes-1e11f6f28d7310de5789c928493938d2.png" width="1935" height="1341" class="img_ev3q">
<img decoding="async" loading="lazy" alt="More Eyes" src="https://opengoal.dev/assets/images/tfrag-eyes1-f1bf92c2e8ea5b6d27c38a2ee0584b80.png" width="2353" height="1225" class="img_ev3q"></p>
<p>On the original PS2, it looked like this:</p>
<p><img decoding="async" loading="lazy" alt="Rocks" src="https://opengoal.dev/assets/images/tfrag-pcsx2-2f0a3e9ff0b42e8eb595b67e949db776.png" width="2029" height="1351" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Fort" src="https://opengoal.dev/assets/images/tfrag-pcsx2-1-d91f32ed26e89bc29e4afa83fc46af82.png" width="2371" height="1275" class="img_ev3q"></p>
<p>We changed it to use suitable replacements:</p>
<p><img decoding="async" loading="lazy" alt="Fixed Rock Textures" src="https://opengoal.dev/assets/images/tfrag-fixed-08b9b985af69e24330c2c47cb448305b.png" width="1636" height="1188" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Fixed Fort" src="https://opengoal.dev/assets/images/tfrag-fixed1-259dba38ccd85663059f3c903bf6a881.png" width="3840" height="2160" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-music-not-pausing-">Fix Music Not Pausing <a href="https://github.com/open-goal/jak-project/pull/3783" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2024#fix-music-not-pausing-" class="hash-link" aria-label="Direct link to fix-music-not-pausing-" title="Direct link to fix-music-not-pausing-" translate="no">​</a></h3>
<p>Music now pauses correctly when entering the progress menu or select pausing.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - October 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-oct-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-oct-2024"/>
        <updated>2024-11-01T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[October 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Yet more fixes for Jak 3 and custom levels.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-oct-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.18</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-oct-2024#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want to play these mods, follow the instructions <a href="https://jakmods.dev/" target="_blank" rel="noopener noreferrer" class="">here</a> to set up the mod list for the OpenGOAL launcher.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="platformia">Platformia<a href="https://opengoal.dev/blog/progress-report-oct-2024#platformia" class="hash-link" aria-label="Direct link to Platformia" title="Direct link to Platformia" translate="no">​</a></h3>
<p>Grateful Forest's first mod, Platformia, was released earlier this month. It's a challenge mod featuring lots and lots of platforms moving in mesmerizing paths and your goal is to get to the top!</p>
<p><img decoding="async" loading="lazy" alt="Platformia" src="https://opengoal.dev/assets/images/platformia-20e6ece111e1f063530df676f399db82.png" width="800" height="540" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="orb-hunt-updated-for-tfl-chapter-2">Orb Hunt Updated for TFL Chapter 2<a href="https://opengoal.dev/blog/progress-report-oct-2024#orb-hunt-updated-for-tfl-chapter-2" class="hash-link" aria-label="Direct link to Orb Hunt Updated for TFL Chapter 2" title="Direct link to Orb Hunt Updated for TFL Chapter 2" translate="no">​</a></h3>
<p>Barg's Orb Hunt mod has been updated to include the two levels that were added in the second chapter of Kuitar's Forgotten Lands, Crescent Top and Energy Bay.</p>
<p><img decoding="async" loading="lazy" alt="TFL" src="https://opengoal.dev/assets/images/tfl-orb-hunt-21667071e1dcc8201ea8ea311f0cf12e.png" width="2000" height="1125" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-and-daxter---the-halloween-legacy">Jak and Daxter - The Halloween Legacy<a href="https://opengoal.dev/blog/progress-report-oct-2024#jak-and-daxter---the-halloween-legacy" class="hash-link" aria-label="Direct link to Jak and Daxter - The Halloween Legacy" title="Direct link to Jak and Daxter - The Halloween Legacy" translate="no">​</a></h3>
<p>Just in time for Halloween, Clanque has released their Halloween themed overhaul of Jak 1, featuring plenty of spooky model and texture replacements for the entire game. Check out the trailer!</p>
<p><img decoding="async" loading="lazy" alt="Halloween Legacy" src="https://opengoal.dev/assets/images/halloween-legacy-06e155732818d75aaec9795cfb132866.png" width="800" height="540" class="img_ev3q"></p>
<!--$?--><template id="B:0"></template><!--/$-->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-oct-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add---iso-path-parameter-for-goalc-">Add <code>--iso-path</code> Parameter for <code>goalc</code> <a href="https://github.com/open-goal/jak-project/pull/3692" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#add---iso-path-parameter-for-goalc-" class="hash-link" aria-label="Direct link to add---iso-path-parameter-for-goalc-" title="Direct link to add---iso-path-parameter-for-goalc-" translate="no">​</a></h3>
<p>The compiler can now be given a custom ISO path with the new <code>--iso-path</code> command line parameter.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-levels">Custom Levels<a href="https://opengoal.dev/blog/progress-report-oct-2024#custom-levels" class="hash-link" aria-label="Direct link to Custom Levels" title="Direct link to Custom Levels" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-compressed-glb-files-">Support for Compressed GLB Files <a href="https://github.com/open-goal/jak-project/pull/3723" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#support-for-compressed-glb-files-" class="hash-link" aria-label="Direct link to support-for-compressed-glb-files-" title="Direct link to support-for-compressed-glb-files-" translate="no">​</a></h3>
<p>Custom levels now support using compressed GLB files by utilizing Google's <a href="https://google.github.io/draco/" target="_blank" rel="noopener noreferrer" class="">Draco Library</a> for 3D model compression, saving tons of space.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="miscellaneous-bug-fixes-">Miscellaneous Bug Fixes <a href="https://github.com/open-goal/jak-project/pull/3736" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#miscellaneous-bug-fixes-" class="hash-link" aria-label="Direct link to miscellaneous-bug-fixes-" title="Direct link to miscellaneous-bug-fixes-" translate="no">​</a></h3>
<ul>
<li class="">Metallic textures will now be resized automatically to match the base color's texture size.</li>
<li class="">Fix cases with bad vertex colors/alphas in certain spots.</li>
<li class="">When changing scale on some objects in Blender, the length of exported normals would sometimes be wrong, so they are now normalized first.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-oct-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="make-turret-controls-respect-camera-settings-">Make Turret Controls Respect Camera Settings <a href="https://github.com/open-goal/jak-project/pull/3715" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#make-turret-controls-respect-camera-settings-" class="hash-link" aria-label="Direct link to make-turret-controls-respect-camera-settings-" title="Direct link to make-turret-controls-respect-camera-settings-" translate="no">​</a></h3>
<p>After entering a gunpod, the camera will now use the correct settings as defined in the Camera Options menu.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-oct-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<p>We're getting close to fixing all of the (known) remaining graphics issues. This month, most of the bug fixes revolved around fixing or implementing missing/broken graphics features.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-maker-projectile-flashing-">Fix <code>maker</code> Projectile Flashing <a href="https://github.com/open-goal/jak-project/pull/3702" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#fix-maker-projectile-flashing-" class="hash-link" aria-label="Direct link to fix-maker-projectile-flashing-" title="Direct link to fix-maker-projectile-flashing-" translate="no">​</a></h3>
<p>Due to a bad rotation value, whenever a projectile from one of the Dark Makers during the Defend Spargus mission was visible, a nauseating effect would be drawn over the screen.</p>
<div class="theme-admonition theme-admonition-danger admonition_xJq3 alert alert--danger"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>danger</div><div class="admonitionContent_BuS1"><p>EPILEPSY WARNING</p><!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/maker-projectile-a707093d697f12b6e35e5487e18bf18e.webm" controls=""></video><!--/$--></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-envmap-texture-">Fix Envmap Texture <a href="https://github.com/open-goal/jak-project/pull/3704" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#fix-envmap-texture-" class="hash-link" aria-label="Direct link to fix-envmap-texture-" title="Direct link to fix-envmap-texture-" translate="no">​</a></h3>
<p>Merc models were using the wrong default texture for their environment mapping effect.</p>
<p><img decoding="async" loading="lazy" alt="Envmap Texture Fix" src="https://opengoal.dev/assets/images/envmap-fix-9ccc056fe926feddd3303bb0b6afb2b2.png" width="408" height="439" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="merc-fade-support-">Merc Fade Support <a href="https://github.com/open-goal/jak-project/pull/3710" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#merc-fade-support-" class="hash-link" aria-label="Direct link to merc-fade-support-" title="Direct link to merc-fade-support-" translate="no">​</a></h3>
<p>"Merc Fade" is a transparency effect on foreground models, used for example to make Jak invisible when interacting with a Dark Maker idol.</p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/merc-fade-30c3bc5fd42e557a4972bcb1639b6562.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-kleever-diaper-secret-">Fix <code>kleever-diaper</code> Secret <a href="https://github.com/open-goal/jak-project/pull/3713" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#fix-kleever-diaper-secret-" class="hash-link" aria-label="Direct link to fix-kleever-diaper-secret-" title="Direct link to fix-kleever-diaper-secret-" translate="no">​</a></h3>
<p>A small decompilation error resulted in the "Kleiver's Diaper" secret not working as intended.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-bigmap-player-cursor-texture-">Fix <code>bigmap</code> Player Cursor Texture <a href="https://github.com/open-goal/jak-project/pull/3721" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#fix-bigmap-player-cursor-texture-" class="hash-link" aria-label="Direct link to fix-bigmap-player-cursor-texture-" title="Direct link to fix-bigmap-player-cursor-texture-" translate="no">​</a></h3>
<p>The texture for the player cursor on the world map now shows up properly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-neo-sat-particles-and-ropes-">Fix <code>neo-sat</code> Particles and Ropes <a href="https://github.com/open-goal/jak-project/pull/3722" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#fix-neo-sat-particles-and-ropes-" class="hash-link" aria-label="Direct link to fix-neo-sat-particles-and-ropes-" title="Direct link to fix-neo-sat-particles-and-ropes-" translate="no">​</a></h3>
<p>During the Dark Satellite fight in the desert, the particle effect when it smashes into the ground and the ropes were not drawing correctly.</p>
<p><img decoding="async" loading="lazy" alt="Satellite Ropes" src="https://opengoal.dev/assets/images/neosat-ropes-bde9d8152a030c0474819fdb24841eee.png" width="3840" height="2160" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="texture-animation-fixes---">Texture Animation Fixes <a href="https://github.com/open-goal/jak-project/pull/3732" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3734" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3735" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2024#texture-animation-fixes---" class="hash-link" aria-label="Direct link to texture-animation-fixes---" title="Direct link to texture-animation-fixes---" translate="no">​</a></h3>
<p>The last of the remaining bugs with texture animations have been squashed, these include:</p>
<ul>
<li class="">Missing glider ring texture animation.</li>
<li class="">Missing War Factory conveyor texture animation.</li>
<li class="">Some special eye texture animations would not show up, like the Dark Jak eye effect in cutscenes.</li>
<li class="">Texture animations that were using a size override would show up as black while not being animated.</li>
</ul>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/glider-ring-a817acdad8fb04e0a67148b7c3e564b9.mp4" controls=""></video><!--/$-->
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/tie-texture-anim-87d14e1c16b5ca63f20e3b62d56c7da2.mp4" controls=""></video><!--/$-->
<p><img decoding="async" loading="lazy" alt="Black Texture Animation Fixed" src="https://opengoal.dev/assets/images/tex-anim-black-fix-c891b097e76d556aad7f29ac8aafafeb.png" width="630" height="465" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Dark Jak Eye Texture Fixed" src="https://opengoal.dev/assets/images/clut-blender-anim-fix-d04697fe7e2347093a45b3474dae09de.png" width="1173" height="753" class="img_ev3q"></p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - September 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-sept-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-sept-2024"/>
        <updated>2024-09-30T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[September 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Plenty of small Jak 3 bugfixes and some custom level improvements.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-sept-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.17</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-sept-2024#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="overgrown">Overgrown<a href="https://opengoal.dev/blog/progress-report-sept-2024#overgrown" class="hash-link" aria-label="Direct link to Overgrown" title="Direct link to Overgrown" translate="no">​</a></h3>
<p>Cuttlefish (author of <a href="https://www.youtube.com/watch?v=hrH-foTn0IQ" target="_blank" rel="noopener noreferrer" class="">Rockpool</a> and <a href="https://www.youtube.com/watch?v=oWSa9BEHGFo" target="_blank" rel="noopener noreferrer" class="">River to Water</a>) has just released their newest custom level project, "Overgrown". You can play it via the official launcher if you have the mod list set up (instructions <a href="https://jakmods.dev/" target="_blank" rel="noopener noreferrer" class="">here</a>).</p>
<p>Watch the trailer here:</p>
<!--$?--><template id="B:0"></template><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="big-teamruns-update">Big TeamRuns Update<a href="https://opengoal.dev/blog/progress-report-sept-2024#big-teamruns-update" class="hash-link" aria-label="Direct link to Big TeamRuns Update" title="Direct link to Big TeamRuns Update" translate="no">​</a></h3>
<p><a href="https://teamruns.web.app/" target="_blank" rel="noopener noreferrer" class="">TeamRuns</a>, the Jak 1 online multiplayer mod, just got a substantial update.</p>
<p>Up until now, it was based on an extremely old version of OpenGOAL, but has now been rebased on the most recent vanilla release, meaning it can now enjoy over a year of progress that has been made since, which should help a bit with things like performance.</p>
<p>Alongside that, a bunch of TeamRuns exclusive bugs were fixed and a couple of new features were added, such as a taunt menu, which allows you to play a small selection of voice lines to other players, and the ability to downpatch to older versions of both the game and the TeamRuns client.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-sept-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-normals-from-custom-model-in-model-replacement-">Use Normals From Custom Model in Model Replacement <a href="https://github.com/open-goal/jak-project/pull/3649" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#use-normals-from-custom-model-in-model-replacement-" class="hash-link" aria-label="Direct link to use-normals-from-custom-model-in-model-replacement-" title="Direct link to use-normals-from-custom-model-in-model-replacement-" translate="no">​</a></h3>
<p>Custom model replacements will now use the normals from the custom model instead of the model they were replacing, which should make the replacements look much better.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-levels">Custom Levels<a href="https://opengoal.dev/blog/progress-report-sept-2024#custom-levels" class="hash-link" aria-label="Direct link to Custom Levels" title="Direct link to Custom Levels" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improvements-to-background-geometry-">Improvements to Background Geometry <a href="https://github.com/open-goal/jak-project/pull/3672" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#improvements-to-background-geometry-" class="hash-link" aria-label="Direct link to improvements-to-background-geometry-" title="Direct link to improvements-to-background-geometry-" translate="no">​</a></h3>
<p>Custom levels got support for a bunch of new features for the background geometry.
It is now possible to use transparent textures and alpha for vertex colors. You can also use environment maps on models by using a specific Blender material setup to give them a shiny look.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-vanilla-level-skies-and-textures-on-generic-objects-">Support for Vanilla Level Skies and Textures on <code>generic</code> Objects <a href="https://github.com/open-goal/jak-project/pull/3691" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#support-for-vanilla-level-skies-and-textures-on-generic-objects-" class="hash-link" aria-label="Direct link to support-for-vanilla-level-skies-and-textures-on-generic-objects-" title="Direct link to support-for-vanilla-level-skies-and-textures-on-generic-objects-" translate="no">​</a></h3>
<p>It is now possible to add vanilla skies to custom levels and to get proper textures for objects that are rendered with <code>generic</code>, like dark eco pools or dying enemies.</p>
<p><img decoding="async" loading="lazy" alt="Sky and &amp;quot;generic&amp;quot; textures" src="https://opengoal.dev/assets/images/sky-and-generic-textures-78b2363aa37b59327aeea6afca4f6269.png" width="1915" height="1079" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-sept-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="english-subtitle-fixes-">English Subtitle Fixes <a href="https://github.com/open-goal/jak-project/pull/3665" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#english-subtitle-fixes-" class="hash-link" aria-label="Direct link to english-subtitle-fixes-" title="Direct link to english-subtitle-fixes-" translate="no">​</a></h3>
<p>The timings and length of some of the English subtitles were adjusted to better line up with the audio.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="workaround-to-fix-sounds-getting-cut-off-">Workaround to Fix Sounds Getting Cut Off <a href="https://github.com/open-goal/jak-project/pull/3660" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#workaround-to-fix-sounds-getting-cut-off-" class="hash-link" aria-label="Direct link to workaround-to-fix-sounds-getting-cut-off-" title="Direct link to workaround-to-fix-sounds-getting-cut-off-" translate="no">​</a></h3>
<p>A longstanding issue since the first release of Jak 2. Most prominently occurring in the Gun Course, sounds would abruptly be cut off after a while.</p>
<p>Now, if too many sounds are playing, older sounds will be removed, which should prevent this issue from occurring.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-sept-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="subtitle-text-fix-">Subtitle Text Fix <a href="https://github.com/open-goal/jak-project/pull/3625" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#subtitle-text-fix-" class="hash-link" aria-label="Direct link to subtitle-text-fix-" title="Direct link to subtitle-text-fix-" translate="no">​</a></h3>
<p>The subtitle text in cutscenes will now display.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="progress-menu-crash-fix-bigmap-">Progress Menu Crash Fix, <code>bigmap</code> <a href="https://github.com/open-goal/jak-project/pull/3657" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#progress-menu-crash-fix-bigmap-" class="hash-link" aria-label="Direct link to progress-menu-crash-fix-bigmap-" title="Direct link to progress-menu-crash-fix-bigmap-" translate="no">​</a></h3>
<p>The progress/pause menu no longer crashes when selecting any of the options, which means you can now restart mission, save and load, etc. It still needs some work on the graphics side and the "PC port treatment" to make it easier to modify in the future.</p>
<p>Along with this, <code>bigmap</code> has been decompiled, which was the last big remaining critical file, used for the world map in the progress menu.</p>
<p><img decoding="async" loading="lazy" alt="Progress Menu Inventory" src="https://opengoal.dev/assets/images/progress-0a205e6b25292cab1737d6c6c3f6f815.png" width="1440" height="1080" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="World Map" src="https://opengoal.dev/assets/images/bigmap-686bdf4948070a2460f2a55720817d1a.png" width="1441" height="1079" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-collision-nans--">Fix Collision <code>NaN</code>s <a href="https://github.com/open-goal/jak-project/pull/3674" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3686" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#fix-collision-nans--" class="hash-link" aria-label="Direct link to fix-collision-nans--" title="Direct link to fix-collision-nans--" translate="no">​</a></h3>
<p>There is some collision code that will end up dividing by zero on the first frame that an object is spawned as its bones are still uninitialized. On PS2, this would just give you <code>0</code> and send the object to the origin for a frame until it's fully initialized. On PC, however, dividing by zero is not handled the same way, and it results in the propagation of <code>NaN</code>s everywhere.</p>
<p>This fixes:</p>
<ul>
<li class="">Bombbot bombs not spawning</li>
<li class=""><code>mh-wasp</code>s not spawning in the Sewer levels</li>
<li class="">Some cutscenes being started too early</li>
<li class="">The Temple Watchers' position would become <code>NaN</code> after firing their laser at Jak.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-artifact-race-voice-lines-and-crash-">Fix Artifact Race Voice Lines and Crash <a href="https://github.com/open-goal/jak-project/pull/3686" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-sept-2024#fix-artifact-race-voice-lines-and-crash-" class="hash-link" aria-label="Direct link to fix-artifact-race-voice-lines-and-crash-" title="Direct link to fix-artifact-race-voice-lines-and-crash-" translate="no">​</a></h3>
<p>Due to a small decompilation mistake, the Daxter voice lines in the artifact race missions would fail to play and the game would crash when attempting to play some specific ones.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - August 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-aug-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-aug-2024"/>
        <updated>2024-08-31T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[August 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>A slower month, but modders are having fun with some new animation tooling.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-aug-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.16</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-aug-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="merch-update">Merch Update<a href="https://opengoal.dev/blog/progress-report-aug-2024#merch-update" class="hash-link" aria-label="Direct link to Merch Update" title="Direct link to Merch Update" translate="no">​</a></h3>
<p>Despite the overwhelmingly positive reaction and interest in the idea, we won't be going forward with it at this time for the foreseeable future. Once again, thanks to anyone who took the time to give feedback.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="black-screen-fix-once-again-">Black Screen Fix Once Again <a href="https://github.com/open-goal/jak-project/pull/3624" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#black-screen-fix-once-again-" class="hash-link" aria-label="Direct link to black-screen-fix-once-again-" title="Direct link to black-screen-fix-once-again-" translate="no">​</a></h3>
<p>A quick bug fix from last's month black screen fix. That fix only worked for users that already had a <code>pc-settings.gc</code> file created. This month the fix is extended to users who have not yet created that file (first time launching).</p>
<p>Additionally, previously, the settings file would only get created once you interacted with the pause menu, now it will get created on first launch. This should help reduce confusion and help us see what the game is initializing the settings to.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="per-game-app-icons-">Per-game App Icons <a href="https://github.com/open-goal/jak-project/pull/3634" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#per-game-app-icons-" class="hash-link" aria-label="Direct link to per-game-app-icons-" title="Direct link to per-game-app-icons-" translate="no">​</a></h3>
<p>Instead of using the same yellow OpenGOAL logo, it will now change depending on the game being played (Jak 1 / 2 / 3).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mod-support-in-the-launcher-">Mod Support in the Launcher <a href="https://github.com/open-goal/launcher/pull/530" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#mod-support-in-the-launcher-" class="hash-link" aria-label="Direct link to mod-support-in-the-launcher-" title="Direct link to mod-support-in-the-launcher-" translate="no">​</a></h3>
<p>It is now possible to install and manage mods for OpenGOAL from within the official launcher.</p>
<p>The way this works is you can add a "mod source" URL to the launcher which is a way to look up what mods are available and how to download them.</p>
<p>We provide and maintain none of this ourselves, so be on the lookout for an announcement from the modding community on how to take advantage of this new feature.</p>
<div class="theme-admonition theme-admonition-danger admonition_xJq3 alert alert--danger"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>danger</div><div class="admonitionContent_BuS1"><p>NOTE - Mods are provided by third-parties and are not vetted, endorsed or supported by the official team.</p><p>They can run arbitrary unverified code on your system, so only install mods from sources that you trust!</p><p>If you run into a problem with a mod, you will likely have to reach out to its author and not the OpenGOAL team.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-aug-2024#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="updated-finnish-translations-">Updated Finnish Translations <a href="https://github.com/open-goal/jak-project/pull/3619" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#updated-finnish-translations-" class="hash-link" aria-label="Direct link to updated-finnish-translations-" title="Direct link to updated-finnish-translations-" translate="no">​</a></h3>
<p>Jak 1's Finnish translations received a huge update this month, thanks Aloqas!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-aug-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-hud-in-mirror-mode-">Fix HUD in Mirror Mode <a href="https://github.com/open-goal/jak-project/pull/3630" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#fix-hud-in-mirror-mode-" class="hash-link" aria-label="Direct link to fix-hud-in-mirror-mode-" title="Direct link to fix-hud-in-mirror-mode-" translate="no">​</a></h3>
<p>This was missed in last month's mirror mode update. HUD elements should now be located on the proper sides of the screen.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="updated-finnish-translations--1">Updated Finnish Translations <a href="https://github.com/open-goal/jak-project/pull/3619" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#updated-finnish-translations--1" class="hash-link" aria-label="Direct link to updated-finnish-translations--1" title="Direct link to updated-finnish-translations--1" translate="no">​</a></h3>
<p>Aloqas also made a gigantic update to Jak 2's Finnish translations as well!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="additional-speedrunner-autosplit-locations-">Additional Speedrunner Autosplit Locations <a href="https://github.com/open-goal/jak-project/pull/3639" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#additional-speedrunner-autosplit-locations-" class="hash-link" aria-label="Direct link to additional-speedrunner-autosplit-locations-" title="Direct link to additional-speedrunner-autosplit-locations-" translate="no">​</a></h3>
<p>A few more autosplit spots were added to Jak 2 for those who want to use them.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tooling">Tooling<a href="https://opengoal.dev/blog/progress-report-aug-2024#tooling" class="hash-link" aria-label="Direct link to Tooling" title="Direct link to Tooling" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ci-workflow-to-detect-goalc-output-changes--">CI Workflow to Detect <code>goalc</code> Output Changes <a href="https://github.com/open-goal/jak-project/pull/3626" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3631" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#ci-workflow-to-detect-goalc-output-changes--" class="hash-link" aria-label="Direct link to ci-workflow-to-detect-goalc-output-changes--" title="Direct link to ci-workflow-to-detect-goalc-output-changes--" translate="no">​</a></h3>
<p>When we make changes to the OpenGOAL compiler, of course a potential worry is that the output has changed in a way we did not expect. This new workflow should flag the situation where a change to <code>goalc</code> results in file(s) being compiled differently than on <code>master</code>'s <code>goalc</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="extract-merc-models-into-individual-glbs-">Extract MERC Models into Individual <code>.glb</code>s <a href="https://github.com/open-goal/jak-project/pull/3632" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#extract-merc-models-into-individual-glbs-" class="hash-link" aria-label="Direct link to extract-merc-models-into-individual-glbs-" title="Direct link to extract-merc-models-into-individual-glbs-" translate="no">​</a></h3>
<p>Instead of extracting every model into one giant file for the foreground and one for the background, these models are now separated and organized. This compliments the recent model swapping features nicely.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="skeleton-and-animation-support-in-jak-1-">Skeleton and Animation Support in Jak 1 <a href="https://github.com/open-goal/jak-project/pull/3632" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-aug-2024#skeleton-and-animation-support-in-jak-1-" class="hash-link" aria-label="Direct link to skeleton-and-animation-support-in-jak-1-" title="Direct link to skeleton-and-animation-support-in-jak-1-" translate="no">​</a></h3>
<p>This adds a feature to the <code>build_actor</code> tool to support importing skeletons and animations from <code>.glb</code> files.</p>
<p>Multiple animations are handled and will use the name in the GLB. The default <code>viewer</code> process will end up playing back the first animation.</p>
<p>There are a few limitations:</p>
<ul>
<li class="">You can only have around 100 bones. It is technically possibly to have slightly more, but certain animations may fail to compress when there are more than ~100 bones.</li>
<li class="">Currently, all animations have 60 keyframes per second. This is a higher quality than what is normally used. If animation size becomes problematic, we could make this customizable somehow.</li>
<li class="">There is no support for the <code>align</code> bone.</li>
</ul>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/animation-3791744f91f231ac89324a5567b4c9e1.mp4" controls=""></video><!--/$-->]]></content>
        <author>
            <name>Vaser</name>
            <uri>https://github.com/xTVaser</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - July 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-july-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-july-2024"/>
        <updated>2024-07-31T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[July 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Jak 3 finally gets music and cutscene support and plenty of bugfixes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-july-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.15</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-july-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="merch-survey-results">Merch Survey Results<a href="https://opengoal.dev/blog/progress-report-july-2024#merch-survey-results" class="hash-link" aria-label="Direct link to Merch Survey Results" title="Direct link to Merch Survey Results" translate="no">​</a></h3>
<p>Thanks to everyone that took the time to fill out the survey in last month's progress report. There were over 340 responses, with 93.8% of you saying you were interested in some capacity.</p>
<p>Stay tuned for future updates in this regard (in the usual places, discord announcements / progress report updates).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-model-replacements-">Support For Model Replacements <a href="https://github.com/open-goal/jak-project/pull/3597" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#support-for-model-replacements-" class="hash-link" aria-label="Direct link to support-for-model-replacements-" title="Direct link to support-for-model-replacements-" translate="no">​</a></h3>
<p>It is now possible to replace any in-game foreground/character model with a model of your choosing. This works for all three games.</p>
<p>The process is similar to texture replacements. The game will check <code>custom_assets/&lt;GAME&gt;/merc_replacements</code> for any models to replace. The file name has to match a merc model name, such as <code>eichar-lod0</code> for Jak's model in Jak 1 (so you'd have a path like <code>custom_assets/jak1/merc_replacements/eichar-lod0.glb</code>). Unlike texture replacements, the model files just go in the root <code>merc_replacements</code> folder without any subfolders (this will probably change in the future to allow you to replace models on a per level basis).</p>
<p>Once you have your replacements set up, the decompiler/extractor, just like with texture replacements, has to be run again in order to apply the changes.</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_BuS1"><p>Things to keep in mind:</p><ul>
<li class="">The replacement has to be a GLTF model (file extension <code>.glb</code>). Blender 4.0 is recommended for this. Blender 4.2 should also work, but you may have to change it to use byte color or the vertex coloring can look messed up. Blender 4.1 will <strong>NOT</strong> work due to a quirk in the GLTF exporter.</li>
<li class="">This change is purely visual and quite rudimentary, it does not actually replace the model's skeleton/bones. It will try to match the replacement models' bone weights to the original skeleton, so don't expect the replacement to look very good unless it matches the original skeleton well.</li>
</ul></div></div>
<p><img decoding="async" loading="lazy" alt="Shrek" src="https://opengoal.dev/assets/images/shrexter-1a74b324caf35ad2cc0478e2b2888eb0.png" width="722" height="1145" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Light Babak" src="https://opengoal.dev/assets/images/babak-drip-e1efe2b3cd2dff8dcded116779d4fc67.png" width="496" height="576" class="img_ev3q"></p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/babak-and-frong-ab210fd1b645f90b218cbc443a106485.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="black-screen-fix-">Black Screen Fix <a href="https://github.com/open-goal/jak-project/pull/3601" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#black-screen-fix-" class="hash-link" aria-label="Direct link to black-screen-fix-" title="Direct link to black-screen-fix-" translate="no">​</a></h3>
<p>Hopefully this is the final nail in the coffin for this bug. It would seem that for some environments, having an invalid/mismatched <code>game-size</code> resolution would cause the game to only display a black screen.</p>
<p>The characteristic log that you are affected by this is:</p>
<blockquote>
<p>OpenGL error 0x502 S8246 T824C: GL_INVALID_OPERATION error generated. Source and destination dimensions must be identical with the current filtering modes.</p>
</blockquote>
<p>The game will now check if the set <code>game-size</code> is a supported resolution on your display, if it's not, it will default to the one currently set instead.</p>
<p>Additionally a lot of the related code was simplified and centralized so future debugging should be easier related to display bugs. Please reach out if you are still affected by this issue or if it unfortunately caused a new one.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="persist-memory-card-settings-to-pc-settings-">Persist Memory Card Settings to pc-settings <a href="https://github.com/open-goal/jak-project/pull/3612" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#persist-memory-card-settings-to-pc-settings-" class="hash-link" aria-label="Direct link to persist-memory-card-settings-to-pc-settings-" title="Direct link to persist-memory-card-settings-to-pc-settings-" translate="no">​</a></h3>
<p>In the original game, all settings had to be stored to the memory card due to having no other choice. But we aren't limited by that and it can be inconvenient to have to load your save-file to initialize your preferred settings such as volume levels, vibration, play-hints, etc. Some players do not even realize this is how it works and it just causes confusion that OpenGOAL isn't properly saving their settings.</p>
<p>This fixes that, the following settings are now saved and restored from the <code>pc-settings.gc</code> file, instead of your save-slot:</p>
<ul>
<li class="">Volume (SFX / Music / Dialog)</li>
<li class="">Controller Vibration</li>
<li class="">Play Hints (Only relevant in Jak 1)</li>
<li class="">Subtitles (Not relevant in Jak 1, it already had a custom one)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-july-2024#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-progress-menu-exit-sound-not-respecting-sfx-volume-">Fix Progress Menu Exit Sound Not Respecting SFX Volume <a href="https://github.com/open-goal/jak-project/pull/3574" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#fix-progress-menu-exit-sound-not-respecting-sfx-volume-" class="hash-link" aria-label="Direct link to fix-progress-menu-exit-sound-not-respecting-sfx-volume-" title="Direct link to fix-progress-menu-exit-sound-not-respecting-sfx-volume-" translate="no">​</a></h3>
<p>A longstanding vanilla bug, the sound that plays when exiting the progress menu would not respect the SFX volume setting and always play at max volume even when it should be muted.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="increased-input-buffer-at-higher-frame-rates-">Increased Input Buffer at Higher Frame Rates <a href="https://github.com/open-goal/jak-project/pull/3578" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#increased-input-buffer-at-higher-frame-rates-" class="hash-link" aria-label="Direct link to increased-input-buffer-at-higher-frame-rates-" title="Direct link to increased-input-buffer-at-higher-frame-rates-" translate="no">​</a></h3>
<p>This feature was already present in Jak 2 and has now been ported to Jak 1 and 3.</p>
<p>By default, at 60 FPS, the game has an input buffer that stores the last 3 frames of input and uses that when checking for button presses. At higher frame rates, this buffer would remain the same, leading to more easily mistimed inputs.</p>
<p>The buffer has been increased to a maximum of 15 frames at the highest framerate setting.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-sprite-positioning-on-non-standard-aspect-ratios-">Fix Sprite Positioning on Non-Standard Aspect Ratios <a href="https://github.com/open-goal/jak-project/pull/3596" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#fix-sprite-positioning-on-non-standard-aspect-ratios-" class="hash-link" aria-label="Direct link to fix-sprite-positioning-on-non-standard-aspect-ratios-" title="Direct link to fix-sprite-positioning-on-non-standard-aspect-ratios-" translate="no">​</a></h3>
<p>On non-standard aspect ratios, HUD sprites would quickly become misaligned. A lot of these issues have been mitigated with a mix of a bunch of manual adjustments for the most common aspect ratios, approximations for anything in-between and hiding offending elements in certain cases.</p>
<p><img decoding="async" loading="lazy" alt="Progress Menu in 32:9" src="https://opengoal.dev/assets/images/progress-32-9-9e2a9864d508edbbac6e57ca80ac0149.png" width="1957" height="672" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-invalid-menu-labels-">Fix Invalid Menu Labels <a href="https://github.com/open-goal/jak-project/pull/3613" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#fix-invalid-menu-labels-" class="hash-link" aria-label="Direct link to fix-invalid-menu-labels-" title="Direct link to fix-invalid-menu-labels-" translate="no">​</a></h3>
<p>There was a bug where some of the pause menu's labels would get corrupted, specifically in the display selection and keybinding menus.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-july-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mirror-mode-">Mirror Mode <a href="https://github.com/open-goal/jak-project/pull/3616" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#mirror-mode-" class="hash-link" aria-label="Direct link to mirror-mode-" title="Direct link to mirror-mode-" translate="no">​</a></h3>
<p>Mirror mode should be fixed in Jak 2 and function properly.</p>
<p><img decoding="async" loading="lazy" alt="Mirror Mode" src="https://opengoal.dev/assets/images/mirror-b2744b746896676928cb2f0c2856730b.png" width="1271" height="700" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-july-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="prim-renderer--">Prim Renderer <a href="https://github.com/open-goal/jak-project/pull/3607" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3609" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#prim-renderer--" class="hash-link" aria-label="Direct link to prim-renderer--" title="Direct link to prim-renderer--" translate="no">​</a></h3>
<p>The prim renderer has now been implemented. It's used for a variety of effects, most notably:</p>
<ul>
<li class="">Cloth physics simulation, e.g. Jak's skirt and scarf.</li>
<li class="">"New" lightning effects (in addition to the <a href="https://www.youtube.com/watch?v=-Sawjr8fJQ0" target="_blank" rel="noopener noreferrer" class="">old lightning renderer</a> from Jak 2), e.g. Arc Wielder, Dark Jak projectile attack.</li>
<li class="">"Light trails", e.g. Beam Reflexor, Plasmite RPG trail, Dune Hopper grenade trail, vehicle tire tracks, etc.</li>
</ul>
<p>With the implementation of <code>prim</code>, there are now only a couple of graphical effects missing, namely some new full screen effects like the screen blur + whiteout that occurs in some cutscenes or when firing the Super Nova.</p>
<p><img decoding="async" loading="lazy" alt="New Lightning on Arc Wielder" src="https://opengoal.dev/assets/images/poster-e63a9eac3f80bd88f0ffcd65119a7af2.png" width="3840" height="2160" class="img_ev3q"></p>
<!--$?--><template id="B:0"></template><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="plenty-of-bug-fixes-----">Plenty of Bug Fixes <a href="https://github.com/open-goal/jak-project/pull/3581" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3584" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3593" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3603" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3606" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#plenty-of-bug-fixes-----" class="hash-link" aria-label="Direct link to plenty-of-bug-fixes-----" title="Direct link to plenty-of-bug-fixes-----" translate="no">​</a></h3>
<p>A good number of bugs have been fixed:</p>
<ul>
<li class="">In the Arena and Marauder Stronghold missions, some Marauders would spawn out of bounds.</li>
<li class="">When catching a second leaper in the Leaper Corral mission and watching the cutscene, Jak and the Sand Shark would be moved to an invalid position, instantly failing the mission by drowning.</li>
<li class="">The hovering KG robots' hand cannons were missing, making them unable to shoot Jak.</li>
<li class="">Rings would not spawn for side missions.</li>
<li class="">A crash during final boss.</li>
<li class="">A lot of cutscene models would be aggressively culled, making them invisible. The cause for this was a wrong skeleton setup, leading to the game use the wrong joint when doing culling checks.</li>
<li class="">Sometimes, models would skip updating their textures, which caused Skull Gems to occasionally not have their animated texture in certain spots.</li>
<li class="">After getting cloth physics working, NPCs that use them would fail to spawn because their process heap was not big enough.</li>
<li class="">During cutscenes, eye textures would not be assigned properly to models, leading to some very goofy results.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Eyes" src="https://opengoal.dev/assets/images/eye-a285b0fe19ff99faed23d9c8f2e5fc52.png" width="1067" height="773" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Eyes" src="https://opengoal.dev/assets/images/eye1-96a0d29b612cc8e5139418ce0ea6efa1.png" width="2560" height="1346" class="img_ev3q"></p>
<!--$--><video style="display:block;width:320px;height:180px" src="/assets/medias/eye-d4334e941565fd6b0e6375071fdfcc9b.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="implement-missing-texture-animations-----">Implement Missing Texture Animations <a href="https://github.com/open-goal/jak-project/pull/3577" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3586" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3587" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3586" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3611" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#implement-missing-texture-animations-----" class="hash-link" aria-label="Direct link to implement-missing-texture-animations-----" title="Direct link to implement-missing-texture-animations-----" translate="no">​</a></h3>
<p>Initial texture animation support was added a while back, and now most of the missing texture animations have been added as well. <a href="https://github.com/open-goal/jak-project/issues/3582" target="_blank" rel="noopener noreferrer" class="">A couple of issues still remain</a>, but the majority of the effects work.</p>
<!--$?--><template id="B:1"></template><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="overlord-2-">Overlord 2 <a href="https://github.com/open-goal/jak-project/pull/3567" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-july-2024#overlord-2-" class="hash-link" aria-label="Direct link to overlord-2-" title="Direct link to overlord-2-" translate="no">​</a></h3>
<p>The biggest missing puzzle piece, Overlord 2, has been decompiled and implemented.</p>
<p>This means we now finally have music, cutscene and voice line playback! While this means that there's now a number of new bugs to fix, it goes a long way towards making the game feel more complete.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <author>
            <name>Vaser</name>
            <uri>https://github.com/xTVaser</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - June 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-june-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-june-2024"/>
        <updated>2024-06-30T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[June 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Work on Jak 3 continues to make slow, yet steady progress. Plus an exciting announcement.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-june-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.14</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-june-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="opengoal-merch-survey">OpenGOAL Merch Survey<a href="https://opengoal.dev/blog/progress-report-june-2024#opengoal-merch-survey" class="hash-link" aria-label="Direct link to OpenGOAL Merch Survey" title="Direct link to OpenGOAL Merch Survey" translate="no">​</a></h3>
<p>This is the aforementioned exciting announcement. It's taken a few months to get most of the designs ready to present but atleast I'm
fairly excited about it.</p>
<p>I thought it would be nice to have some physical merchandise to go along with the project, not only because I thought we could make something cool and there isn't a ton of quality stuff out there, but also because it kinda serves as a reward/reminder for all the work we've put into the project.</p>
<p>Additionally, for a long time people have consistently brought up the desire to donate or contribute financially. This is still off the table for several reasons, but purchasing merchandise is different than a donation. It's not just gifting money away and it doesn't create a sense of obligation -- you are getting something out of the deal.</p>
<p>So, if you are interested and you want to see the design previews, their potential prices, and give feedback (please be respectful) check out <a href="https://forms.gle/5DyurhxR1AfFpjpx6" target="_blank" rel="noopener noreferrer" class="">the google form</a>.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>I will close form submissions when next month's progress report goes live, and if there's sufficient interest, we'll move forward with making it a real thing.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="vcc-runtime-update-">VCC Runtime Update <a href="https://github.com/open-goal/launcher/pull/512" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-june-2024#vcc-runtime-update-" class="hash-link" aria-label="Direct link to vcc-runtime-update-" title="Direct link to vcc-runtime-update-" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-danger admonition_xJq3 alert alert--danger"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>danger</div><div class="admonitionContent_BuS1"><p>Due to recent changes surrounding how the OpenGOAL binaries are built, if you are on Windows, you are probably
going to want to update to the latest version of the VCC Runtime or the games will no longer launch.</p></div></div>
<p>The launcher (if you update it) should detect if you are running an old version, and if so, give you the link to
go and update it.</p>
<p>If you don't use the launcher, use the following link <a href="https://aka.ms/vs/17/release/vc_redist.x64.exe" target="_blank" rel="noopener noreferrer" class="">https://aka.ms/vs/17/release/vc_redist.x64.exe</a></p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/vcc-runtime-bc76f52d9b7c4329296bb2ff98113557.png" width="810" height="285" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher-decompiler-options-">Launcher Decompiler Options <a href="https://github.com/open-goal/jak-project/pull/3560" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-june-2024#launcher-decompiler-options-" class="hash-link" aria-label="Direct link to launcher-decompiler-options-" title="Direct link to launcher-decompiler-options-" translate="no">​</a></h3>
<p>People have wanted a simple way to use the launcher to extract textures, audio, etc for a while. This has required them to either:</p>
<ul>
<li class="">manually edit the <code>.jsonc</code> config files and run the decompile option</li>
<li class="">be unable to, as the <code>extractor</code> binary could not do things like extract audio.</li>
</ul>
<p>Well no more, not only does the <code>extractor</code> binary now support anything the normal <code>decompiler</code> binary does -- but the launcher now has settings to do all of this for you. Just enable what you want, and run the decompiler through <code>Advanced</code> on the respective game:</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/launcher-decomp-6c7868551fc02493c29805f49859ed96.png" width="741" height="386" class="img_ev3q"></p>
<p>There is also a new button to open the folder that the game's data is located in, this is useful to quickly find the folder where your textures/audio/etc are extracted to. For example textures get extracted to <code>.../decompiler_out/&lt;GAME&gt;/textures</code></p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/launcher-decomp-button-f735edf6b69637c24ea697932277ca28.png" width="414" height="185" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-flatpak-release-is-coming-">A Flatpak Release is Coming <a href="https://github.com/open-goal/jak-project/pull/508" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-june-2024#a-flatpak-release-is-coming-" class="hash-link" aria-label="Direct link to a-flatpak-release-is-coming-" title="Direct link to a-flatpak-release-is-coming-" translate="no">​</a></h3>
<p>While technically coming from an unofficial source, Milkfat32 has taken it upon themselves to go through the process of getting the launcher into a flatpak and added to flathub.</p>
<p>At this point I don't think it's released yet, but if that is of interest to you, be on the lookout.</p>
<p>The hope is that it can be made an official thing in the future as flatpak support with the launcher's framework improves (it seems to be part of their V2 plan, which is due sometime this year).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="game-changes">Game Changes<a href="https://opengoal.dev/blog/progress-report-june-2024#game-changes" class="hash-link" aria-label="Direct link to Game Changes" title="Direct link to Game Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3-airlock-speedups-and-temporary-cutscene-fixes-">Jak 3 Airlock Speedups and Temporary Cutscene Fixes <a href="https://github.com/open-goal/jak-project/pull/3543" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-june-2024#jak-3-airlock-speedups-and-temporary-cutscene-fixes-" class="hash-link" aria-label="Direct link to jak-3-airlock-speedups-and-temporary-cutscene-fixes-" title="Direct link to jak-3-airlock-speedups-and-temporary-cutscene-fixes-" translate="no">​</a></h3>
<p>Just like in Jak 2, code has been added to make airlocks open faster if you so choose.</p>
<p>Additionally, as Overlord2 is still being worked on, cutscenes have to be hacked around. This change improves the way the cutscenes temporarily skipped.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1-eco-meter-was-flashing-the-wrong-color-">Jak 1 eco meter was flashing the wrong color <a href="https://github.com/open-goal/jak-project/pull/3549" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-june-2024#jak-1-eco-meter-was-flashing-the-wrong-color-" class="hash-link" aria-label="Direct link to jak-1-eco-meter-was-flashing-the-wrong-color-" title="Direct link to jak-1-eco-meter-was-flashing-the-wrong-color-" translate="no">​</a></h3>
<p>Fixed</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1-enforce-certain-settings-in-speedrunner-mode-">Jak 1 enforce certain settings in speedrunner mode <a href="https://github.com/open-goal/jak-project/pull/3553" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-june-2024#jak-1-enforce-certain-settings-in-speedrunner-mode-" class="hash-link" aria-label="Direct link to jak-1-enforce-certain-settings-in-speedrunner-mode-" title="Direct link to jak-1-enforce-certain-settings-in-speedrunner-mode-" translate="no">​</a></h3>
<p>Certain settings like <code>PS2 Actor Vis</code> and framerate were mistakenly only enforced at the start of a run. This only impacted Jak 1.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tooling-changes">Tooling Changes<a href="https://opengoal.dev/blog/progress-report-june-2024#tooling-changes" class="hash-link" aria-label="Direct link to Tooling Changes" title="Direct link to Tooling Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="repl-improvements-">REPL Improvements <a href="https://github.com/open-goal/jak-project/pull/3545" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-june-2024#repl-improvements-" class="hash-link" aria-label="Direct link to repl-improvements-" title="Direct link to repl-improvements-" translate="no">​</a></h3>
<p>One of the coolest parts about using OpenGOAL is the REPL and making changes while the game is live. Well atleast it is, until you change
something that the compiler doesn't like. Such as a function definition, or a type definition.</p>
<p>This would require you to completely restart your REPL, re-compile the project, and then you can continue your work. <code>goalc</code> is noble for
trying to prevent these types of redefinitions, but during development and experimentation it's the opposite of what you want.</p>
<p>There is a new <code>permissiveRedefinitions</code> boolean option you can put in your <code>repl-config.json</code> file to enable this behaviour. It's early days so it
may still not allow redefining everything, make an issue when/if you encounter such situations.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/repl-1-e11304c04c23225f2a9666e5b211c83c.png" width="642" height="467" class="img_ev3q"></p>
<p>Additionally, there's a cooler welcome screen that provides more information in a more condensed format. This is something that hasn't been changed in years!</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/repl-2-6e1fcd5d7164c8689177a30562f84d00.png" width="900" height="336" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="better-event-profiling-">Better Event Profiling <a href="https://github.com/open-goal/jak-project/pull/3561" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-june-2024#better-event-profiling-" class="hash-link" aria-label="Direct link to better-event-profiling-" title="Direct link to better-event-profiling-" translate="no">​</a></h3>
<p>If you have a problem related to frame-pacing or performance, you'll often be told to record a profile dump via the ImGUI topbar.</p>
<p>However this tool had it's limitations. For one thing, the maximum number of events were quite low, only amounting to a handful of seconds that could be recorded. Additionally the size of the profile dump would be quite large given the amount of time it would take. Lastly the UI wouldn't really tell you anything to suggest how quickly you were hitting the limit.</p>
<p>All of these things have been fixed:</p>
<ul>
<li class="">You can change the maximum number of events that are recorded</li>
<li class="">You can enable compression on the output (approximately a 10x reduction)</li>
<li class="">The UI shows how quickly it's recording, letting you know if you need to bump up your max or not.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/events-ef69f1d6b0dedd94792097532b1bee49.png" width="1435" height="186" class="img_ev3q"></p>]]></content>
        <author>
            <name>Vaser</name>
            <uri>https://github.com/xTVaser</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - May 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-may-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-may-2024"/>
        <updated>2024-05-31T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[May 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Jak 3 decompilation is nearing completion.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-may-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.13</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="translation-contributions">Translation Contributions<a href="https://opengoal.dev/blog/progress-report-may-2024#translation-contributions" class="hash-link" aria-label="Direct link to Translation Contributions" title="Direct link to Translation Contributions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="games">Games<a href="https://opengoal.dev/blog/progress-report-may-2024#games" class="hash-link" aria-label="Direct link to Games" title="Direct link to Games" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Game Translation Progress for May" src="https://opengoal.dev/assets/images/i18n-games-7b554aa3d4ffbcd32252ed0ed3f7b3a7.png" width="1632" height="546" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-may-2024#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Launcher Translation Progress for May" src="https://opengoal.dev/assets/images/i18n-launcher-bcbe773f38151677bce2ff9aeee3bbeb.png" width="1633" height="538" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-may-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="folder-locationname-changes">Folder Location/Name Changes<a href="https://opengoal.dev/blog/progress-report-may-2024#folder-locationname-changes" class="hash-link" aria-label="Direct link to Folder Location/Name Changes" title="Direct link to Folder Location/Name Changes" translate="no">​</a></h3>
<p>Some folders have been renamed and/or moved.</p>
<p>The <code>custom_levels</code> folder was renamed to <code>custom_assets</code> and will, as the name suggests, house any form of custom asset the game needs (e.g. custom levels, textures, models, audio, etc.).</p>
<p>If you use any texture replacements, the game now looks for the <code>texture_replacements</code> folder in <code>custom_assets/&lt;GAME&gt;/texture_replacements</code> and it now works on a per-game basis instead of having a single folder for all three games.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="goal-compiler---dependency-graph-">GOAL Compiler - Dependency Graph <a href="https://github.com/open-goal/jak-project/pull/3505" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#goal-compiler---dependency-graph-" class="hash-link" aria-label="Direct link to goal-compiler---dependency-graph-" title="Direct link to goal-compiler---dependency-graph-" translate="no">​</a></h3>
<p>Still in early stages, preliminary work on generating a dependency graph for Jak 1's codebase has begun.</p>
<p>The current dependency tracking situation for our compiler is quite a mess. You can only use things that were defined in files that were compiled earlier in the build order and if you make a change to a file that is very early in the build order, incremental builds require you to build almost every file again, even though a majority of those files are false dependencies.</p>
<p>Once we have a proper dependency graph, these problems should go away and we get even more benefits:</p>
<ul>
<li class="">A proper build order with compiler warnings that tell you when something you try to use is not available at build time.</li>
<li class="">Less boilerplate in the project makefile.</li>
<li class="">Adding new source files becomes much simpler.</li>
<li class="">Easier sharing of common code between two games.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="goal-compiler---performance-report-">GOAL Compiler - Performance Report <a href="https://github.com/open-goal/jak-project/pull/3519" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#goal-compiler---performance-report-" class="hash-link" aria-label="Direct link to goal-compiler---performance-report-" title="Direct link to goal-compiler---performance-report-" translate="no">​</a></h3>
<p>A tool was added to store the result of compiling a project in order to compare against other builds with respect to compile time.</p>
<p><img decoding="async" loading="lazy" alt="GOAL Compiler Performance Report" src="https://opengoal.dev/assets/images/goalc-report-f3217125411000fef0293ee2c534e242.png" width="3438" height="1151" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-may-2024#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-actor-tool--">"Build Actor" Tool <a href="https://github.com/open-goal/jak-project/pull/3266" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3540" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#build-actor-tool--" class="hash-link" aria-label="Direct link to build-actor-tool--" title="Direct link to build-actor-tool--" translate="no">​</a></h3>
<p>A very exciting new feature for custom level authors: You can now import models from Blender into the game to use for creating your own actors!</p>
<p>To clarify: This does <strong>not</strong> allow you to replace existing models, only add new ones to custom levels.</p>
<p>This is still in very early stages and may be improved upon in the future, but it works well enough for making some very basic custom actors, like your own collectables for example.</p>
<p>There are some limitations:</p>
<ul>
<li class="">You cannot import any animations, the model only has a single default idle animation that does nothing. The game's animation system is extremely complex and the format for animation data is very complicated and not well understood, so this will not be happening for a while.</li>
<li class="">The model only has a single bone, located at its root.</li>
<li class="">If the actor is using a collision mesh, collision is limited to 255 vertices per <code>collide-mesh</code>, although an actor can have multiple <code>collide-mesh</code>es as needed. Every object in Blender that has custom collision properties set will get its own <code>collide-mesh</code>.</li>
</ul>
<p>An example actor was added to the <code>test-zone</code> level (accessible from the debug menu under Game -&gt; Continue -&gt; <code>test-zone-start</code>) that can be used as a starting point. The GOAL code for it is located in <code>test-zone-obs.gc</code>. Thanks to Kuitar for providing the model!</p>
<p><img decoding="async" loading="lazy" alt="Test Actor" src="https://opengoal.dev/assets/images/test-actor-e8df2c3fc96b2fa5914f1c6fb8dd8025.png" width="1919" height="1079" class="img_ev3q"></p>
<p>I wrote a small guide on how to use the tool <a class="" href="https://opengoal.dev/docs/developing/custom_levels/custom_actors">here</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-may-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-debug-menu-options-">New Debug Menu Options <a href="https://github.com/open-goal/jak-project/pull/3539" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#new-debug-menu-options-" class="hash-link" aria-label="Direct link to new-debug-menu-options-" title="Direct link to new-debug-menu-options-" translate="no">​</a></h3>
<p>For people that want to quickly give themselves a 124% save file, orbs/gems or just want to mess around with the cheats we added without unlocking them first, a couple of new debug menu options were added. The debug menu can be opened in Jak 2 by rebooting the game in debug mode (press Alt to bring up the top bar -&gt; "Debugging" -&gt; "Reboot in Debug Mode") and pressing L3 + Start.</p>
<p><img decoding="async" loading="lazy" alt="Debug Menu" src="https://opengoal.dev/assets/images/debug-menu-e08213a6d3917298dd3c7d0d9153ed72.png" width="441" height="370" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-may-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hfrag-renderer-"><code>hfrag</code> Renderer <a href="https://github.com/open-goal/jak-project/pull/3509" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#hfrag-renderer-" class="hash-link" aria-label="Direct link to hfrag-renderer-" title="Direct link to hfrag-renderer-" translate="no">​</a></h3>
<p><code>hfrag</code>, the desert renderer, was added. It's still missing the fancy texture animations for now, though.</p>
<p><img decoding="async" loading="lazy" alt="hfrag" src="https://opengoal.dev/assets/images/hfrag-47f1db82d79ea62b74be3d6237e11740.png" width="1450" height="1030" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sky-renderer-">Sky Renderer <a href="https://github.com/open-goal/jak-project/pull/3514" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#sky-renderer-" class="hash-link" aria-label="Direct link to sky-renderer-" title="Direct link to sky-renderer-" translate="no">​</a></h3>
<p>The sky renderer has been added.</p>
<p><img decoding="async" loading="lazy" alt="Sky Daytime" src="https://opengoal.dev/assets/images/sky-day-0647459c72c98a15f26c995ccfaf546d.png" width="1227" height="841" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Sky Nighttime" src="https://opengoal.dev/assets/images/sky-night-376864e4a47060bc373031ba970e5bf0.png" width="1016" height="666" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="shadow-renderer--">Shadow Renderer <a href="https://github.com/open-goal/jak-project/pull/3530" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3532" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#shadow-renderer--" class="hash-link" aria-label="Direct link to shadow-renderer--" title="Direct link to shadow-renderer--" translate="no">​</a></h3>
<p>The shadow renderer was added.</p>
<p>New in Jak 3: The special effect for the Mass Inverter uses the shadow renderer.</p>
<p><img decoding="async" loading="lazy" alt="Mass Inverter Effect" src="https://opengoal.dev/assets/images/shadow-0668b4eb9396fd74cbe70ffd5570d6b4.png" width="960" height="540" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-level-support-">Custom Level Support <a href="https://github.com/open-goal/jak-project/pull/3522" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#custom-level-support-" class="hash-link" aria-label="Direct link to custom-level-support-" title="Direct link to custom-level-support-" translate="no">​</a></h3>
<p>Custom level support has been added to Jak 3.</p>
<p><img decoding="async" loading="lazy" alt="The Dune Hopper in Crescent Top" src="https://opengoal.dev/assets/images/jak3-custom-levels-c45c1dc898e344a9580e123aa34e5073.png" width="1919" height="1080" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="decompilation-is-nearing-completion---">Decompilation Is Nearing Completion <a href="https://github.com/open-goal/jak-project/pull/3506" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3513" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3515" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-may-2024#decompilation-is-nearing-completion---" class="hash-link" aria-label="Direct link to decompilation-is-nearing-completion---" title="Direct link to decompilation-is-nearing-completion---" translate="no">​</a></h3>
<p>As of May 16th, all of the game's mission/gameplay code has been decompiled. The only things remaining that are actually needed are a couple of small files for setting up texture animations and a single large file (<code>bigmap</code>, used for the world map in the progress menu), the rest that were skipped are files that we don't need on PC for the game to function, like files used only for debugging PS2 hardware features, debugging graphics code or renderer code that was completely rewritten in C++ and is not required anymore.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>Please keep in mind that this does <strong>not</strong> mean that the game is almost finished!</p></div></div>
<p>The decompilation is only part of the effort, as we now need to squash all of the bugs that we find (and there are quite a few that we discovered so far, <a href="https://github.com/orgs/open-goal/projects/3/views/13" target="_blank" rel="noopener noreferrer" class="">here is the list</a> where we keep track in case you are curious), work on the remaining graphics stuff (<code>prim</code>, <code>blit-displays</code> and more) and, most importantly, finish Overlord 2 which will probably take up most of the time.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - April 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-apr-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-apr-2024"/>
        <updated>2024-04-30T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[April 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Jak 3 progress is skyrocketing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-apr-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.11</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_l16ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_l16ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="translation-contributions">Translation Contributions<a href="https://opengoal.dev/blog/progress-report-apr-2024#translation-contributions" class="hash-link" aria-label="Direct link to Translation Contributions" title="Direct link to Translation Contributions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="games">Games<a href="https://opengoal.dev/blog/progress-report-apr-2024#games" class="hash-link" aria-label="Direct link to Games" title="Direct link to Games" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Game Translation Progress for April" src="https://opengoal.dev/assets/images/i18n-games-75b54602eb5f93e7c39038e95118cb8b.png" width="1623" height="548" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-apr-2024#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Launcher Translation Progress for April" src="https://opengoal.dev/assets/images/i18n-launcher-83956c3b25a6d7b4922f20d0a7233708.png" width="1641" height="555" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-apr-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="reimplementation-of-goal-capture-system-for-jak-23-">Reimplementation of GOAL <code>capture</code> System for Jak 2/3 <a href="https://github.com/open-goal/jak-project/pull/3482" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-apr-2024#reimplementation-of-goal-capture-system-for-jak-23-" class="hash-link" aria-label="Direct link to reimplementation-of-goal-capture-system-for-jak-23-" title="Direct link to reimplementation-of-goal-capture-system-for-jak-23-" translate="no">​</a></h3>
<p>Jak 2 and 3 had a <code>capture</code> system for taking high resolution screenshots. It would max out LODs and hide any HUD elements/text on-screen before capturing a raw image of the next frame. This feature was mainly used to aid with taking high quality screenshots used in promotional material.</p>
<p>This system has now been reimplemented to work with OpenGOAL and the already existing screenshot feature in the ImGUI top bar which can be accessed by pressing <code>Alt</code>. There are presets for 1080p, 2K, 4K and even 16K in case somebody needs that...</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="goal-debugger-reverse-backtrace-print-order-">GOAL Debugger: Reverse Backtrace Print Order <a href="https://github.com/open-goal/jak-project/pull/3474" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-apr-2024#goal-debugger-reverse-backtrace-print-order-" class="hash-link" aria-label="Direct link to goal-debugger-reverse-backtrace-print-order-" title="Direct link to goal-debugger-reverse-backtrace-print-order-" translate="no">​</a></h3>
<p>Previously, when the game crashed and the GOAL debugger printed the stack trace, you would need to scroll all the way up to see the spot where the game actually crashed, which could be quite a lot of scrolling depending on how big the stack trace was.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-apr-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-minimap-icon-misalignment-">Fix Minimap Icon Misalignment <a href="https://github.com/open-goal/jak-project/pull/3481" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-apr-2024#fix-minimap-icon-misalignment-" class="hash-link" aria-label="Direct link to fix-minimap-icon-misalignment-" title="Direct link to fix-minimap-icon-misalignment-" translate="no">​</a></h3>
<p>The icons on the minimap were slightly misaligned, leading to small black bars showing up next to them. This bug was also present in Jak 3 and was fixed there as well.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-apr-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="decompilation-update--------------">Decompilation Update <a href="https://github.com/open-goal/jak-project/pull/3445" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3450" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3453" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3455" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3457" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3460" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3461" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3465" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3466" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3468" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3473" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3483" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3485" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3487" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-apr-2024#decompilation-update--------------" class="hash-link" aria-label="Direct link to decompilation-update--------------" title="Direct link to decompilation-update--------------" translate="no">​</a></h3>
<p>A <strong>LOT</strong> of files were decompiled, way too many to list here, so here's some statistics for the month of April instead:</p>
<ul>
<li class="">Roughly ~400 files were decompiled, going from around 400 files done at the start of April to ~800 out of 1008 files total</li>
<li class="">Total decompiled code line count went from ~200k to ~750k</li>
</ul>
<p>In the span of a single week, the game went from looking like this around the end of March:</p>
<p><img decoding="async" loading="lazy" alt="Jak 3, End of March" src="https://opengoal.dev/assets/images/j3-before-39bcfaa7885aebbd34d53f8a312ae47c.png" width="704" height="482" class="img_ev3q"></p>
<p>To this:</p>
<p><img decoding="async" loading="lazy" alt="Jak 3, a Week Into April" src="https://opengoal.dev/assets/images/j3-after-435adfbfc2a53740d1d671a333063a8c.png" width="1437" height="1079" class="img_ev3q"></p>
<p>Thankfully, a lot (but not all) of the existing renderers from previous games remained untouched for the most part, which allowed us to quickly get the game looking very close to how it should be. Jak 3 does have a few new renderers though, the main ones are <code>hfrag</code> and <code>prim</code>.</p>
<p><code>hfrag</code> is the renderer for the desert sand. It's currently being worked on and it appears to be quite complicated.</p>
<p>Not too much is known about <code>prim</code> yet, but it appears to be used for all kinds of things, most prominently light trails (e.g. the grenades fired from the Plasmite RPG or the Dune Hopper, Beam Reflexor shots, Needle Lazer, etc.), cloth simulation and some lightning effects (Arc Wielder).</p>
<p>As of right now, with the exception of the Wastelander rescue mission, the entirety of Act 1 is playable as well as the following missions from Act 2 and 3:</p>
<ul>
<li class="">All Sewer missions</li>
<li class="">All Haven Forest missions</li>
<li class="">All War Factory missions</li>
<li class="">Destroy Dark Eco Tanks</li>
<li class="">Race for More Artifacts</li>
<li class="">Destroy Metal-pedes in Nest</li>
<li class="">Rescue Seem at Temple</li>
<li class="">Defend Spargus From Attack</li>
<li class="">Destroy Metal Head Tower</li>
<li class="">Reach Catacombs via Palace Ruins</li>
<li class="">Reach Precursor Core</li>
<li class="">Destroy Final Boss</li>
</ul>
<p>Aside from the rest of the missing game and graphics code, there are still two other big missing pieces which we will very likely not get until quite a bit later: Music and cutscenes.</p>
<p>Jak 3 completely changes the way music playback works, as it is now streamed instead of sequenced like before. On top of that, Jak 3 uses "Overlord 2", a new version of Naughty Dog's IOP driver "Overlord" which was used for streaming data off the DVD, such as files for cutscene animations, "spooled" animations like the Terraformer walking animation (which, fun fact, is around six minutes long!) or Jak's idle animations and audio for cutscenes and voice lines.</p>
<p>Currently, we're just reusing Jak 2's version of Overlord which allows for the basics like the (very buggy) playback of most sound effects and level loading, but we will eventually need to decompile Overlord 2 in order to get proper music and cutscene playback.</p>
<p>Here's a bunch of videos showing off more progress (roughly in chronological order):</p>
<ul>
<li class="">It might have been April Fools' Day, but this was definitely real: <code>target</code> (Jak) was successfully spawned for the first time on April 1st.</li>
</ul>
<!--$?--><template id="B:0"></template><!--/$-->
<ul>
<li class="">Since we didn't have the foreground model renderer ("MERC") implemented yet, we needed to draw Jak's bones using debug tools to see anything.</li>
</ul>
<!--$?--><template id="B:1"></template><!--/$-->
<ul>
<li class="">Implementation of MERC a few hours later. It might look bad, but it was actually implemented correctly from the start, there were just some other missing components like the time of day and mood lighting which meant that foreground models would not receive any color information. Jak's model is missing because it turned out that it was stored in a completely different set of files compared to the previous games, so we needed to add extra code for extracting the model data from those files.</li>
</ul>
<!--$?--><template id="B:2"></template><!--/$-->
<ul>
<li class="">The debug menu was added.</li>
</ul>
<!--$?--><template id="B:3"></template><!--/$-->
<ul>
<li class="">Mood and time of day are used for the background/foreground lighting. Mood is used to apply special effects to the background, like weather (rain, lightning) or torch/lamp/electric gate lights. The time of day system uses 8 color palettes that are interpolated between. The colors are all baked into the level geometry.</li>
</ul>
<!--$?--><template id="B:4"></template><!--/$-->
<!--$?--><template id="B:5"></template><!--/$-->
<ul>
<li class="">Regions use the game's built in script system in order to load levels, play cutscenes if certain conditions are met, define water volumes, etc. when either Jak or the camera passes through them. They can be spheres, planes or boxes.</li>
</ul>
<!--$?--><template id="B:6"></template><!--/$-->
<ul>
<li class="">The ragdoll editor was used to test out and modify ragdoll animations for specific skeletons. You could select each joint separately, modify some parameters and print the current setup to the listener to copy it into your ragdoll setup code. It crashes right before the interesting part in the video because some things weren't implemented yet.</li>
</ul>
<!--$?--><template id="B:7"></template><!--/$-->
<ul>
<li class="">BLERC was added, used for facial animations.</li>
</ul>
<!--$?--><template id="B:8"></template><!--/$-->
<ul>
<li class="">The lightning renderer was added, used by Dark Jak and in many other places.</li>
</ul>
<!--$?--><template id="B:9"></template><!--/$-->
<ul>
<li class="">Fun fact: Did you know that Jak has a special animation for switching ladder sides? You probably didn't, because this ladder from the test level "halfpipe" is the only one in the game that actually allows you to do this, so this animation goes completely unused in the base game.</li>
</ul>
<!--$?--><template id="B:a"></template><!--/$-->
<ul>
<li class="">First attempt at spawning enemies that use nav meshes to move around. I thought there was a bug in the code causing the enemies to not move around, but it turned out I simply forgot to turn on the enemy navigation logic...</li>
</ul>
<!--$?--><template id="B:b"></template><!--/$-->
<ul>
<li class="">After implementing the game's mission and task system, I decompiled the code for a single mission to test it out. This led to the first fully completable mission in OpenGOAL, "Escort Bomb Train"!</li>
</ul>
<!--$?--><template id="B:c"></template><!--/$-->
<ul>
<li class="">Right after that, I went to work on more of the code for the Eco Mine missions, next up was the boss battle against the Precursor Robot.</li>
</ul>
<!--$?--><template id="B:d"></template><!--/$-->
<ul>
<li class="">Work on the code for the desert vehicles began a bit after that because a lot of missions require them. The desert vehicle code ended up being around 30 files and, just like Jak 2's vehicle code, was extremely awful to sift through, but luckily, everything mostly worked on the first try. It may be a bit hard to notice, but if you look closely, you can see that Jak is not actually sitting in the vehicle until the vehicle takes an impact and forces him to play an animation. The cause for this was eventually tracked down to be a single function using the wrong return value.</li>
</ul>
<!--$?--><template id="B:e"></template><!--/$-->
<!--$?--><template id="B:f"></template><!--/$-->
<!--$?--><template id="B:10"></template><!--/$-->
<!--$?--><template id="B:11"></template><!--/$-->
<!--$?--><template id="B:12"></template><!--/$-->
<!--$?--><template id="B:13"></template><!--/$-->
<!--$?--><template id="B:14"></template><!--/$-->
<!--$?--><template id="B:15"></template><!--/$-->
<!--$?--><template id="B:16"></template><!--/$-->
<!--$?--><template id="B:17"></template><!--/$-->
<!--$?--><template id="B:18"></template><!--/$-->
<!--$?--><template id="B:19"></template><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pc-kernel-implementation--">PC Kernel Implementation <a href="https://github.com/open-goal/jak-project/pull/3472" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3479" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-apr-2024#pc-kernel-implementation--" class="hash-link" aria-label="Direct link to pc-kernel-implementation--" title="Direct link to pc-kernel-implementation--" translate="no">​</a></h3>
<p>The <code>pckernel</code> used in the previous games was reimplemented for Jak 3. It contains basically all of our custom code that provides extra PC-specific functionality, such as the Discord Rich Presence integration or the controller LED effect. For Jak 3, the controller LED feature was expanded to change color when you're Light Jak.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - March 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-mar-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-mar-2024"/>
        <updated>2024-04-04T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[March 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Jak 3 decompilation progress continues, there will be a lot to share next month.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-mar-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.9</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="translation-contributions">Translation Contributions<a href="https://opengoal.dev/blog/progress-report-mar-2024#translation-contributions" class="hash-link" aria-label="Direct link to Translation Contributions" title="Direct link to Translation Contributions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="games">Games<a href="https://opengoal.dev/blog/progress-report-mar-2024#games" class="hash-link" aria-label="Direct link to Games" title="Direct link to Games" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Translation Progress for March" src="https://opengoal.dev/assets/images/i18n-games-954feb59e331663493c5da9512e5d611.png" width="1512" height="398" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-mar-2024#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Translation Progress for March" src="https://opengoal.dev/assets/images/i18n-launcher-4064fa6929faf59f87e9c387c1d7fe23.png" width="1483" height="335" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-mar-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="move-to-macos-12-">Move to MacOS 12 <a href="https://github.com/open-goal/jak-project/pull/3407" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#move-to-macos-12-" class="hash-link" aria-label="Direct link to move-to-macos-12-" title="Direct link to move-to-macos-12-" translate="no">​</a></h3>
<p>macOS 11 has been out of date for quite a few months at this point, and the free GitHub runner that uses the end-of-life image is soon to be removed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improve-and-better-understand-bones-code-">Improve and better understand bones code <a href="https://github.com/open-goal/jak-project/pull/3425" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#improve-and-better-understand-bones-code-" class="hash-link" aria-label="Direct link to improve-and-better-understand-bones-code-" title="Direct link to improve-and-better-understand-bones-code-" translate="no">​</a></h3>
<p>The bones code was ported from MIPS2C to OpenGOAL, making it much easier to study and even faster (though likely neglible in practice).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-control-flow-support-in-opengoal-">More Control-Flow Support in OpenGOAL <a href="https://github.com/open-goal/jak-project/pull/3426" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#more-control-flow-support-in-opengoal-" class="hash-link" aria-label="Direct link to more-control-flow-support-in-opengoal-" title="Direct link to more-control-flow-support-in-opengoal-" translate="no">​</a></h3>
<p>Labels, breaks and continues are now supported in the following:</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">while</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">until</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">dotimes</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">countdown</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">loop</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">doarray</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="lsp-improvements-">LSP Improvements <a href="https://github.com/open-goal/jak-project/pull/3437" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#lsp-improvements-" class="hash-link" aria-label="Direct link to lsp-improvements-" title="Direct link to lsp-improvements-" translate="no">​</a></h3>
<p>See the linked PR for examples and demos on what was added. To sum it up, if you write OpenGOAL code you may notice a lot more functionality via the LSP (which is automatically grabbed for you by the VSCode extension).</p>
<p>I am about halfway through atleast partially implementing all main LSP features, progress can be tracked here if you are curious - <a href="https://github.com/open-goal/opengoal-vscode/issues/256" target="_blank" rel="noopener noreferrer" class="">https://github.com/open-goal/opengoal-vscode/issues/256</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="website-freshen-up">Website Freshen-up<a href="https://opengoal.dev/blog/progress-report-mar-2024#website-freshen-up" class="hash-link" aria-label="Direct link to Website Freshen-up" title="Direct link to Website Freshen-up" translate="no">​</a></h3>
<p>The design of the website has been the same for quite some time so it was freshened up a bit.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-mar-2024#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-graphics-menu-options-">Fix Graphics Menu Options <a href="https://github.com/open-goal/jak-project/pull/3421" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#fix-graphics-menu-options-" class="hash-link" aria-label="Direct link to fix-graphics-menu-options-" title="Direct link to fix-graphics-menu-options-" translate="no">​</a></h3>
<p>Jak 1's graphics menu would be different if your monitor was only 60hz. That isn't necessarily a problem...but the alternate version was missing the option to change the monitor the game was displayed on.</p>
<p>Fixed by consolidating things into a single menu varient.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-mar-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="save-pc-settingsgc-periodically-">Save <code>pc-settings.gc</code> Periodically <a href="https://github.com/open-goal/jak-project/pull/3396" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#save-pc-settingsgc-periodically-" class="hash-link" aria-label="Direct link to save-pc-settingsgc-periodically-" title="Direct link to save-pc-settingsgc-periodically-" translate="no">​</a></h3>
<p>There were issues where unlocked cheats would seemingly not be unlocked when the user would normally expect them to be. This was solved by periodically saving the cheat progress.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-some-speedrunner-mode-issues-">Fix some speedrunner mode issues <a href="https://github.com/open-goal/jak-project/pull/3413" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#fix-some-speedrunner-mode-issues-" class="hash-link" aria-label="Direct link to fix-some-speedrunner-mode-issues-" title="Direct link to fix-some-speedrunner-mode-issues-" translate="no">​</a></h3>
<p>The speedrunner mode menu will no longer open during blackout screens, this was apparently causing issues.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="temporary-workaround-for-speedrunner-route-at-lifeseed-">Temporary workaround for speedrunner route at lifeseed <a href="https://github.com/open-goal/jak-project/pull/3418" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#temporary-workaround-for-speedrunner-route-at-lifeseed-" class="hash-link" aria-label="Direct link to temporary-workaround-for-speedrunner-route-at-lifeseed-" title="Direct link to temporary-workaround-for-speedrunner-route-at-lifeseed-" translate="no">​</a></h3>
<p>There is still a potential crash that occurs when obtaining the lifeseed at deadtown as fast as possible, see <a href="https://github.com/open-goal/jak-project/issues/2988" target="_blank" rel="noopener noreferrer" class="">https://github.com/open-goal/jak-project/issues/2988</a></p>
<p>However, in the meantime a hack was added to stop the game from out-right crashing. The cutscene will not function properly if you get the game into the bad state, but it won't crash.</p>
<p>If this causes other issues, let us know and it can be reverted but it seems to do the job.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-mar-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="decompilation-update----------">Decompilation Update <a href="https://github.com/open-goal/jak-project/pull/3412" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3420" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3424" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3427" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3428" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3429" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3432" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3433" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3434" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3438" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#decompilation-update----------" class="hash-link" aria-label="Direct link to decompilation-update----------" title="Direct link to decompilation-update----------" translate="no">​</a></h3>
<p>Many things were decompiled:</p>
<ul>
<li class="">Sprite related files</li>
<li class="">Lots of engine code<!-- -->
<ul>
<li class="">foreground</li>
<li class="">bones</li>
<li class="">font</li>
<li class="">background</li>
<li class="">shrubbery</li>
<li class="">tfrag</li>
<li class="">tie</li>
<li class="">prim</li>
<li class="">level</li>
<li class="">main</li>
<li class="">gun projectiles</li>
</ul>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-texture-macro-in-decompiled-code-"><code>get-texture</code> macro in decompiled code <a href="https://github.com/open-goal/jak-project/pull/3432" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#get-texture-macro-in-decompiled-code-" class="hash-link" aria-label="Direct link to get-texture-macro-in-decompiled-code-" title="Direct link to get-texture-macro-in-decompiled-code-" translate="no">​</a></h3>
<p>Replaces code that involves <code>lookup-texture-by-id</code> or <code>lookup-texture-by-id-fast</code> to be much more clean and concise.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-macro-detection-">More macro detection <a href="https://github.com/open-goal/jak-project/pull/3436" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#more-macro-detection-" class="hash-link" aria-label="Direct link to more-macro-detection-" title="Direct link to more-macro-detection-" translate="no">​</a></h3>
<p><code>ja</code> macro detection was fixed and there is a now <code>part-tracker-spawn</code> macro detection. More changes to make the decompiler produce a much nicer end-result.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-self-referential-virtual-state-inheritance-">Support for self-referential virtual state inheritance <a href="https://github.com/open-goal/jak-project/pull/3438" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-mar-2024#support-for-self-referential-virtual-state-inheritance-" class="hash-link" aria-label="Direct link to support-for-self-referential-virtual-state-inheritance-" title="Direct link to support-for-self-referential-virtual-state-inheritance-" translate="no">​</a></h3>
<p>In Jak 3, they seemingly added support for virtual states inheriting from it's own type's fellow virtual states. Fun.</p>]]></content>
        <author>
            <name>Vaser</name>
            <uri>https://github.com/xTVaser</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - February 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-feb-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-feb-2024"/>
        <updated>2024-03-05T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[February 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Jak 3 decompilation progress is in full swing, as well as a few notable additions to the other games.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-feb-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.8</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="translation-contributions">Translation Contributions<a href="https://opengoal.dev/blog/progress-report-feb-2024#translation-contributions" class="hash-link" aria-label="Direct link to Translation Contributions" title="Direct link to Translation Contributions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="games">Games<a href="https://opengoal.dev/blog/progress-report-feb-2024#games" class="hash-link" aria-label="Direct link to Games" title="Direct link to Games" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Translation Progress for February" src="https://opengoal.dev/assets/images/i18n-games-7fb0780110d0b6d2769f290830a2a2b8.png" width="1507" height="340" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-feb-2024#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Translation Progress for February" src="https://opengoal.dev/assets/images/i18n-launcher-91a48813148f1995b3265770684f4796.png" width="1498" height="621" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="important-changes">Important Changes<a href="https://opengoal.dev/blog/progress-report-feb-2024#important-changes" class="hash-link" aria-label="Direct link to Important Changes" title="Direct link to Important Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="black-screen-when-launching-the-game">Black Screen when Launching the Game<a href="https://opengoal.dev/blog/progress-report-feb-2024#black-screen-when-launching-the-game" class="hash-link" aria-label="Direct link to Black Screen when Launching the Game" title="Direct link to Black Screen when Launching the Game" translate="no">​</a></h3>
<p>This has been a very highly reported issue since the release of Jak 2, with many duplicate issues and Discord threads <a href="https://github.com/open-goal/jak-project/issues/3279" target="_blank" rel="noopener noreferrer" class="">https://github.com/open-goal/jak-project/issues/3279</a></p>
<p>We seem to have narrowed this down to a problem not in our code, but in third-party software that causes similar issues in a whole host of other games and applications. The culprit appears to be <code>Nahimic</code> which is an audio thing pushed by various manufacturers (ASUS, Steelseries, etc).</p>
<div class="theme-admonition theme-admonition-important admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>important</div><div class="admonitionContent_BuS1"><p>If you have this issue, please try and follow the steps described here and see if that resolves the issue <a href="https://github.com/open-goal/jak-project/issues/3279#issuecomment-1975011557" target="_blank" rel="noopener noreferrer" class="">https://github.com/open-goal/jak-project/issues/3279#issuecomment-1975011557</a>.</p><p>If it does resolve the issue, let us know in the Discord so we can wrap this one up as "not our fault" and add relevant documentation to the installation guides.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="keyboard-controls-are-disabled-by-default-now-">Keyboard Controls are Disabled by Default now <a href="https://github.com/open-goal/jak-project/pull/3295" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#keyboard-controls-are-disabled-by-default-now-" class="hash-link" aria-label="Direct link to keyboard-controls-are-disabled-by-default-now-" title="Direct link to keyboard-controls-are-disabled-by-default-now-" translate="no">​</a></h3>
<p>Keyboard controls are now disabled by default in order to resolve unexpected behaviour caused by Steam Input that several users have ran into from time to time.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>It is important to note that if no controllers are detected, the keyboard controls will be temporarily enabled.</p></div></div>
<p>So why was this done?</p>
<p>Steam Input is something that tries to, among several things, improve controller support for games. One of the ways it accomplishes this is by mapping controller inputs to keyboard inputs, so when you press a button on your controller it simultaneously hits a respective key on your keyboard.</p>
<p>Users were complaining that when they pressed for example <code>X</code> on their controller, the game would pause, or in other words it would simultaneously hit <code>Start</code>. The "solution" for a while was to suggest closing Steam which is obviously less than ideal. You can probably already guess what the problem is from the above, <code>X</code> is bound to <code>Enter</code> on the keyboard via Steam Input and the game is simultaneously processing both inputs.</p>
<p>The game's input system has been explicitly designed to take in input from multiple sources simultaneously so TLDR -- you can't just temporarily ignore one source (and how would you know which is the right thing to ignore as well!). The straight-forward and consistent solution is to disable the keyboard by default as it is not the way most people play the games.</p>
<p>There is also a new way to enable or disable the keyboard setting via the "topbar" incase you have no way to navigate to the in-game pause menu to enable it for the first time. However in most situations this should not be required, as mentioned above, if no controllers are detected the keyboard inputs are automatically enabled for you.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/keyboard-toggle-545df8766f58486e1d7f85019a11222d.png" width="392" height="202" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-feb-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="accurate-autosplitting-on-orb-counts-during-screen-blackouts-">Accurate autosplitting on orb counts during screen blackouts <a href="https://github.com/open-goal/jak-project/pull/3297" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#accurate-autosplitting-on-orb-counts-during-screen-blackouts-" class="hash-link" aria-label="Direct link to accurate-autosplitting-on-orb-counts-during-screen-blackouts-" title="Direct link to accurate-autosplitting-on-orb-counts-during-screen-blackouts-" translate="no">​</a></h3>
<p>When the screen would blackout, orb counts would temporarily be <code>0</code> which would cause false-positive autosplitter splits, should be fixed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="better-mouse-support-">Better mouse support <a href="https://github.com/open-goal/jak-project/pull/3383" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#better-mouse-support-" class="hash-link" aria-label="Direct link to better-mouse-support-" title="Direct link to better-mouse-support-" translate="no">​</a></h3>
<p>Mouse settings are now properly wired up in Jak 2, additionally some bugs with the mouse support have been addressed. Most notably before it was not properly detecting when you stopped moving the mouse since it is entirely based on relative motion, now the game will detect when the mouse has stopped moving and reset the sticks to a neutral state.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="c-20-">C++ 20 <a href="https://github.com/open-goal/jak-project/pull/3193" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#c-20-" class="hash-link" aria-label="Direct link to c-20-" title="Direct link to c-20-" translate="no">​</a></h3>
<p>C++ 20 is the latest version of C++ that has widespread compiler support, so it's nice to have that updated. More standard library features to take advantage to cleanup some of our code.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cleanup-joint-decompression-">Cleanup Joint Decompression <a href="https://github.com/open-goal/jak-project/pull/3369" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#cleanup-joint-decompression-" class="hash-link" aria-label="Direct link to cleanup-joint-decompression-" title="Direct link to cleanup-joint-decompression-" translate="no">​</a></h3>
<p>The joint code has been cleaned up and documented, this may help us or someone else support importing and exporting animations!</p>
<p>This is also an optimization, the new joint decompression code is faster.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-sprite-distort-related-crash-">Fix Sprite-Distort Related Crash <a href="https://github.com/open-goal/jak-project/pull/3357" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#fix-sprite-distort-related-crash-" class="hash-link" aria-label="Direct link to fix-sprite-distort-related-crash-" title="Direct link to fix-sprite-distort-related-crash-" translate="no">​</a></h3>
<p>There is a potential crash when a level was loaded due to the <code>sprite-distort</code> tables not being initialized yet. This would result in a race, and the backend rendering code would sometimes crash. This is a long-standing bug that was "recently" (read months ago) made more likely once the sprite limit was raised -- the larger the table, the more likely it would hit an invalid uninitialized index.</p>
<p>This finally fixes that by ensuring the tables are initialized and we no longer have random startup crashes!</p>
<p>If you ever have a crash going forward with the log <code>weird sprite_distort startup crash happened again!</code> scream and let us know!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-feb-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-speedrun-categories-">Custom speedrun categories <a href="https://github.com/open-goal/jak-project/pull/3378" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#custom-speedrun-categories-" class="hash-link" aria-label="Direct link to custom-speedrun-categories-" title="Direct link to custom-speedrun-categories-" translate="no">​</a></h3>
<p>It is possible to create a JSON file with custom category settings, for example starting with certain cheats enabled, or with a game task pre-completed.</p>
<p>These custom categories can be made via the speedrunner menu and they live in (on windows for example) <code>AppData/OpenGOAL/jak2/features/speedrun-categories.json</code>.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>See the PR for the example file used in the demonstration video below, editing the file manually is required for removing, renaming and changing the starting continue point if it doesn't start from Fortress Escape</p></div></div>
<!--$--><video style="display:block;width:320px;height:180px" class="blog-video" src="/assets/medias/speedrun-categories-03d23123e2a7a36224ba66ace9b4582c.mp4" controls=""></video><!--/$-->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="high-fps-input-buffer-and-cloud-speed-">High-fps input buffer and cloud speed <a href="https://github.com/open-goal/jak-project/pull/3178" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#high-fps-input-buffer-and-cloud-speed-" class="hash-link" aria-label="Direct link to high-fps-input-buffer-and-cloud-speed-" title="Direct link to high-fps-input-buffer-and-cloud-speed-" translate="no">​</a></h3>
<p>The input buffer has been given a larger size depending on your framerate. Often times the frame buffer for inputs would be too small in practice on higher framerates, leading to inputs being dropped. For example the time between pressing <code>X</code> after jumping to double jump.</p>
<p>Additionally, the clouds should move at a more correct pace now.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-feb-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="decompilation-update------------">Decompilation Update <a href="https://github.com/open-goal/jak-project/pull/3377" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3374" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3373" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3371" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3370" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3365" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3364" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3363" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3359" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3362" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3352" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3356" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-feb-2024#decompilation-update------------" class="hash-link" aria-label="Direct link to decompilation-update------------" title="Direct link to decompilation-update------------" translate="no">​</a></h3>
<p>Many files have been decompiled in Jak 3 so far, many of which are simple ones or ones that were mostly unchanged from Jak 2.</p>
<p>One new feature that had to be detected and handled was inherited non-virtual states.</p>
<p>The ability to persist process stack-size overrides via a json file has already been added. This is nice because previously we would manually change these values in the files meaning we could accidentally revert that adjustment. When the stack size is too small, the game crashes, so this is one less thing to have to worry about causing a regression.</p>]]></content>
        <author>
            <name>Vaser</name>
            <uri>https://github.com/xTVaser</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - January 2024]]></title>
        <id>https://opengoal.dev/blog/progress-report-jan-2024</id>
        <link href="https://opengoal.dev/blog/progress-report-jan-2024"/>
        <updated>2024-01-29T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[January 2024's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>New year, new game.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-jan-2024#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.7</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_ah6ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_ah6ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="translation-contributions">Translation Contributions<a href="https://opengoal.dev/blog/progress-report-jan-2024#translation-contributions" class="hash-link" aria-label="Direct link to Translation Contributions" title="Direct link to Translation Contributions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="games">Games<a href="https://opengoal.dev/blog/progress-report-jan-2024#games" class="hash-link" aria-label="Direct link to Games" title="Direct link to Games" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Translation Progress for January" src="https://opengoal.dev/assets/images/i18n-games-5fff54f46ecbb8b7676231fadacdbf92.png" width="1635" height="859" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-jan-2024#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Translation Progress for January" src="https://opengoal.dev/assets/images/i18n-launcher-d035ddb0195ca6514702e8354cc83a2f.png" width="1647" height="777" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-jan-2024#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="modding-community-event-no-ooj-no-off-of-jetboard">Modding Community Event: No OoJ ("No Off of Jetboard")<a href="https://opengoal.dev/blog/progress-report-jan-2024#modding-community-event-no-ooj-no-off-of-jetboard" class="hash-link" aria-label="Direct link to Modding Community Event: No OoJ (&quot;No Off of Jetboard&quot;)" title="Direct link to Modding Community Event: No OoJ (&quot;No Off of Jetboard&quot;)" translate="no">​</a></h3>
<p>Are you interested in learning more about the programming language that powers Jak and Daxter or just want to experiment?</p>
<p>The modding community is currently hosting an event where they collaboratively work on a Jak 2 mod that permanently forces Jak to be on the jetboard. The idea is to help more people get into modding. There's a bunch of issues that can be worked on and are assigned difficulties, ranging from very easy to hard. Anybody interested is welcome to join, learn and help out.</p>
<p><a href="https://discord.gg/k5PKHta6d8" target="_blank" rel="noopener noreferrer" class="">Join the Unofficial OpenGOAL Modding Discord server</a> for more details.</p>
<p><img decoding="async" loading="lazy" alt="No Off of Jetboard" src="https://opengoal.dev/assets/images/no-ooj-7e366056b262c5e5ad6f518223ce43ff.png" width="1920" height="1079" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-jan-2024#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-remapping-bug-with-analog-triggers-">Fix Remapping Bug with Analog Triggers <a href="https://github.com/open-goal/jak-project/pull/3294" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#fix-remapping-bug-with-analog-triggers-" class="hash-link" aria-label="Direct link to fix-remapping-bug-with-analog-triggers-" title="Direct link to fix-remapping-bug-with-analog-triggers-" translate="no">​</a></h3>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-custom-screenshots-and-move-screenshot-directory-">Fix Custom Screenshots and Move Screenshot Directory <a href="https://github.com/open-goal/jak-project/pull/3339" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#fix-custom-screenshots-and-move-screenshot-directory-" class="hash-link" aria-label="Direct link to fix-custom-screenshots-and-move-screenshot-directory-" title="Direct link to fix-custom-screenshots-and-move-screenshot-directory-" translate="no">​</a></h3>
<p>A bug with taking custom resolution screenshots using the ImGui menu (accessed by pressing <code>Alt</code>) was fixed. The <code>screenshots</code> directory was also moved. It can now be found under <code>~/.config/OpenGOAL/game_name/screenshots</code> on Linux and <code>AppData\Roaming\OpenGOAL\game_name\screenshots</code> on Windows.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-jak-23-collision-extraction--">Support for Jak 2/3 Collision Extraction <a href="https://github.com/open-goal/jak-project/pull/3292" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3348" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#support-for-jak-23-collision-extraction--" class="hash-link" aria-label="Direct link to support-for-jak-23-collision-extraction--" title="Direct link to support-for-jak-23-collision-extraction--" translate="no">​</a></h3>
<p>Collision for Jak 2/3 levels can now be extracted in <code>.obj</code> format and there is now a <code>rip_collision</code> flag in the decompiler config for this.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-levels">Custom Levels<a href="https://opengoal.dev/blog/progress-report-jan-2024#custom-levels" class="hash-link" aria-label="Direct link to Custom Levels" title="Direct link to Custom Levels" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-glb-files-exported-with-gltf-20blender-40--">Support <code>.glb</code> Files Exported with glTF 2.0/Blender 4.0 <a href="https://github.com/open-goal/jak-project/pull/3268" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3322" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#support-glb-files-exported-with-gltf-20blender-40--" class="hash-link" aria-label="Direct link to support-glb-files-exported-with-gltf-20blender-40--" title="Direct link to support-glb-files-exported-with-gltf-20blender-40--" translate="no">​</a></h3>
<p>Previously, only <code>.glb</code> files that were exported using versions of Blender older than 4.0 would be supported for custom levels due to the way the GLB exporter for Blender 4.0 would store vertex colors.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="enum-support-in-lumps-">Enum Support in Lumps <a href="https://github.com/open-goal/jak-project/pull/3305" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#enum-support-in-lumps-" class="hash-link" aria-label="Direct link to enum-support-in-lumps-" title="Direct link to enum-support-in-lumps-" translate="no">​</a></h3>
<p>Some actor properties use numeric values, be it as a bitfield to toggle certain flags or a number to specify e.g. what type of collectable it is.</p>
<p>In the code, we have enums (such as <code>pickup-type</code>) for this that map to a specific number to make it easier to identify what the value means. When defining actors in custom levels, you had to use the corresponding numeric value for this, so instead of e.g. <code>(pickup-type fuel-cell)</code>, it would be <code>6</code>.</p>
<p>This change allows you to use enums inside of the custom level JSON and adds more lump types for special cases that use enums.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="automatically-sort-actors-by-id-">Automatically Sort Actors by ID <a href="https://github.com/open-goal/jak-project/pull/3315" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#automatically-sort-actors-by-id-" class="hash-link" aria-label="Direct link to automatically-sort-actors-by-id-" title="Direct link to automatically-sort-actors-by-id-" translate="no">​</a></h3>
<p>You can manually specify actor IDs when creating actors, but when giving actors IDs out of order, entity lookups would fail because the underlying code does a binary search that expects the entity list to be sorted.</p>
<p>Now, you can specify IDs in whatever order you like and the actor list will automatically be sorted and checked for duplicate IDs before the level is built.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="many-new-lump-types--">Many New Lump Types <a href="https://github.com/open-goal/jak-project/pull/3324" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3337" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#many-new-lump-types--" class="hash-link" aria-label="Direct link to many-new-lump-types--" title="Direct link to many-new-lump-types--" translate="no">​</a></h3>
<p>In addition to the <code>enum-int32</code>, <code>enum-uint32</code>, <code>water-height</code>, <code>eco-info</code> and <code>vector3m</code> lump types that were added with enum support, a good chunk of other new types were added:</p>
<ul>
<li class=""><code>cell-info</code>: Like <code>eco-info</code>, but automatically fills in the pickup type and amount, so you only need to define the <code>game-task</code>.</li>
<li class=""><code>buzzer-info</code>: Like <code>eco-info</code>, but automatically calculates the required <code>amount</code> value for the scout fly based on the scout fly ID (starting from 0) and the <code>game-task</code> given.</li>
<li class=""><code>symbol</code>: Allows you to define a list of symbols.</li>
<li class=""><code>type</code>: Like <code>symbol</code>, but defines a list of types instead.</li>
<li class=""><code>string</code>: Like <code>symbol</code> and <code>type</code>, but defines a list of strings instead.</li>
</ul>
<p>Examples for all of these and more can be found in <a href="https://github.com/open-goal/jak-project/blob/master/custom_levels/jak1/test-zone/test-zone.jsonc" target="_blank" rel="noopener noreferrer" class=""><code>test-zone.jsonc</code></a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-jan-2024#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-volume-falloff-for-vag-streams-">Fix Volume Falloff for VAG Streams <a href="https://github.com/open-goal/jak-project/pull/3314" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#fix-volume-falloff-for-vag-streams-" class="hash-link" aria-label="Direct link to fix-volume-falloff-for-vag-streams-" title="Direct link to fix-volume-falloff-for-vag-streams-" translate="no">​</a></h3>
<p>Voice lines that play will now properly have their volume lowered depending on the camera's distance to the sound origin.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-shadow-bug-on-precursor-orbs-">Fix Shadow Bug on Precursor Orbs <a href="https://github.com/open-goal/jak-project/pull/3271" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#fix-shadow-bug-on-precursor-orbs-" class="hash-link" aria-label="Direct link to fix-shadow-bug-on-precursor-orbs-" title="Direct link to fix-shadow-bug-on-precursor-orbs-" translate="no">​</a></h3>
<p>Due to a small bug in the decompiler output, orb shadows were broken.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-pc-cheats-added-to-menu-">New PC Cheats Added to Menu <a href="https://github.com/open-goal/jak-project/pull/3275" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#new-pc-cheats-added-to-menu-" class="hash-link" aria-label="Direct link to new-pc-cheats-added-to-menu-" title="Direct link to new-pc-cheats-added-to-menu-" translate="no">​</a></h3>
<p>The new cheats that were teased back in the <a href="https://opengoal.dev/blog/progress-report-aug-2023#new-secrets" target="_blank" rel="noopener noreferrer" class="">August 2023 report</a> have now been fully integrated into the game's menu! You can find them at the bottom of the secrets menu. Some of them will just require a specific number of orbs, others will require you to complete certain challenges, just like Ratchet and Clank's skill point system.</p>
<p><img decoding="async" loading="lazy" alt="PC Cheats Menu" src="https://opengoal.dev/assets/images/pc-cheats-772aeafe2b2260982ad1c1405264ab57.png" width="1390" height="880" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="statistics-tracker-">Statistics Tracker <a href="https://github.com/open-goal/jak-project/pull/3288" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#statistics-tracker-" class="hash-link" aria-label="Direct link to statistics-tracker-" title="Direct link to statistics-tracker-" translate="no">​</a></h3>
<p>Another miscellaneous feature that we're adding is a tracker for a bunch of statistics like total kills with all weapons and types of attacks like spins, punches, uppercuts, etc.</p>
<p>There is no menu for it yet, but a lot of the groundwork is in place.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-jan-2024#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="final-prep-work-for-decompilation------">Final Prep Work for Decompilation <a href="https://github.com/open-goal/jak-project/pull/3300" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3098" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3310" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3311" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3308" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3316" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#final-prep-work-for-decompilation------" class="hash-link" aria-label="Direct link to final-prep-work-for-decompilation------" title="Direct link to final-prep-work-for-decompilation------" translate="no">​</a></h3>
<p>Earlier this month, we started cleaning up the last remaining loose ends preventing us from fully getting started on decompiling Jak 3, most crucial of which was the decompilation of the C kernel, required for setting up the game's runtime and bootstrapping the GOAL kernel in order to build and load GOAL code.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3-decompilation-has-officially-started-----------------">Jak 3 Decompilation Has Officially Started <a href="https://github.com/open-goal/jak-project/pull/3319" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3321" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3326" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3332" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3328" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3330" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3331" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3333" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3334" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3335" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3338" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3340" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3344" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3345" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3346" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3347" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3349" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-jan-2024#jak-3-decompilation-has-officially-started-----------------" class="hash-link" aria-label="Direct link to jak-3-decompilation-has-officially-started-----------------" title="Direct link to jak-3-decompilation-has-officially-started-----------------" translate="no">​</a></h3>
<p>With all the loose ends tied up, we wasted no time getting back into decomp:</p>
<p><img decoding="async" loading="lazy" alt="Graph of Jak 3 Decompilation Progress from 1/19/24 to 1/28/24" src="https://opengoal.dev/assets/images/j3-decomp-progress-0148ac4c3fda09fe74ae4f4731d8ffbc.png" width="770" height="368" class="img_ev3q"></p>
<p>(As a comparison, reaching 20k lines of code in Jak 1 took about 167 days and Jak 2 took a few weeks.)</p>
<p>Jak 3 has just about 1000 files we need to go through, compared to Jak 2's 811 files. In less than 10 days, we already finished over 100 of the early engine files. This, however, doesn't mean the rest of the files will be done as quickly because the majority of these files were extremely similar, if not identical to Jak 2 thus far. Once we're done with the engine files (which is ~440 files), most of the mission and gameplay code will be completely new.</p>
<p>It will be a while before the game can actually "boot", as we still need to go through a bunch more files to get the main game loop up and running. Once we get there, though, there is some hope that we will be able to reimplement the main foreground and background renderers much more quickly than we did for Jak 2, as a lot of the code appears to be basically unchanged, with the exception of one new renderer added in Jak 3 (<code>hfrag</code>) used to draw the desert dunes.</p>
<p>The website has not yet been set up to track Jak 3 decompilation progress, but we should hopefully have that in place soon so you can follow along.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - November 2023]]></title>
        <id>https://opengoal.dev/blog/progress-report-nov-2023</id>
        <link href="https://opengoal.dev/blog/progress-report-nov-2023"/>
        <updated>2023-12-17T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[November 2023's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>Slightly belated this time around.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-nov-2023#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.2.4</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_l16ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_l16ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="community-spotlight">Community Spotlight<a href="https://opengoal.dev/blog/progress-report-nov-2023#community-spotlight" class="hash-link" aria-label="Direct link to Community Spotlight" title="Direct link to Community Spotlight" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-forgotten-lands---chapter-2-by-kuitar">The Forgotten Lands - Chapter 2 by Kuitar<a href="https://opengoal.dev/blog/progress-report-nov-2023#the-forgotten-lands---chapter-2-by-kuitar" class="hash-link" aria-label="Direct link to The Forgotten Lands - Chapter 2 by Kuitar" title="Direct link to The Forgotten Lands - Chapter 2 by Kuitar" translate="no">​</a></h3>
<p>After 10 months since the release of Crystal Cave, Kuitar is back at it again with the second chapter of his mod "The Forgotten Lands", a new adventure with a new storyline and levels to explore! Featuring numerous additions and improvements to Crystal Cave as well as a bunch of completely new content, you can check it out in the <a href="https://jakmods.dev/" target="_blank" rel="noopener noreferrer" class="">unofficial mod launcher</a>.</p>
<p>Kuitar and I have also written a small release blog with some behind the scenes info on the level creation process and the code for the custom actors and music/hint systems you can check out <a href="https://docs.google.com/document/d/1YBty5hZeAzFM2U7N3czlNhNrTFMq6NGaBxrtLF3n3nY" target="_blank" rel="noopener noreferrer" class="">here</a> (it is recommended you play the mod first before reading it as it spoils some of the new content).</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/tfl-f4bc496856f2c3f1db0460f873904d0e.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="translation-contributions">Translation Contributions<a href="https://opengoal.dev/blog/progress-report-nov-2023#translation-contributions" class="hash-link" aria-label="Direct link to Translation Contributions" title="Direct link to Translation Contributions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="games">Games<a href="https://opengoal.dev/blog/progress-report-nov-2023#games" class="hash-link" aria-label="Direct link to Games" title="Direct link to Games" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/i18n-games-c56b948e9904129933b45f16366e8477.png" width="1640" height="414" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-nov-2023#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/i18n-launcher-d4ca7d73a5fe41981860871097a25b85.png" width="1629" height="406" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-nov-2023#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-jak-2-custom-text-to-crowdin-">Add Jak 2 Custom Text to Crowdin <a href="https://github.com/open-goal/jak-project/pull/3141" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#add-jak-2-custom-text-to-crowdin-" class="hash-link" aria-label="Direct link to add-jak-2-custom-text-to-crowdin-" title="Direct link to add-jak-2-custom-text-to-crowdin-" translate="no">​</a></h3>
<p>Custom text we added in Jak 2 can now be translated via Crowdin. This does not include the original game's cutscene subtitles yet, but does include the new hint subtitles that were transcribed from the voice lines that play outside of cutscenes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="allow-replacing-all-instances-of-a-texture-with-one-texture-">Allow Replacing All Instances of a Texture with One Texture <a href="https://github.com/open-goal/jak-project/pull/3234" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#allow-replacing-all-instances-of-a-texture-with-one-texture-" class="hash-link" aria-label="Direct link to allow-replacing-all-instances-of-a-texture-with-one-texture-" title="Direct link to allow-replacing-all-instances-of-a-texture-with-one-texture-" translate="no">​</a></h3>
<p>Previously, if you wanted to e.g. replace the textures for the Babak Lurker, this would have required replacing every instance of the texture for each level it appears in.</p>
<p>With this change, you can just put your replacement texture in an <code>_all</code> folder and it will automatically replace the texture wherever it appears. The normal path takes priority over the <code>_all</code> folder, so you can still replace textures on a per-level basis if you so choose.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-nov-2023#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-projectile-bug-">Fix Projectile Bug <a href="https://github.com/open-goal/jak-project/pull/3187" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fix-projectile-bug-" class="hash-link" aria-label="Direct link to fix-projectile-bug-" title="Direct link to fix-projectile-bug-" translate="no">​</a></h3>
<p>A decompilation mistake was causing the Mother Spider's projectile to die immediately upon spawning.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-nov-2023#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fallback-english-text-">Fallback English Text <a href="https://github.com/open-goal/jak-project/pull/3128" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fallback-english-text-" class="hash-link" aria-label="Direct link to fallback-english-text-" title="Direct link to fallback-english-text-" translate="no">​</a></h3>
<p>When using a language other than English that does not have a particular string localized, instead of using an <code>UNKNOWN ID</code> placeholder, the game will now fall back to the English version of the string.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improve-sky-performance-">Improve Sky Performance <a href="https://github.com/open-goal/jak-project/pull/3130" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#improve-sky-performance-" class="hash-link" aria-label="Direct link to improve-sky-performance-" title="Direct link to improve-sky-performance-" translate="no">​</a></h3>
<p>On launch day, we got many reports of users getting terrible performance upon entering an outdoors area. It turns out this was an issue with Intel GPU drivers, where putting a lot of static data inside of shaders related to texture animations for the slime in the Weapons Lab would cause massive performance drops in the Sky renderer.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dont-force-uk-english-on-pal-version-">Don't Force UK English on PAL version <a href="https://github.com/open-goal/jak-project/pull/3142" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#dont-force-uk-english-on-pal-version-" class="hash-link" aria-label="Direct link to dont-force-uk-english-on-pal-version-" title="Direct link to dont-force-uk-english-on-pal-version-" translate="no">​</a></h3>
<p>People who used a PAL ISO to decompile the game would have unlocalized menu options for any custom text because the game language would be forced to UK English.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-crash-during-jetboard-training-in-japanese--">Fix Crash During Jetboard Training in Japanese <a href="https://github.com/open-goal/jak-project/pull/3143" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3171" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fix-crash-during-jetboard-training-in-japanese--" class="hash-link" aria-label="Direct link to fix-crash-during-jetboard-training-in-japanese--" title="Direct link to fix-crash-during-jetboard-training-in-japanese--" translate="no">​</a></h3>
<p>Due to an unhandled character sequence, the game would crash when trying to print a particular Japanese string.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-various-high-fps-bugs--">Fix Various High FPS Bugs <a href="https://github.com/open-goal/jak-project/pull/3147" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3177" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fix-various-high-fps-bugs--" class="hash-link" aria-label="Direct link to fix-various-high-fps-bugs--" title="Direct link to fix-various-high-fps-bugs--" translate="no">​</a></h3>
<ul>
<li class="">At higher frame rates (144+), the Palace rotation effect when you're in the Throne Room would be broken because the rotation angle would become so small that some trigonometry functions would end up returning 0.</li>
<li class="">First person camera turning speed.</li>
<li class="">Speed of the texture scroll effect.</li>
<li class="">Speed of the minimap wanted flash.</li>
<li class="">Speed of flashing icons on the minimap (such as the kid during the escort kid mission).</li>
<li class="">Ambush speed of Ginsu Metal Heads.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="localize-trick-board-names-and-use-large-font--">Localize Trick Board Names and Use Large Font <a href="https://github.com/open-goal/jak-project/pull/3157" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3161" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#localize-trick-board-names-and-use-large-font--" class="hash-link" aria-label="Direct link to localize-trick-board-names-and-use-large-font--" title="Direct link to localize-trick-board-names-and-use-large-font--" translate="no">​</a></h3>
<p>Previously, the newly added board trick display just used the actual enum values for the trick names, now the names have been localized properly and it was changed to use the large font.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/trick-names-2487f9bd34b4d18424e9810e1787e72d.png" width="720" height="540" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-missing-pc-options-to-progress-menu--">Add Missing PC Options to Progress Menu <a href="https://github.com/open-goal/jak-project/pull/3167" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3238" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#add-missing-pc-options-to-progress-menu--" class="hash-link" aria-label="Direct link to add-missing-pc-options-to-progress-menu--" title="Direct link to add-missing-pc-options-to-progress-menu--" translate="no">​</a></h3>
<p>On launch, we were missing a lot of options in the menus that we still had to hook up, such as MSAA, resolution, PS2 Options and the ability to quit the game from the title screen menu.</p>
<p>This also implemented the previously non-functional camera options, though they are still ineffective when entering a turret as of right now.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-missing-discord-rpc-mission-images-when-not-in-debug-mode-">Fix Missing Discord RPC Mission Images When Not in Debug Mode <a href="https://github.com/open-goal/jak-project/pull/3176" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fix-missing-discord-rpc-mission-images-when-not-in-debug-mode-" class="hash-link" aria-label="Direct link to fix-missing-discord-rpc-mission-images-when-not-in-debug-mode-" title="Direct link to fix-missing-discord-rpc-mission-images-when-not-in-debug-mode-" translate="no">​</a></h3>
<p>When playing the game in retail mode, the level icons would not show up on Discord's Rich Presence when a mission was active.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="speedrunner-mode-improvements----">Speedrunner Mode Improvements <a href="https://github.com/open-goal/jak-project/pull/3131" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3132" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3181" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3182" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#speedrunner-mode-improvements----" class="hash-link" aria-label="Direct link to speedrunner-mode-improvements----" title="Direct link to speedrunner-mode-improvements----" translate="no">​</a></h3>
<ul>
<li class="">Automatically re-enable autosave when a speedrun is started.</li>
<li class="">Allow opening the Speedrun Menu with L1 + R1 + Start.</li>
<li class="">Dialogue no longer interferes with using Warp Gates or starting cutscenes.</li>
<li class="">Added Category Support to Speedrun Menu.</li>
<li class="">Back up and restore cheats when Speedrunner Mode is disabled.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-select-controller-option-in-menu-">Fix "Select Controller" Option in Menu <a href="https://github.com/open-goal/jak-project/pull/3191" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fix-select-controller-option-in-menu-" class="hash-link" aria-label="Direct link to fix-select-controller-option-in-menu-" title="Direct link to fix-select-controller-option-in-menu-" translate="no">​</a></h3>
<p>The "Select Controller" option in the menu was not working properly before.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="transcribe-remaining-english-subtitles-">Transcribe Remaining English Subtitles <a href="https://github.com/open-goal/jak-project/pull/3199" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#transcribe-remaining-english-subtitles-" class="hash-link" aria-label="Direct link to transcribe-remaining-english-subtitles-" title="Direct link to transcribe-remaining-english-subtitles-" translate="no">​</a></h3>
<p>The remaining English voice lines that play outside of cutscenes have been transcribed.</p>
<p>Some people have already started translating them to other languages, if you are interested in helping out, check out our <a href="https://crowdin.com/project/opengoal" target="_blank" rel="noopener noreferrer" class="">Crowdin page</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="vehicle-hijack-lines-pc-cheat-">Vehicle Hijack Lines PC Cheat <a href="https://github.com/open-goal/jak-project/pull/3205" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#vehicle-hijack-lines-pc-cheat-" class="hash-link" aria-label="Direct link to vehicle-hijack-lines-pc-cheat-" title="Direct link to vehicle-hijack-lines-pc-cheat-" translate="no">​</a></h3>
<p>Jak 2 has a <strong>lot</strong> of unused voice lines that still remain in the game files. One example of this are Jak and civilian voice lines that would have played when stealing a zoomer, similar to GTA.</p>
<p>A while back, I uploaded a video on my channel, showing off what the feature would have looked like (with a very high chance to play for demonstration purposes):</p>
<!--$?--><template id="B:0"></template><!--/$-->
<br>
<p>Due to popular demand, I decided to add this feature to OpenGOAL as one of the new PC cheats. When enabled, it has a random chance to play one of the Jak lines and a subsequent civilian line when stealing a zoomer (or only a Jak line when stealing a KG Bike/Hellcat).</p>
<p>The PC cheats are currently not yet fully done and can only be used via the REPL for now, but once they are complete and a menu for them is added, you will be able to adjust this random chance if you feel it happens too frequently.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-enemy-death-sounds-not-playing-">Fix Enemy Death Sounds Not Playing <a href="https://github.com/open-goal/jak-project/pull/3206" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fix-enemy-death-sounds-not-playing-" class="hash-link" aria-label="Direct link to fix-enemy-death-sounds-not-playing-" title="Direct link to fix-enemy-death-sounds-not-playing-" translate="no">​</a></h3>
<p>Enemies would previously not play their death sound due to a small bug.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-dark-jak-punch-and-samos-sounds-">Fix Dark Jak Punch and Samos Sounds <a href="https://github.com/open-goal/jak-project/pull/3214" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fix-dark-jak-punch-and-samos-sounds-" class="hash-link" aria-label="Direct link to fix-dark-jak-punch-and-samos-sounds-" title="Direct link to fix-dark-jak-punch-and-samos-sounds-" translate="no">​</a></h3>
<p>The Dark Jak punch sound and some Young Samos sounds should now play.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="increase-level-graphics-loading-speed-and-fix-stuttering-during-unloading-">Increase Level Graphics Loading Speed And Fix Stuttering During Unloading <a href="https://github.com/open-goal/jak-project/pull/3227" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#increase-level-graphics-loading-speed-and-fix-stuttering-during-unloading-" class="hash-link" aria-label="Direct link to increase-level-graphics-loading-speed-and-fix-stuttering-during-unloading-" title="Direct link to increase-level-graphics-loading-speed-and-fix-stuttering-during-unloading-" translate="no">​</a></h3>
<p>There have been some reports of people entering a level before the game had time to load in the level graphics, so the loading speed has been increased.</p>
<p>Similarly, during level graphics unloading, some people would encounter stutters, so fewer things are being unloaded per frame now.</p>
<p>This only affects the graphics and not any actual level loads.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-per-prototype-shrub-visibility-">Support for Per-Prototype Shrub Visibility <a href="https://github.com/open-goal/jak-project/pull/3228" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#support-for-per-prototype-shrub-visibility-" class="hash-link" aria-label="Direct link to support-for-per-prototype-shrub-visibility-" title="Direct link to support-for-per-prototype-shrub-visibility-" translate="no">​</a></h3>
<p>There have been many (too many...) reports of people thinking that the Strip Mine Eco Wells mission was not completable because of a missing rail section. The confusion only compounded because it looked like part of the rails were visible in OpenGOAL.</p>
<p>In reality, these rails are not needed at all to complete the mission and are, in fact, completely hidden on PS2, only showing up on the next Strip Mine visit where you have to drop the crate onto the Metal Head eggs.</p>
<p>OpenGOAL simply failed to hide the part of the rails that is made up of "shrubs". This bug has been fixed, which should hopefully clear up the confusion.</p>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/strip-grenade-d18701b157e701c81f654ee4cd8c7a7e.png" width="1440" height="900" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="split-up-language-and-text-language-settings-">Split up Language and Text Language settings <a href="https://github.com/open-goal/jak-project/pull/3233" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#split-up-language-and-text-language-settings-" class="hash-link" aria-label="Direct link to split-up-language-and-text-language-settings-" title="Direct link to split-up-language-and-text-language-settings-" translate="no">​</a></h3>
<p>Text language is now a new setting that can be selected separately from voice language.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-deadzone-setting-">Support Deadzone Setting <a href="https://github.com/open-goal/jak-project/pull/3239" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#support-deadzone-setting-" class="hash-link" aria-label="Direct link to support-deadzone-setting-" title="Direct link to support-deadzone-setting-" translate="no">​</a></h3>
<p>The analog deadzone setting would previously, like the camera options, not have any effect when changed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-use-after-free-bug-in-children-of-nav-enemy-">Fix Use-After-Free Bug in Children of <code>nav-enemy</code> <a href="https://github.com/open-goal/jak-project/pull/3240" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#fix-use-after-free-bug-in-children-of-nav-enemy-" class="hash-link" aria-label="Direct link to fix-use-after-free-bug-in-children-of-nav-enemy-" title="Direct link to fix-use-after-free-bug-in-children-of-nav-enemy-" translate="no">​</a></h3>
<p>This bug was the cause of some random crashes in the city and even though we knew about it for many months, it took us a very long time to finally figure it out. We even had a consistent setup for reproducing it, but had no clue what was causing it because the error we got was quite mysterious.</p>
<p>In the end, we found that it always happened when the current level was unloaded while a civilian was cowering on the ground due to Jak using the jetboard near them. This eventually lead to us finally realizing the cause was that during level unloading, the level's navigation mesh is unloaded, invalidating the <code>nav-control</code> for any process using that nav mesh, but the code for the civilian's <code>cower-ground</code> state is still trying to use it, crashing the game.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-menu-option-for-setting-game-territory--">Add Menu Option for Setting Game Territory <a href="https://github.com/open-goal/jak-project/pull/3242" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3243" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#add-menu-option-for-setting-game-territory--" class="hash-link" aria-label="Direct link to add-menu-option-for-setting-game-territory--" title="Direct link to add-menu-option-for-setting-game-territory--" translate="no">​</a></h3>
<p>You can now select the territory the game should use. Useful if you want to e.g. play the game with civilians as they would behave in the Japanese version of the game.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-90-fps-menu-option-">Add 90 FPS Menu Option <a href="https://github.com/open-goal/jak-project/pull/3245" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-nov-2023#add-90-fps-menu-option-" class="hash-link" aria-label="Direct link to add-90-fps-menu-option-" title="Direct link to add-90-fps-menu-option-" translate="no">​</a></h3>
<p>A 90 FPS option was added to the frame rate setting for Steam Deck OLED users.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progress Report - October 2023]]></title>
        <id>https://opengoal.dev/blog/progress-report-oct-2023</id>
        <link href="https://opengoal.dev/blog/progress-report-oct-2023"/>
        <updated>2023-10-30T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[October 2023's OpenGOAL progress report]]></summary>
        <content type="html"><![CDATA[
<p>The wait is finally over.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-info">Release Info<a href="https://opengoal.dev/blog/progress-report-oct-2023#release-info" class="hash-link" aria-label="Direct link to Release Info" title="Direct link to Release Info" translate="no">​</a></h2>
<p>This month's OpenGOAL Tooling (jak-project repo) release is <code>0.1.44</code>.</p>
<div class="row markdownMarginBottom"><div class="col col--12"><div class="downloadWrapper"><style data-emotion="css 1ff5bwp">.css-1ff5bwp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-1ff5bwp:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1ff5bwp.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1ff5bwp:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1ff5bwp.MuiButton-loading{color:transparent;}.css-1ff5bwp:hover{background-color:rgb(247, 92, 0);}</style><style data-emotion="css tgggh8">.css-tgggh8{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:#f77223;color:black;padding:0.5em;font-weight:600;font-size:1em;border-top-right-radius:0;border-bottom-right-radius:0;}.css-tgggh8::-moz-focus-inner{border-style:none;}.css-tgggh8.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-tgggh8{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-tgggh8:hover{-webkit-text-decoration:none;text-decoration:none;}.css-tgggh8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-tgggh8:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-tgggh8.MuiButton-loading{color:transparent;}.css-tgggh8:hover{background-color:rgb(247, 92, 0);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter Mui-disabled MuiButton-root MuiButton-loading MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-loadingPositionCenter css-tgggh8" tabindex="-1" type="button" disabled="" id="_R_l16ldeh_"><span class="MuiButton-loadingWrapper" style="display:contents"><style data-emotion="css kom8zh">.css-kom8zh{display:none;position:absolute;visibility:visible;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);color:rgba(0, 0, 0, 0.26);}</style><span class="MuiButton-loadingIndicator css-kom8zh"><style data-emotion="css 1ydh0tu animation-61bdi0">.css-1ydh0tu{display:inline-block;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorInherit css-1ydh0tu" style="width:16px;height:16px" role="progressbar" aria-labelledby="_R_l16ldeh_"><style data-emotion="css 4ejps8">.css-4ejps8{display:block;}</style><svg class="MuiCircularProgress-svg css-4ejps8" viewBox="22 22 44 44"><style data-emotion="css 13odlrs animation-1o38n3e">.css-13odlrs{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1o38n3e 1.4s ease-in-out infinite;animation:animation-1o38n3e 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}@keyframes animation-1o38n3e{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:1px,200px;stroke-dashoffset:-126px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-13odlrs" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></span></span><svg aria-hidden="true" focusable="false" class="octicon octicon-move-to-bottom" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 21.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H4.75a.75.75 0 0 1-.75-.75ZM5.22 9.97a.749.749 0 0 1 1.06 0l4.97 4.969V2.75a.75.75 0 0 1 1.5 0v12.189l4.97-4.969a.749.749 0 1 1 1.06 1.06l-6.25 6.25a.749.749 0 0 1-1.06 0l-6.25-6.25a.749.749 0 0 1 0-1.06Z"></path></svg><span style="margin-left:0.5em"> Launcher @ </span></button><style data-emotion="css 34rjtj">.css-34rjtj{background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-34rjtj:hover{background-color:rgb(247, 92, 0);}.css-34rjtj.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-34rjtj.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-34rjtj.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css-global 1prfaxn">@-webkit-keyframes mui-auto-fill{from{display:block;}}@keyframes mui-auto-fill{from{display:block;}}@-webkit-keyframes mui-auto-fill-cancel{from{display:block;}}@keyframes mui-auto-fill-cancel{from{display:block;}}</style><style data-emotion="css 1oeh1rp">.css-1oeh1rp{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:400;font-size:1rem;line-height:1.4375em;letter-spacing:0.00938em;color:rgba(0, 0, 0, 0.87);box-sizing:border-box;position:relative;cursor:text;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;border-radius:4px;background-color:#f77223;border-top-left-radius:0;border-bottom-left-radius:0;margin-right:1em;}.css-1oeh1rp.Mui-disabled{color:rgba(0, 0, 0, 0.38);cursor:default;}.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.87);}@media (hover: none){.css-1oeh1rp:hover .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.23);}}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-width:2px;}.css-1oeh1rp.Mui-focused .MuiOutlinedInput-notchedOutline{border-color:#1976d2;}.css-1oeh1rp.Mui-error .MuiOutlinedInput-notchedOutline{border-color:#d32f2f;}.css-1oeh1rp.Mui-disabled .MuiOutlinedInput-notchedOutline{border-color:rgba(0, 0, 0, 0.26);}.css-1oeh1rp:hover{background-color:rgb(247, 92, 0);}.css-1oeh1rp.MuiOutlinedInput-root div.MuiSelect-select{padding-right:24px;}.css-1oeh1rp.MuiOutlinedInput-root:hover fieldset{border-color:rgba(0, 0, 0, 0.23);}.css-1oeh1rp.MuiOutlinedInput-root.Mui-focused fieldset{border-color:rgba(0, 0, 0, 0.23);}</style><div class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-disabled MuiSelect-root css-1oeh1rp"><style data-emotion="css 1pk1fka">.css-1pk1fka{font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-1pk1fka::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-1pk1fka:focus{outline:0;}.css-1pk1fka:invalid{box-shadow:none;}.css-1pk1fka::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-1pk1fka:focus::-ms-input-placeholder{opacity:0.42;}.css-1pk1fka.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-1pk1fka:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-1pk1fka:-webkit-autofill{border-radius:inherit;}</style><style data-emotion="css mp9f0v">.css-mp9f0v{-moz-appearance:none;-webkit-appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0;cursor:pointer;border-radius:4px;font:inherit;letter-spacing:inherit;color:currentColor;padding:4px 0 5px;border:0;box-sizing:content-box;background:none;height:1.4375em;margin:0;-webkit-tap-highlight-color:transparent;display:block;min-width:0;width:100%;-webkit-animation-name:mui-auto-fill-cancel;animation-name:mui-auto-fill-cancel;-webkit-animation-duration:10ms;animation-duration:10ms;padding:16.5px 14px;}.css-mp9f0v:focus{border-radius:0;}.css-mp9f0v.Mui-disabled{cursor:default;}.css-mp9f0v[multiple]{height:auto;}.css-mp9f0v:not([multiple]) option,.css-mp9f0v:not([multiple]) optgroup{background-color:#fff;}.css-mp9f0v:focus{border-radius:4px;}.css-mp9f0v.css-mp9f0v.css-mp9f0v{padding-right:32px;}.css-mp9f0v.MuiSelect-select{height:auto;min-height:1.4375em;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}.css-mp9f0v::-webkit-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-moz-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v::-ms-input-placeholder{color:currentColor;opacity:0.42;-webkit-transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;}.css-mp9f0v:focus{outline:0;}.css-mp9f0v:invalid{box-shadow:none;}.css-mp9f0v::-webkit-search-decoration{-webkit-appearance:none;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-webkit-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-moz-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v::-ms-input-placeholder{opacity:0!important;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-webkit-input-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-moz-placeholder{opacity:0.42;}label[data-shrink=false]+.MuiInputBase-formControl .css-mp9f0v:focus::-ms-input-placeholder{opacity:0.42;}.css-mp9f0v.Mui-disabled{opacity:1;-webkit-text-fill-color:rgba(0, 0, 0, 0.38);}.css-mp9f0v:-webkit-autofill{-webkit-animation-duration:5000s;animation-duration:5000s;-webkit-animation-name:mui-auto-fill;animation-name:mui-auto-fill;}.css-mp9f0v:-webkit-autofill{border-radius:inherit;}</style><div role="combobox" aria-disabled="true" aria-expanded="false" aria-haspopup="listbox" class="MuiSelect-select MuiSelect-outlined Mui-disabled MuiInputBase-input MuiOutlinedInput-input Mui-disabled css-mp9f0v"><span class="notranslate" aria-hidden="true">​</span></div><style data-emotion="css 147e5lo">.css-147e5lo{bottom:0;left:0;position:absolute;opacity:0;pointer-events:none;width:100%;box-sizing:border-box;}</style><input aria-invalid="false" aria-hidden="true" tabindex="-1" disabled="" class="MuiSelect-nativeInput css-147e5lo"><style data-emotion="css 1g8ch8">.css-1g8ch8{position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1g8ch8.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><style data-emotion="css 1l3b12y">.css-1l3b12y{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;position:absolute;right:0;top:calc(50% - .5em);pointer-events:none;color:rgba(0, 0, 0, 0.54);right:7px;}.css-1l3b12y.Mui-disabled{color:rgba(0, 0, 0, 0.26);}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined Mui-disabled css-1l3b12y" focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M7 10l5 5 5-5z"></path></svg><style data-emotion="css h2v8xi">.css-h2v8xi{border-color:rgba(0, 0, 0, 0.23);}</style><style data-emotion="css 5v2ak0">.css-5v2ak0{text-align:left;position:absolute;bottom:0;right:0;top:-5px;left:0;margin:0;padding:0 8px;pointer-events:none;border-radius:inherit;border-style:solid;border-width:1px;overflow:hidden;min-width:0%;border-color:rgba(0, 0, 0, 0.23);}</style><fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-5v2ak0"><style data-emotion="css w4cd9x">.css-w4cd9x{float:unset;width:auto;overflow:hidden;padding:0;line-height:11px;-webkit-transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;transition:width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms;}</style><legend class="css-w4cd9x"><span class="notranslate" aria-hidden="true">​</span></legend></fieldset></div><style data-emotion="css 1gh6oj0">.css-1gh6oj0{font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-1gh6oj0:hover{-webkit-text-decoration:none;text-decoration:none;}.css-1gh6oj0.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-1gh6oj0:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-1gh6oj0.MuiButton-loading{color:transparent;}.css-1gh6oj0:hover{background-color:rgb(77, 42, 22);}</style><style data-emotion="css 19sd6hb">.css-19sd6hb{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;font-family:"Roboto","Helvetica","Arial",sans-serif;font-weight:500;font-size:0.875rem;line-height:1.75;letter-spacing:0.02857em;text-transform:uppercase;min-width:64px;padding:6px 16px;border:0;border-radius:4px;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:6px 8px;color:var(--variant-textColor);background-color:var(--variant-textBg);--variant-textColor:#1976d2;--variant-outlinedColor:#1976d2;--variant-outlinedBorder:rgba(25, 118, 210, 0.5);--variant-containedColor:#fff;--variant-containedBg:#1976d2;-webkit-transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-family:Roboto Mono;background-color:rgb(49, 28, 16);color:#f77223;padding:0.5em;font-weight:600;font-size:1em;border-color:rgb(247, 92, 0);}.css-19sd6hb::-moz-focus-inner{border-style:none;}.css-19sd6hb.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-19sd6hb{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-19sd6hb:hover{-webkit-text-decoration:none;text-decoration:none;}.css-19sd6hb.Mui-disabled{color:rgba(0, 0, 0, 0.26);}@media (hover: hover){.css-19sd6hb:hover{--variant-containedBg:#1565c0;--variant-textBg:rgba(25, 118, 210, 0.04);--variant-outlinedBorder:#1976d2;--variant-outlinedBg:rgba(25, 118, 210, 0.04);}}.css-19sd6hb.MuiButton-loading{color:transparent;}.css-19sd6hb:hover{background-color:rgb(77, 42, 22);}</style><button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary css-19sd6hb" tabindex="0" type="button">Getting Started</button></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2-beta-release">Jak 2 Beta Release<a href="https://opengoal.dev/blog/progress-report-oct-2023#jak-2-beta-release" class="hash-link" aria-label="Direct link to Jak 2 Beta Release" title="Direct link to Jak 2 Beta Release" translate="no">​</a></h2>
<p>With this month, the long wait is finally over! We feel that Jak 2 is now in a good enough state to release as an open beta on the launcher. It is still not perfect and we are aware of some remaining bugs that we still need to iron out, but the game is 100% completable!</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>You will require the latest version of the launcher <strong>2.3.0</strong> to install and play Jak 2 with it!</p></div></div>
<p>Coinciding with this release, we have put together an updated tutorial for newcomers on how to install the game, some common troubleshooting steps and how to report any issues you may experience:</p>
<!--$?--><template id="B:0"></template><!--/$-->
<p><a href="https://github.com/orgs/open-goal/projects/3/views/8" target="_blank" rel="noopener noreferrer" class="">We have a project board on our GitHub</a> that lists known bugs for Jak 2.
If you encounter anything that is not listed there, you can:</p>
<ul>
<li class=""><a href="https://github.com/open-goal/jak-project/issues" target="_blank" rel="noopener noreferrer" class="">Create an issue on GitHub</a> using the Jak 2 bug report template, filling out as much information as you can.</li>
<li class=""><a href="https://discord.gg/ugmTTV2wGP" target="_blank" rel="noopener noreferrer" class="">Join our Discord server</a> and report your problem in the <code>help-and-questions</code> channel by creating a new thread (ensuring that your problem is not already reported). If you're using the launcher, make sure to also upload the support package, that will make it much easier for us to help.</li>
</ul>
<div class="theme-admonition theme-admonition-danger admonition_xJq3 alert alert--danger"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>danger</div><div class="admonitionContent_BuS1"><p>Some of the bigger gameplay issues we are aware of:</p><ul>
<li class="">Camera Options and a few other menu options are not implmented yet.</li>
<li class="">Occasionally, some sound effects can cut off abruptly. This is particularly an issue in the gun course and when playing at higher frame rates.</li>
<li class="">This is an original game bug, but there are some sounds (such as Sig's Peace Maker charging sound) that always play at max volume regardless of audio settings and also play even if the game is paused.</li>
<li class="">The texture for the ocean is still a bit wrong.</li>
<li class="">Some HUD Elements might not line up correctly.</li>
</ul><p>For common problems relating to the launcher and the installation process, refer to the video linked above.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="translation-contributions">Translation Contributions<a href="https://opengoal.dev/blog/progress-report-oct-2023#translation-contributions" class="hash-link" aria-label="Direct link to Translation Contributions" title="Direct link to Translation Contributions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="games">Games<a href="https://opengoal.dev/blog/progress-report-oct-2023#games" class="hash-link" aria-label="Direct link to Games" title="Direct link to Games" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABgEAAAChCAYAAADuvB8kAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAACaTSURBVHhe7d0JnF1VfQDgk2SyJyQhJAFEIGwSFlmUXS1WrGxtka0quNQVWVpRNqlYFREoWq0NIosoCrW2oljZ6l7rAqhQSwCtiqxZyL5vk0zf/8y7w8vLvMmbzExmcvm+3+/l3nfffffNeznn3nPO/9xzBk3dc9+2BAAAAAAAlM7g6hIAAAAAACgZQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQQAAAAAAACgpQYAGdt5553T44Yell7/8ZdUtAAAAAACwdRk0dc9926rrPfbN27+etp24bfVZYz/+75+kyy77cPXZwPTe956V3vBXp6cF8xek159yanVr7zn2da9LH/zgxXn9T47+07wcCL797W+lbcaOzevfvOOO9JnPfDav96We/hZ9/X8FAAAAALC1cidAH4u7CeIxefKk6paB6/UnndQRAAgHvvSA6lrPxfcvfostpT8+EwAAAABgIOnVIMAVV16ZLr7kgx2PhQsX5e0PPPCLDbZ/5dZb8/ayi0boq6+6Mj8OPujg6tZ2a1vXpmXLluXHQHHUUUfm5bp16/Jy5112Tnvv/ZK83lOHHnJIx29Rr6e/xerVq9vfv2J5dUu7rj4TAAAAAOCFoFeDAL/85a/Sfffd3/FoW78+b1+1evUG2//vt/+Xt5fd6aedXl3b2Pe//4N0wol/kR8DxT7T9s7L+D+KQMCQIUPSCccfn7f11JFHtgcYOtPT3+Lmm7+Y3/vmN7+1uqVdV58JAAAAAPBC0KtzAtQr5gionwPgNa/50/T+89+X16/55D+mc84+K02cODH99Gc/79gvJua9+OKL0rSX7JWGtLTkbfPmz0tf//fb01f/9Wv5eXj72/86nXLy69OChQvT3Xfdnc44401pbHVIm9j/85+/IX33u9/LzwtnnHFGeuMbTu/Yb+XKVenue+5On/3s9Pw8NBpnPnr3n3feeenwww5Nw4YNy9uWLl2a7r33O2n6tdfm5+GuO/8jjRkzpvospRXLl6f1bW3pd7/7fXrf+e/f4Deob/yOz3jPu9+djjrqqDRy5Ii8bc2aNWnGI4+mT3/6M+mpp57K20L9b3neeWen7SZul5/H3/XVf/23dNttt+XnXXnLm89M73jH2/P6lVdenf78xBPSfvvvl2bOnJXe+KYz8vZ6hxzy8vTud70z7b7bbh3/R4uXLEl3Vf4frr/+hvw8/r4L3n9+GjV6dH4eih7/P/vpz/PdI/W/xVvf8uZ0+umn5edXXXV1+u+f/DSvFy6+6IL0qle9Kt8B8IELL0qvPvrojjQQgYBNfeYzzz7TcfzLL78i3Xf//Xm9EHc/fOqT1+T1b33rP9INN96U1wEAAAAAtjb9MifA0JahuYE8HpdcfFGaPHly7nVeOOCAA9IN138+7bfvPh2NyyEat8866z25gb4wfPjwfJztp0xJ73rXOzsa9kPs/8FLLk4nnvB8b/Z3v+sd+RH7ReN/NM5HQ/spJ5+cbqx8Zleicf5zn5ueXvXKV3QEAEIc67TTTkmXX/6x6pa0QQAgRIN0bBs9alR+Xvsb1IrvftONN6RjjnlNRwAgxOcdfNCB6frrrs37FOp/yyIAEOLviu9a+3s1ctihh+bl7Nlz0r3/+Z/pF7/6VX6+4447pFe+4qi8Xit+06uv/ETaa6/ngzRh3DbbpDe98Q3pusrfGeLvq22MD8XfO2LUyPy8/re459578/eN53/2utflbbVe8cpX5tdmzZyV/vj4HzvSwJhR7Z+zqc+sPf5rX3tMdY/nnXbqqfm12OeOb32rurV3XHLJJenEE0+oPgMAAAAA6FsDYmLgL37xS+nNb3lbx10A7z3rPbkBfO68uenSv/tQ+pOj/zS/Hg2+4fjjj8vLWtFgu2DhgvThv/9IOu30v8rHLIa0OfWUU6p7xbj3r8jLhx76n3Tsccen40748/SPn/5MDgjs9ZK9cjCgkXPPOTtN2m5S3veqq6/Jf1d81i9+8cv8+lFHHtExhn4x/0Hh+htvys8/O/35uwU6Ew3548aNy3/77d/4RnrXe87K3z3W17W25sbtyy67tLr3xj71qU/nvyuW8XeGzn6vWhHciO8eZsyYkZd33313vvsgHH300XlZiO947rnn5sb/+Iz4reN3OPe8v00PPvRQ3mefadNy8OHBhx7M3zu+f6H4bRrNDfHcc3PTgw8+mNcPPHDDyYlrJy/+3vd/kJf1NvWZtcc/9LD24Eetgw86KC9jn9i3t0QAYI89dk8nVb6DQAAAAAAAsCX0exDgX7/2tfSlW768wRA3Z7337Dw0zz995rPppz/9Wd4Wr3/99tvzetEIXC/2/6//+nFuuI1j/vCHP8rbX7TTi/IyjB7T3hO/ra19voIQQ77ccsstucE9Gtsb+fDffzR9/IpPpOnTp6d77rknb4vP+odr2oeOiYDDrrvsmteL+Q8KC+bNz88ffvjh6paNxZA80fM+fOMbd+TfIOZPiO8e65+7/vr8WgQiOuvdH7/lf3z723k9lvE8xO91+GGH5fXOHH/88TmIEn70o/bfLL5XMXfDfvvtl5eFk09+fQ7SRKAifov4rWP/+G7nn/+B9OBD/5O+973v52GBYnt87/j+heK36WpuiDvvvCsv428/9bTngzivfvWf5GXcsfDNO+7I6/Wa+cxGx48gQwxhFX74w//Ky95QBAAKAgEAAAAAwJbQ70GA3zz2m+rahqIxfs7cuXl8+Ms+9HfpphuvT+ec/d7qqxtbvmzZRmPHz5vf3ghcNHCHR2Y8kpcHH3xwuv32f8vH3n///fM8A81MWBzzC/zvwzPS6aedli684II8PNAXb/5C9dWe2Xvv9ol547vUzi9QiPkQovE7TKvecVDrvvvuq661mz1rdnUtpfHjx1fXNnbUEUfkZYz/X/sbFkMCbb/9lHRszbA8u+22W14+/fQz6c677s7rtc4///3p8o9fsUFgp7vi74i/J7z6Ve0N/3HHwrRp0/L6Aw88kJebK45f3FlSHD/UBhliWKTeUAQA1q9vS9de+7l0f/X/SSAAAAAAAOhr/R4EqJ+UNcSY91/58pfyGP0x8W+Mj7/nnntuNM57rdWr24eu2ZS//8jHck/1EOPnx7Gn//M/5YBATHTblWiEvvba6flvO+ec96YTTzw+7bvPPnn8+N4wabv28fxnzn6+8b7eksWL83LkiPbx9Gv95je/ra41L4b22b3aQ3358mXpvPPO7XhMqAkcFI3jYeKE9p7yzz77bF72lfsfaE8bMVRR/PannHJKDujEHQh33b1x8KG7fvTjH+fltH2m5d+hNsjw8/t+npc9VRsAuO6669JDDz2UbrzpCwIBAAAAAMAWMSDmBKgXY97vvPPOeQz8H//3T9LNN38xfeCCC9OVV15d3aNnoqd6DP1z5513p5nPzsyNyhEQuPxjH8sNwY189KMfyZMVx/4RSLjttn/J48zHGPy9YfGSJXlZO7lvvTHVoZBa16/Ly5469tjXdUzKHIGWU085ueNx0kl/mbeHffbdt7qW0pKlS/Ny8pTJedlX/uVfvprnJYiG/ze96Y3psEMOydsfe/SxzQp41CvmPYjvH79DfEZ8VmyLz+6pzgIABYEAAAAAAGBLGHBBgBifPca8D/88/XN5suBbvvyV9Mtf/irtPW3jIXC666ijjkxve9tb89A/13zyk+mNZ5yZG/KjYT/GuT/pL/+iuueGoqd4THYbYrz9CCTccONNeZz5GEe+N8x4pH2oogkTxm8wTn0hhuQp5gz47W973ggeDnxp+8S70bD/yKOPbvT4w+OP59drx85/6umn83K3qVPzXRv1Lr30kvS2t76l+mzzxdj+jz32WF4/7JBD09Tdpub1RhMCd1ccv5gg+IjDj0gHHdh7EwKPGDEiLzsLABRqAwFFIAYAAAAAoDcNuCDAqJphblauXFldax8i6NjXHVt9tnmit/Unrvh4noD3L2sa+5988skcBOjK+HHPD41TO/RQ3DlwxplvrD7bWHHc2uF0GvnSl25JC+YvyOvvfPs70nHHHZfXw2tfe0z62785N6+vXLmqV3qqR2CjaFh/4P4H0tlnn7vR4+1vf2fuGR8OP7R9cuHbbrutowd93LVRO4zSRRdekI55zWvSX//129IFF3ygujWlta1rq2sp/U31ezSjmJx3xxftmJfx+zSaELheM59ZTBAc8x7suusuef2++3o230BYtWpVuuqqq9IVV1zRaQCgEIGAyy//eJ6cGgAAAACgtw24IEBMxhqN3OGiCz+QJ96NSYE//alrck/9nogG3xmPPJobr99//vvSV2+7NR//li/enIeBic+9o0FjbMxdUExUe9qpp+S/Kd57261f6bhzoTMzZszIy8MPPzx99zv3pphToCtfuPnm/HfEd73k4gvze+695+70ob+7NM+JEEMkTZ8+vcc91cPJJ7++utY+4XEjRW/8Aw54aV7GUDzf+OYdOcAR3/2T1/xD/ht/8L3vpBNOOD7/vnPmPJe+/OUv5/3D97//g47f75STT877f/QjH87PuxIN/sVkyOHBLhrU6zXzmbUTBIf4rGaDDM2IANOmNLMPAAAAAMDmGHBBgGjcjkbupUuXpiEtLXni3RirfsmSpekrt95W3WvznXPOuXmegWhMj97lcfxoXJ83f1666up/6LJxPV6P/aKRO/6meG/r2rXp85+/vrrHxj5+xSfy0EMhAg3DKt+pK3fedXcenuiPf3wiP4/3FMGP2HbxBy/N+/SGA6pDAT3xxJOdTtBc+PFPfpKX8bfEUErhuus+n6686ur8e4T4G+P/q5jH4dzzztvot4zfb9as9kmPY//BQ7r+LQoPPNDeMz+CDv/+9a/n9WY185n3/+IX1bXemxAYAAAAAGAgGDR1z33bqusDzstf/rLU0tKSli9fkR5++OHq1t5z+OHtw9t09/j7779/Gj16VGptbc1zFTQrPi/mEGhWTI5czAEQPdqfeuqpvD7Q7PWSvdK2Eybk9Wa+XwyhFN+tO79dT3X1me9739/keR1iiKMzznxzr9xlAQAAAAAwEAzoIAD0tQgOfOELN+WJj++777508SWXVl8BAAAAANj6CQLwgnTzzTel9evWpV122aVjPogYhunXv/51dQ8AAAAAgK3fgJsTALaECePG53kdigBAzEMhAAAAAAAAlI07AXhBOu6449Iee+yelixenO65917zAAAAAAAApSQIAAAAAAAAJWU4IAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKClBAAAAAAAAKKl+CwIMHtz7H90XxwQAAAAAgK3VoKl77ttWXd/iBg1KafToMWn9+vXVLZsnGv+XL1+W2vrtmwAAAAAAwMDTb0GA/ffbN13+0cvS9lOmpNbW1jRo0KAcFOiOaPRvq/zT0tKSZs+Zky790EfSo4/9pvoqAAADScvIMWnbaUekUTvslsbsuHtatXB2WjHr8TT/0fvS6so6AAAAva9fggDRaP+1276UDjrowLR06dI0ZMiQ6iubZ926dWns2LHpwYf+J73hjLfloAIAAAPHi19zZtrxqJNyIKAzc371nfTEXTek1pXLqlsAAADoDf0yiP7w4cPTlClT0rJly/JQQNFo35NHHCOOFXcVxLEBABg49nvXNWnnY85sGAAIU172Z+mA86an4RO2r24BAACgN/RLECCG8Fm/ft0GdwC0DwfU/UchjtW6rjUfGwCAgWGP0z6Qxu22f/VZ10ZM2D7tfeZlXQYLAAAA6J5+CQKE2qb62sb87qp9b0+OAwBA7xq320vTlINfW33WnJgrYIcjT6o+AwAAoKf6LQgQil77sezJozgGAAADx6SXdS8AUJj8smOqawAAAPRUvwQB8lA+Q4akQS0tlUcse+NROVYc090AAAADwsRpR1TXuieGBRq9w+7VZwAAAPRE/80JEJMCL1lSeSztpUflWJVjuiMAAGBg6MnY/i0jR1fXAAAA6IlBU/fcd4u3mo+qPG4dPy5NGDQ4rW1r63Hv/Wj4H1o5xsK29enMRYvTiup2AAD6z1FX3ltd674ZN16UFj/+v9VnAAAAbC53AgAA0CdaVy6rrnVf68rl1TUAAAB6wpwAAAD0ifmP/by61j2rFs5Jy2f9ofoMAACAnuifOwHi0Qc99uOY7gMAABgY5v7qu9W17nluM98HAADAxvolCJDa2lLRX7+nAYHahv98zD4ILgAA0H0xpv+cB7vXoL981uNp1s/uqD4DAACgp/ptOKDBaVBa1x4ByNtyY/5mPKpvzseKYxoOCABg4Pj9v38qLX784eqzrsUwQI995WM9mksAAACADfVLEGBNW1uaW1mOGzIkDR40KLX08BHHiGPFMePYAAAMHDNuvDA99b1bu2zcjzsGfv3P56TVC2dXtwAAANAbBk3dc99+aTXfc9CgdMmwYWlS5dNb29pS5WnHEEHNij882vwjEDC38uar1qxJvxMEAAAYkFpGjknb7nNkGr3DbpXH7mnVotlpxczH0/xHf67xHwAAoI/0WxAgDEptaVTl3/XV55srbmdYUTnW8zMNAAAAAAAA/RYEiOb63v7gvjgmAAAAAABsrfplToDQF431AgAAAAAAAPC8fgsCAAAAAAAAfUsQAAAAAAAASkoQAAAAAAAASkoQAAAAAAAASkoQAAAAAAAASkoQAAAAAAAASkoQAAAAAAAASkoQYAs75OUvq67RX/wf9D//B/3P/0H/83/Qv/z+/c//Qf/zf9D//B/0P/8H/cvv3//8H/Q//wf9z/9B//N/0PcEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQEAQAAAAAAoKQGTd1z37bqOgAAAAAAUCLuBAAAAAAAgJISBAAAAAAAgJIyHNBmWr9uXVq0cF4aOWp05TGmurVzq1etTIsXzk8rVyxN69evT8NHjExjtxmfxo7btrpH81auWJaGDx+ZBg8ZUt0CW97SxQvS2rVr83ozeSAsWjAvLVu6KK1dszoNaWlJI0aMThO2m5yGDh1W3aM5a9euyfkv8hFsSXH+Xbliedp2uynVLc+L8/zyZUvy+uDBQ9I24yY0dZ6WL9iaRBpbsnhhJZ2NaHjeL/JJGDp06CbLOnHMBfPnpBXLl6Z1ra1p6LDhadTosWn8hO26XdaJfBjv6W7+gWZEWl2+bPEmyz+1eaDZMtLypYvT0iWL8nsHDx5cyWOj0rgJE5t6b634G1evXtnt90GzulveiXLOkCGDt+i1QJmIvtTstSDS4dJKmSk0WzfQbsTWKvLFpuoIhZlPP55aWoalyTvsVN3yvHhtc9M8zRkyYeLkj1TX6YY5s57ODTdDWoZ2mcijUD975pOVk/i6NG78dmnM2G0qGWR95eQ+L61dsyaNrjzvjmee+F2+0Kjg0l+eefL3uVAxbPiI1Fop/CysFNiHVQrq8byReE8UlkaOHJMmbDupUhloSSsqhZulixbk/NNSyUfNirwTQYixlYIUbAlxHn9u9jNpyaL5lcL5ilS5blZfabdg3pw0b86z7el4UMrXhkin21QKL4MGN77hTr5gazL72ScraX12Pv83KvtEXpj/3KzciDlo8KCcZ6JBp1G6jArys5V8EEGw0WO2yY09YdmSRbmRaczYcV3moXrPVcpmUQnZVOUDuisaZubMeqqj/LNm9aq0aMHc1NbWtkF6i/NwXC/i/B0NOM2UkeY9N7Oy33OVa8CQfC0YNnxUWrNmVT6vt7S0dKshc1XlGhV5tf46Bb2hu+WdCABEHlhXOS93VT7p7WuBMhF9pdlrQdQdZj3zRM4r0Qi/dMnCSn5ZnLYZ37hhU7sRW6tm6gi1otwT5/vOykfx2tBhmw4ksPkMB7QZ4gQdDUHRQ6ErURGNRByF952nviSN33a7SmFk2xzx2m7yDrnxJwoozYqLDvSnSK9xwt5p5z1yb+hIy+MqBfX5lZN+I1FhiPds/6Jd8v6jKwX5eG8cIy4SUZDqjihswZYUhffojdaoISaCYTu+eLfquX3HnLZD9GhrRL5gaxOF9K565UTBPyqqUb6JdB154cW77pUmTtqhusfG5s5+Ji9jv9g/8kEst3/Rrmld69pKGWpWfr1ZkaegrwyrVEqjPB/n6kjjUf6JNB/l/RDLOLdPmNhePirKSFEXaCTyTfQUjf3iOhJ5LOoLsT56zLicB6KBtFmrV7kW0He6U96JdLt44dymgli9fS1QJqIvbepaEKJuHEGoyCtF+T7ScqO2H+1GbM02VUfoTKT1yCe1+YYtw50A3RSJdPazT1RO9pNSa+ua1DJ0WMMo1eJFC3LhfoedpubePbUi0UfPhjhB10aEo8AUvejmz5tVeX/0Ol2VI7jRk67IJKsrBZvoeZFSW1MFK+gt7Wl2RS7M1IoKbKNeZ9Ezc9TobXJhplb06Il8Eb186qPAUciZP3dWLgxFHopepfF6RJnj8yMfRJ6IXhV6+dDXogdNnOfj/NzZnQDRM6e2136k7Xw7+7rWhulzc/JF5IV8fajkjehN1FqpTMTfJV+wJURai0f0eBsxclRerxVpM9JuNNwUIj03uqMlyj9xrImTtq8cb3R1a7t4T6TvKOuMGz+xowdopPGFlffMnzs79y5dtbK9Q0b0wJsz88ncQBVls3ytWr0yB++gN0Sa7KwXZpyLi56WkV6XL1taKffvWn218r7K9hjaodHdAJFv2trW54akenHcaFiK9F2blhtdCyIAEef/tvXr24MLlfX4zEZ5ELqrO+WdOCcPHTq8UlcdldNoo3LJ5lwLgroC/aGZa0GI83FRbgpFXolhgerLT0G7EVuzIq03qiPUi/3GjB2f73qMuyZr9+/sGEVan/fcsx3lnhjqqrgmxHm/tbU1v69WLhctXtRpnn0hcydAN8UtvlHhrG+46cyqlctTjPHc6BasKNDX9lqLE/vMp/6QM0PcDhyPWI+KbPREjahziGUUkqJiAVtSUYiu7YkQ4942KlREmm4/sW94Qi5ET58QBZTCc7OeyT1+oiAfleJYRsEmxHqc7OMReaC+sgADSRT0O7M5+SLyXBRwQjSyRsEpCvVRwJcvGAii0SUCW80qxkwf0aCiEENChCgDhUjrM5/5Y84Lkf6LYENUjEOR7qOCHuvDK/kCtoTiXB/n7PryUNQBonGy9nxeK/JNzAXTmSj7x/FqezV3dS2IOTiKBtriWmAsaLaE+vJODAMUddzJ22883nO97l4LgroCA1FtPog7uaIxPs7NIZaRJ6KRvjPajXghinQb5Zpo5G+kSOvRySfKPePGb5vfE3WCQuS9JYvbrwG1Yr+4JrAhQYBuKIYBmtREgSbEeG61vSXqFRXUiPqG6M0QBZYdd5qa4naaeOy0yx45ChaPsePG5/1iGT2xNxVhg94WBZO4JTEK3lEAjxNrVD4bDfcQeSB0VfCIoFoUfELkhbjdMW6lj5N8pPFYxq3HIdJ95Kl4xHo8YKBpv2NgZaUCMLa6ZUPdzRdRcSh6FEVlN4IEEYiO24WjoC9fMBBEYCsaIaNX5pN/eCw/4jpRVIDrFfmgUYU3eviEooFoUR4TN4bQ2jWn/8gHkR8ivccxinQfld1Y7+5tydBd0bssGm2Khv9GQ5B0NXxo5JuWSr5pJCqvcT0Jm7oWRJovGjyLa0Gj/AW9obPyTmyLYYCi/N5MEKq71wJ1BQaa+mtBiPpyeOap3+egWNSdR44am9NrZ7Qb8UIU6TaGwV0477nqlo11pPUYJrFS7on3RF0g6gSRt0Kk85hQvigvhWi7jTKWuwA2JgjQpCh4R8U2hgHqrQJ1bcEojh+JNnr0NFNggv5S9HSLwkoUaCLy2pM8ET3kCkWPzmbutIGBKsa2jUafKKRsrtp8EQX+KMSMmzCxugUGlqJSGuWkuCZM3uHFuVFm5YqleZK7zVFfFooedXHtqa1kQ38pGiInbrd9dUvfqO1Z6lrAQNNZeSe2xRBAxV2NPVV/LVBXYCBpdC0oejbHnV7RQzn2aXQHcDO0G1FWMRRc5I+iLlGrNq3XKuoDK5a3Xw8iyBWBuBj+rRDDM8Y+OkNsTBCgSTEMUESgho8YkRNoURCP8WfzeiWBdib2aaTo0RA9HIpbHBvdIgYDQTTwRE+3iMRGL7Sddt0zb6+9HaszjfJHiBN7cZtWHFsDD1uz6PkcPROm7LhzdUtjzeaLYhgJvXgYqIqemtFRouhxFg1AsR5puSuN8kFRGSh6v0W+MqwDA0Gk6ZjXJYZIrG3orG2wr9VVXSAUPaE7E3eEFXcSuBYwkHRW3olemZE/xm4zvqO+HHXlyAOx3tWQD81eC9QVGCgaXQsincccktG4GRP7xt1acedKdJ6L3smNaDfihSjKNPGI+b7qdSetx5BZ0WGoEB2R4lrExgQBmlTcorVw/nMdj5jhfdWq5Xm9s0JNVFajcNSowBOFmIhYRQS3GBYiJnSBgSoKLjExVyEiq1H4j3TeWaGmqKhGJLYzReNQUbBvaRmWjwVboxgeK3oyRC/ornoddDdfxBArodgOA03RE23IkA2LlUXZpmjEqVUU6CPPdKYoDw2rNvZEeanRcCuwpURD5dw5z+aG+bjbpVYEbmOyunpRrmkUIGjvydb5tSDEe4uxnV0LGCgalXdizOZI0zE+f1Ffjrpy1Jnzei9cC9QVGAi6uhYsX7okD3FSG7DNwxiOGZcWLphb3bIh7Ua8kE2cvEO+TsS1JdJ5oTtpfew2EzqGBOoYCqiS59iYIECToudz/SNO+nFrSqx31iOhmER18cL2sapqReKMSnFxa0sUoCLBF7e0wEAUJ9P6HmtDqhXbRj3Z4uQbkdjOCjVRIYhhT4oTdNwmWfQWgq1JFFqih0+MAVpb6G+kO/mimCyvuAUeBqJI9/WBraJnZ2d5IrZFuWfxoucnmi/E++L2+ShbFQ1McUt9zMvUqLco9LVIe8Wdj9vvuEte1ooJTKMCWnteLzpINBqTNnqpxXs660gRvaqjTFSM7exawEDQVXmnGJu/9hF13agzx3pnwyR291qgrkB/29S1IOrEndWLBw8Z3On2oN2IF7JI03F9iCBZ7dwYjdJ65MHcSaLaYS7k60TlWhNlpKiPxLXFcFmdEwToQ5Fo49avpYsX5mFU4gQeCTYKT3GLWCTS2smKthk3Me9TTKQXj5gALPYP9ZGweB22pGiUjJNzpNNC+7wAgzsqp/WikhBDac2qFJZyVLaSbuP9s599MhdoosJQnKDj+HGij1sri8J9LGPfQvQAip52RR6BvhZpMB5xS3vt8yL9FRXiSL9xni5er92nXnfyRVxLoiATFYNiAqRoZIp9i8Ym+YK+FOmsSNOhGAqx9loQ45THtto0GteLIpjVmSk7tN9JNvPpxzuOHfkhKtdt69enSdvvlLeFOH40/MRrRbpvz3sz83qI60dxt4B8QG+K9BRpL3qqTdh2Ur5FvcgTRT4oKqBzZj7VcS6OPFDbgFkvKr1xfo90HHkn0nY8ovy/cP6c3DBUNLQ2cy2ov1tAPqA3bU55pxnduRaoK9CfIj1t6loQ5+0I7taWT+K1SNMxZElntBuxtYryR5EHQmd1hGaMn9A+z0v9+2K+jdhWW+6JodrDuOp7ChEoi7sr4w602gnr2dCgqXvu21Zdp5uioBK3btWekDsTJ+OoBMTFoBAFmGgEqo9OReJevHBuruiGKOREwi/GmYsTfXG7ZFQEYlx22FKiABGF/9pbdiONRuE9KrmNxPviZF1cHEJ92i7EiT0mFau9ANTml9gehaEij0TPoq4+G3rqj797pLq2oTj/xnm40euh2Kcz3ckXuXA/Pwr3z094FOl+4qQd8lK+oC9FxbKz3mmRxiKtFaK8E/sW6TBej15yXfXEibQbt9TXDu9Qm7ZrRV6JfYvyVASgoxG1KIcVDVQhXttl92l5HXqqUR4ItfmgPj03kwdCNPrkgHA179Sn7cKmrgXxeg6UVT8/GpVMoEpv2ZzyTuSdmNui9lrRme5cC9QV6C/NXgvifD5/3uwN2n8iOFA/dFA97UZsbZqtI9SKa0k04NeXcYpyfP1r9fWLRu1PcW145onfqQNsgiDAFhQFkrgFrFGDUK2o6Mb4oZ0VWCJxt1YezRwH+kJUMqPnQ6M02kjxvuid0KhXXKFI5zEBUmeV58gjzRwHBrru5ItN7StfMBBsTjrc1Dm/VlflqSKPNHMc6CtF42R3ykihq/J/rU1dCzb386G/dedaoK7AQFeUV7pbJtFuBBtrtoxE1wQBAAAAAACgpMwJAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAAJSUIAAAAAAAApZTS/wMId4VIuvPAGQAAAABJRU5ErkJggg==" width="1537" height="161" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="launcher">Launcher<a href="https://opengoal.dev/blog/progress-report-oct-2023#launcher" class="hash-link" aria-label="Direct link to Launcher" title="Direct link to Launcher" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://opengoal.dev/assets/images/i18n-launcher-c9b4a21b652a8b07d9e69650659331f7.png" width="1508" height="339" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-changes">General Changes<a href="https://opengoal.dev/blog/progress-report-oct-2023#general-changes" class="hash-link" aria-label="Direct link to General Changes" title="Direct link to General Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="bone-export-for-models-">Bone Export for Models <a href="https://github.com/open-goal/jak-project/pull/3087" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#bone-export-for-models-" class="hash-link" aria-label="Direct link to bone-export-for-models-" title="Direct link to bone-export-for-models-" translate="no">​</a></h3>
<p>When exporting models, bones will now also be exported if the model has any.</p>
<p><img decoding="async" loading="lazy" alt="Bones" src="https://opengoal.dev/assets/images/bone-export-fad623d9c3f4fe4b9ea9dd3c58d6ed35.png" width="957" height="866" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="formatter-rewrite-and-documentation-">Formatter Rewrite and Documentation <a href="https://github.com/open-goal/jak-project/pull/3096" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#formatter-rewrite-and-documentation-" class="hash-link" aria-label="Direct link to formatter-rewrite-and-documentation-" title="Direct link to formatter-rewrite-and-documentation-" translate="no">​</a></h3>
<p>The OpenGOAL formatter has gotten a rewrite, refactor and some <a href="https://github.com/open-goal/jak-project/blob/master/common/formatter/README.md" target="_blank" rel="noopener noreferrer" class="">documentation</a> that gives insight into the problem of trying to write a new formatter for a custom language. It turns out it's not super easy, even if your language is a Lisp!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="texture-merging-">Texture Merging <a href="https://github.com/open-goal/jak-project/pull/3083" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#texture-merging-" class="hash-link" aria-label="Direct link to texture-merging-" title="Direct link to texture-merging-" translate="no">​</a></h3>
<p>A new decompiler feature similar to texture replacements, but the non-transparent part of the replacement image is merged into the original texture instead of replacing it completely.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="compiler-speedups-">Compiler Speedups <a href="https://github.com/open-goal/jak-project/pull/3066" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#compiler-speedups-" class="hash-link" aria-label="Direct link to compiler-speedups-" title="Direct link to compiler-speedups-" translate="no">​</a></h3>
<p>A lot of under the hood optimizations to the GOOS interpreter have been made that resulted in a ~50% reduction in compile times.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-packing-textures-in-custom-levels-">Support for Packing Textures in Custom Levels <a href="https://github.com/open-goal/jak-project/pull/3089" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#support-for-packing-textures-in-custom-levels-" class="hash-link" aria-label="Direct link to support-for-packing-textures-in-custom-levels-" title="Direct link to support-for-packing-textures-in-custom-levels-" translate="no">​</a></h3>
<p>Some of the game's textures are not part of any art group or the common level files, which previously meant that the only way to use them in a custom level would be to have another level loaded that has them. One particular example of this is the HUD for the Zoomer. Now, you can specify which textures to separately pack into a custom level.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="better-detection-of-art-groups-and-joint-node-index-macro-">Better Detection of Art Groups and <code>joint-node-index</code> Macro <a href="https://github.com/open-goal/jak-project/pull/3061" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#better-detection-of-art-groups-and-joint-node-index-macro-" class="hash-link" aria-label="Direct link to better-detection-of-art-groups-and-joint-node-index-macro-" title="Direct link to better-detection-of-art-groups-and-joint-node-index-macro-" translate="no">​</a></h3>
<p>The decompiler now goes through all of the game's art groups to extract information about the joints of a model in order to turn code like this:</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">create-splash</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">-&gt;</span><span class="token plain"> </span><span class="token symbol">self</span><span class="token plain"> </span><span class="token symbol">water</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">the-as</span><span class="token plain"> </span><span class="token symbol">float</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.6</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">vector&lt;-cspace!</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token reader-macro operator" style="color:rgb(212, 212, 212)">'</span><span class="token symbol">stack-no-clear</span><span class="token plain"> </span><span class="token reader-macro operator" style="color:rgb(212, 212, 212)">'</span><span class="token symbol">vector</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">-&gt;</span><span class="token plain"> </span><span class="token symbol">self</span><span class="token plain"> </span><span class="token symbol">node-list</span><span class="token plain"> </span><span class="token symbol">data</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">37</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">-&gt;</span><span class="token plain"> </span><span class="token symbol">self</span><span class="token plain"> </span><span class="token symbol">control</span><span class="token plain"> </span><span class="token symbol">transv</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<p>Into:</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">create-splash</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">-&gt;</span><span class="token plain"> </span><span class="token symbol">self</span><span class="token plain"> </span><span class="token symbol">water</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">the-as</span><span class="token plain"> </span><span class="token symbol">float</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.6</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">vector&lt;-cspace!</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token reader-macro operator" style="color:rgb(212, 212, 212)">'</span><span class="token symbol">stack-no-clear</span><span class="token plain"> </span><span class="token reader-macro operator" style="color:rgb(212, 212, 212)">'</span><span class="token symbol">vector</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">joint-node-index</span><span class="token plain"> </span><span class="token symbol">eichar-lod0-jg</span><span class="token plain"> </span><span class="token symbol">mouth</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">-&gt;</span><span class="token plain"> </span><span class="token symbol">self</span><span class="token plain"> </span><span class="token symbol">control</span><span class="token plain"> </span><span class="token symbol">transv</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<p>Which gives us a much better understanding of what is going on. <code>eichar</code> is the name of Jak's model in Jak 1 (<code>lod0</code> is the highest level of detail and <code>jg</code> is "joint geometry"), so this code is creating water splash particles at the position of Jak's mouth.</p>
<p>Additionally, the art group detection has been vastly improved to detect 99% of occurences and turns code like this:</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">v</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token number" style="color:rgb(181, 206, 168)">-12</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">ja-group</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">and</span><span class="token plain"> </span><span class="token symbol">v1-12</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">or</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">=</span><span class="token plain"> </span><span class="token symbol">v1-12</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">-&gt;</span><span class="token plain"> </span><span class="token symbol">self</span><span class="token plain"> </span><span class="token symbol">draw</span><span class="token plain"> </span><span class="token symbol">art-group</span><span class="token plain"> </span><span class="token symbol">data</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">29</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">=</span><span class="token plain"> </span><span class="token symbol">v1-12</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">-&gt;</span><span class="token plain"> </span><span class="token symbol">self</span><span class="token plain"> </span><span class="token symbol">draw</span><span class="token plain"> </span><span class="token symbol">art-group</span><span class="token plain"> </span><span class="token symbol">data</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">28</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">ja-channel-push!</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">seconds</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.03</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">ja-channel-push!</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">seconds</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.08</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<p>Into:</p>
<div class="language-opengoal codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-opengoal codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">v</span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token number" style="color:rgb(181, 206, 168)">-12</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">ja-group</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">and</span><span class="token plain"> </span><span class="token symbol">v1-12</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">or</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">=</span><span class="token plain"> </span><span class="token symbol">v1-12</span><span class="token plain"> </span><span class="token symbol">ashelin-standing-idle-ja</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">=</span><span class="token plain"> </span><span class="token symbol">v1-12</span><span class="token plain"> </span><span class="token symbol">ashelin-standing-fire-ja</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">ja-channel-push!</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">seconds</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.03</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">ja-channel-push!</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">seconds</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">0.08</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre></div></div>
<p>So we know exactly which animations the game is referencing here.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-1">Jak 1<a href="https://opengoal.dev/blog/progress-report-oct-2023#jak-1" class="hash-link" aria-label="Direct link to Jak 1" title="Direct link to Jak 1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-bug-with-eco-pickup-timer-">Fix Bug With Eco Pickup Timer <a href="https://github.com/open-goal/jak-project/pull/3056" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#fix-bug-with-eco-pickup-timer-" class="hash-link" aria-label="Direct link to fix-bug-with-eco-pickup-timer-" title="Direct link to fix-bug-with-eco-pickup-timer-" translate="no">​</a></h3>
<p>A regression was introduced in a big refactor that would cause the eco pickup timer to become desynced when e.g. watching a cutscene, resulting in one blue eco blob giving you a full meter.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-2">Jak 2<a href="https://opengoal.dev/blog/progress-report-oct-2023#jak-2" class="hash-link" aria-label="Direct link to Jak 2" title="Direct link to Jak 2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="extractor-support-">Extractor Support <a href="https://github.com/open-goal/jak-project/pull/3042" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#extractor-support-" class="hash-link" aria-label="Direct link to extractor-support-" title="Direct link to extractor-support-" translate="no">​</a></h3>
<p>As part of the beta release, the extractor was adjusted to support Jak 2.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-level-support-">Custom Level Support <a href="https://github.com/open-goal/jak-project/pull/3090" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#custom-level-support-" class="hash-link" aria-label="Direct link to custom-level-support-" title="Direct link to custom-level-support-" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Jak 2 &amp;quot;Test Zone&amp;quot;" src="https://opengoal.dev/assets/images/jak2-test-zone-a103d76c64fa163cdcc958d48c0fafb6.png" width="1919" height="1079" class="img_ev3q"></p>
<p>A major refactor and cleanup of the level building code was performed in order to split things up into common code shared by all games and game specific code. Along with this, early support for creating custom levels in Jak 2 has been added. The process is relatively similar to Jak 1, with some small differences.</p>
<p>Some sections are slightly outdated at this point and it only covers Jak 1, but you can refer to <a href="https://opengoal.dev/docs/category/custom-levels" target="_blank" rel="noopener noreferrer" class="">Kuitar's guide</a> if you want to get started with making levels.</p>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_BuS1"><p>Custom level support is still in very early stages for both games and the tooling is still quite primitive.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-auto-save-crash-in-speedrunner-mode-">Fix Auto-Save Crash in Speedrunner Mode <a href="https://github.com/open-goal/jak-project/pull/3048" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#fix-auto-save-crash-in-speedrunner-mode-" class="hash-link" aria-label="Direct link to fix-auto-save-crash-in-speedrunner-mode-" title="Direct link to fix-auto-save-crash-in-speedrunner-mode-" translate="no">​</a></h3>
<p>A copy-paste from Jak 1's Speedrunner Mode that force enables auto-saving caused a crash in Jak 2 when an auto-save was triggered.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-minor-visual-bugs-and-race-timer-">Fix Minor Visual Bugs and Race Timer <a href="https://github.com/open-goal/jak-project/pull/3090" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#fix-minor-visual-bugs-and-race-timer-" class="hash-link" aria-label="Direct link to fix-minor-visual-bugs-and-race-timer-" title="Direct link to fix-minor-visual-bugs-and-race-timer-" translate="no">​</a></h3>
<p>In the original game, the Construction Site and Underport icons are green, which is actually not intended. The real colors for the icons have been restored.</p>
<p><img decoding="async" loading="lazy" alt="Construction Site icon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABmCAIAAACP2sJuAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAZnUlEQVR4nO18aXMc2XXlfVuulbVh30gsZJMU3ZJacmikbse07GnJ056Y0Cd9cPg/yh9mYjwOWROjGUsjyVbvarGbJAiQAFFYqir3/eXzh1eZSKxNsgsgPMIJRhHIzKrKPHnzvHPvuw/oB9//Plzj4oFf9wn8qeCa6EvCNdGXhGuiLwnXRF8Srom+JFwTfUm4JvqSgBEAet0n8acAfM3y5WAkHdd0XzQOpeOa6wsFRkK87nP4kwBGAEiI63C+aJT2Tgi4Vo+LxEijr5X6onGdsFwSMFxH8aUAV4pxTfeFAkPNclzL9MUBX5N7OTjU6GuuLxQYwchEw3WKeJEoffQ11xeMax99SThO9LVSXxAO69F1K31N99hBT25CAKJ8vWoQrzSKIHRm5CBCsKH5rtvf3jm2izFmGIZlWa/wjSdBkRAIofrpi9rrlYAQaZq6nmdZDVVR4WzWXgRciCRNQs83Om2j09LarYIStd2YmOxoBGuY5FHU23ree7Zd5Hx1ZWVcF3FKRMOVYhnAahi+V+wfHEx225ZpeGH0dT6NNYzI43v7+3qa6FGoh0F7aWH6zq2pm0sdxtqMJYPhB7/6beD5zsFgXJcAdaLR1ZMLSoiha1Odlk6JzuhUu9VstRDGURxnOT/njUKIoiiKoqikhiiMKgpTVdptxQwXqhIncXqQJGE488ba4t3ba9/5ZpuQDiHedm9r85mqa2O+FvlfRXH1WL52xnmeM4waukpAzE52f/r+jxLO4yy3dDWKQp7nhJ7+OAIAEJIV3HWdLE7kBq1pmRMdbGoCQ2N2+q2fvG9SYhJiadr07bXZxfk2oVkY9cJob3unbztJmo33ckbnepLW1x7dcZLYtr298/ybt9fuvnn/ne9+69cffvrbjz/79OFjTIimG+bZRCuWWXDV29lxD/pyC3Vd1j9QDH3u3p2l735r5XvfmVSUCUXpqopiGIqhFxg/j6Le7v7m9s7B0EmziyEaamPgFRkM8zy3Xffg4ODmzDRjdHqiqzDiet6Tp8/mbizpjAkAznmWZXlJClWYajU0q8GsRsHzzuoNdbIrdzGMGMIMo8WlhZW15dW1FV0UhgCS8yAIBrt7nuM939vf3jvY7e3GUdSenrJMkynKuC6HQo3Tkz9cBaR57odR33b9IEqzDGHc6HaMVhMlacFIFAXD/QN5JNNUo+AmwRojWrezeusmVVS5q0GJRWmT0s7CXHdpoaOqvuv2Hc8d2v3NZwebzwbPe24QeH6YFlxT1ImpKWElKE7HdRUUTlOJ164bdaRZ7odR33G9MErzHBFiTnT0RiN3PKVtDQJ/b29vdChCaGsLAM3de+P+X//VnXf/ojkzJfd0FTatqDOqijFCCAGg9STtH/TXN55tfPjJxu8/6j18LAQAiNb01PLdNxSKeZp/TStZx9VNWPRW0xR8MBxmCvMtsz/RoXfW5hlJbixopikQorTDKemuLX9zfubYe6cW5lfv3FrsthumIbfEB4PN3uM/9vZEwQEABOwNhrv94cHQjoZOZ2qyYZqebTv7/TxOYtdXdAOPtcRGVVVNOS/4oVu6Ihqtt5omBrz5NFWY32wMprtUVxYXZg3b3n/wqP9kM7bd9tLC3P07rYW5Y+9tW9bS3Mxiu6WpI+lYHwwf/f6jP/y/f81KQY/iJEqSjBfdqQnLNJFuKJqWJWkwsGPX0xFWKRvj5VBN13kUZfyILb18livniwhhmkpVhbUsgxFreopNTeTdttuySLs5sTTfStLED59/+figtztx99b0nduLf3YXI0QAFZwnURRHsQ6gUlo4HseB/HzveW9v4+n2k83AD9I4SZOR7VM0tWWagCnkXGWMqQrP8zSMuG7AeImemZlxfT+M46woMs4zznPOufT6RTHGb/oKEJKLwnVdINhkHVNrCAT6ROf+X//l5MrNzuJ8dSAiuHtj4dY735u5vTrzxlpjokMQMgkxCY0d58mjJ0++fJQ4boNQk1Jaimwchpqqfut733UOBsOD/rDM+gilOM14GGOEoiBOg6+Vdp4DurK87AaBH4ZBHIdxHERRGEVJmnLO80skWmmYheB+r+fZNhsMmK5Nv7F64zvfWvn+n+utpmLoVWEIEzJxY9GanOBpxgxdNQ2CkEnopKI4aeY/evLof/1z7+kWQYjUikm3vnFncnKySDIK2DIbDBG5HSFECEFCcM5j10ujCyN6eXnZCwIvDB3fd+U/zwvCME3TNE3LyB5zgEsLnKYpIKRZDa3ZYJZZFEVn5YbiduQxjemp9uJ8d2mBqiMzyxBSMKYIQbsF7RbPc2dg20+3DoLQZcxhLOoPo/6gbRq80/YcL3DcPM/le+29Pi0g9oKCFwCgacczbF4UPM2KczP7rwO6tLQUJkkQRa7vu0Hgep7r+77vh1EUhmEcx3Ecp0mSZlmajs1UYko4JaHvBb5v8tzAoFOidtvLP/hzVhYZrOnJzuI8JqR6l05Ik9JGmRBGQbj3dHvjw096G081QnSCDUWllM7MzJia7vSHtqZn1Tln3Ldd/Poq7XRhcTHNsihNvSBwfd/zfdf3Pc9zPc/zPNd1Xc/zfV+EYVbLSgV8rQlGpuvUMvad4fNnW7C1jRCaub16/z//p9v/8Qft+ZGFQAgAoXopWcOkw9hkma05QZQ+29741W8/+5cPEQAgWL1z+96b93mcevsDJESn3a6KSueUpC8HlBDCEAJCMKWqYVitVjdJwjCUXLuuJNzzgyAIgvQoRImX/VbSbXJKpu7cai4vyS2t2ZmZ26tao6FSohOiYYxLaoIo9oLQD0NMaUaZTbB3MAgGQ2evP9jdu7lys2VZ9mDoHAwhL/o7exRhUVwVfitQjLFCKUNIQ8gCKIQoiiJJkiqiq+j2PM+vQXoTzl9F1HZ7u52bS4vfftMqMzfF0BuTXcXQFYyblHYYqwzDrh/6XuDtHyQYORgTXvQePt758nGwdzA9O6OpWstqYg4MMM/yLIoLQq8KuzVQhBAghDBGGBOMZSQQSjHGqqKYptlut4MwDHzf9/1jjCdpWsl3nuecc875iwT408+/aC4vTd1anr9/V25BAAQhjJCKkFIIJecV0SSOwfN4f+BkeZplSRw//+OXuw8fcy80DJ0Btvf6AKApKpSVjSsICgiN/gGArEcjRAnRdV1R1QbnnPMkSaIoknpSj+ogCPwgqH5OkqRea38pMIRlgRilWeh7dhBWJicaOsXA7oRx7+Cgv9/f7w8Q552JCdrpxkEcZ/m4uLhQ1GodkmuEAABjjDGuEqPcMEzDSBqNpmWFURTHcRRFURQ5ruu6rm3btm07rhuGYRSGWRnaLx7gAMAwsiidZEqYZNuOt93brSrCahjpftCOwp3nvf6j9Y2tncVbK02zgZKUJ4ngxRUUipOggJD4qhEDY8wUhRCiaVqr1ZLanGWZ7TiO49i2PRgObdv2S18o74M0iHDa1DVGoGFsUdou01wGApI0iOL+7v72+ubj9Q2CULtpNRuNphBtRWkTsk0IhFHQH5DlG7QQWZTAy3dG5HmeZVl2oq6fcx7HMeecYdwgRMVjbi2i9UA+CxghTCkwRgmhlGJCMMYghOM4juvatt0ZDm3HOfQonud5nuM48sKqfKeyKBghk5AJpsxpI1VN4sTzvH3Hff7k6fofHjz5/MFkszm1cnOpYU0aepuxjsKePN0ydA0BKIVgQrzaFEiSJL7ve75/bLu0AFmWmao6oSgqIfErff5ZoHWBPofuaszEGBOMCSEIIcM0EUKMMdMwOp1OEASBlOwg8DzPtm3HccIoiqIojuMkjuMk4ZzneU4AmYRMKspsWV0bxMm+5z993nvycP3Jp58/+f1HZHGBWdbSyvKMYXSaVqfZmOp2DE0DACYEe1UTnySJ47r9fv+sAwzD6DIGlI6baIk63SeB5BiJMEKyOEAplVxLZ5K121mWRXEcx7GkWxJtO06l4J7ngefJATOOoo2Hj3/zi19uPnwsv8EPo73BcG8wDIdOU1H+7Jv3G0zp2c4//+uHbyzfuLN6s9uypjrte2vLURzruopF0dBUP4p4IUgte3whCIEAVnR9TdOWylycQ+HT3Cc5MKqgmMS0halDKbzsh58BKs6nGABkJwI+hMwCpA4URSHK0oyuaQpjuq63Wq0kjt1u1/O8oW0Ph0PHcaRhkQH+m9/9buOLR85gaJim/Ios51GSREnSaTYn2m2l2UIIHXj+o8frURy3rcbdlZtT3fY3bq0ojGw+39s56A/cQABSNe2liQYAgNu6/l6n83arJX9NEd/V4p4aPefZ5iDq2bErGOl22biIBoBjDu8UIIQRIlI3CEEIVeXjoiikD0MYq5QSIo/CRVHI0B7a9mAwcBxHGsHA9/0gUBXFt113YJ/MLfXlm4VuxLygquIF4R8fb0x3Ou49nxDSaTWXF+YYJbbrf/5o/Yv1zcmJicnJyZMVoq8EAphVlG83Gm93RjUswPyZ4W/oWEv9bdffcIP9hK5aFnv5Dz8Vx330WaeFSoGuIvqQaCEAgGBMKaWMUUIIIaONhCCMGWOWZSVJkqapHIj+4p13ZLkqSdMkSfI8l/eNF4WqKGmcEIzTIPA9ryg4IVhRFEPXNE1TFU1hKqUMo39nDcdn96AcRY1nDACSlIrmai/BGMp4RxgTSk3DYJQ2m00p83K0/Lu//VvbcWzHkf4kDALJu1R5KUeh53uOxzknhKgKM3RNVzVVVRVFpZSicduviwZFkhoZ0SeTCzljXEZyXaALOQ9T6kb9NozUQAiMEFMUyhhGiFLKGJP+ut1uV4Ok6zhumW+6ruu6bhhFaZpGYSiEAAEIgZQsQjAmBGOC0Bj+zMhumn4SBC1KTQU1FIwVsctjJ0ujlGdc3utxghJKRUnNqf1Kpw6DRaXRQiBU1xUsw5mXUoCOPg2qqmKMGaWqoliW1S0doRR0t3Tivu9nWTYYDi+o/CYAHkaRGAweReFiiy41SYfhIMs9kblxFmWcj3uVCZV6WghRCAH1+yiX4deGQUzIod8oZUOURFdsyh0y3ouiqL8dY8wYo5SqqqrreivP4zhOkiSK4zAMR7UUz7Mdxx4Oh7b9bGtrvFd7eHEAj6NoPYpUit4E5U1NWRUMcoAc3IjHKedjj2imKEJSU+NO8idJxBhXAQknxsBDHmvqXH0QCAEYj+4BQhhjXhSiKEYl1qKQab1MeXLO4yiK4th13cFgsLe/v76+PvaIVlW12WphjBuUWow1CNZw2vNjp2yHDDLx3ONRJmA8vm4EqjAmeeGlV6uYgkoWEJIDnSSQl4dAWX4aCUvZNVDvma07FjlfUtSsISGEKYo0KoSQPM9zzj3PG/T7m5ubzWYTnz/ovfxtUBSl2Wwaum4QYhBiYFxEft/L9wJPHpAX4KdFnAs6XqIxIQhjLASu5mErmooCEyJ9Gyl1o67O+Kg6Qz3e5W2o9lbiXo93melgLFNNSqm8r5qmWc3mRLfbabXOIZoQ0mpanXZb1TRZDa+mYs8BY4wxBroOACkAF0LJNb9g20H9izAQUBgb4/NEZVpVCUadZyEELicEDkfCWtQjQuoRXdQghECnuZHqNowOqKk7Ku08JcTQ9cWF+RtLC/Ts3lxNVRdn56amp5M8D8MwSZIXr8pW4AABxmCa0yfuqCJvyZhAqzoGqkY/KREAUBvojt/bSlJKotCxmC2KQ46rp6GuS/VnoZbTy4GBUjo9NTk3PcXOfoA1Vbm5tLCwuOSGket5VTW8jq8mACFgTG821UbjxB50zm1+WRwt/Ash/Zl8hdrkZp1oSREAlOb2KMvlKy6PJOfH+9GcXs5UAs+G+3u4KN66d+f2zRstq5GkaZ7zoigQQp1Wc2VpwTDNVtOa6LQnJidt1zssaYVhEARhGL4Q0QCYEDymgsY5OHrHyuiGkwX1kvcRd9JvlNIhmZI2UcoClI6l0oRjulGZGXI0p9/b2/viiwc7W0/jwIc8/S8/fOfG/Nzs5EQcJ0macl4QguempjDGB0OHp+nm5gZVNLPZnJ2dJYTIiQjHcRzHkXeXc16/wV+zUeKV8cKPBkKSuxG5dbJq4SzKYh6u3QOAkS6Mhlhp+2qOBSE0ooPzXq/3j//0i5/97GffWL35k/d++F/fe1fWoMMoTrOMc44xnp+Zmp+Zcn3///7LB//nf39gB+H777//w9W12bk5x7Ydxxkx7ThROdcjjaMcMF9Lo+zLaFCpxZW2yN/LKBlROYplGc71HKcW0VCmQtU4CQBV8aT6LoUxQ9MQQmGchFEcRHF22lQsobTTbt+4cWNlZcWpwa5ebdt2HAEge1FK5wnwqitEXwEvKfZo1D9UzwmrPVgWUTEexT6lpKYqkkcAQFUKU9ecUlKqKycEKwrVNS3JsihJBo6b5Tw/o41ETkE0LUthzGo0ut2uzOvrdLuOE4RhGIZxFMVJkiRJmmVZmhaX0sv58qNq5VKqDQCipsh4dBQiZb10JJBlM/AhzTVneURDR5+AKaGKwtI8z7L8/HWcCCFFVZvNZqPREELkZXJfhbPjuo7juI4jZ+7laxAE+bhXX52FcdiXknSMMaVUlANpJdDHHAtUcwhHzfXIjZy0ki94DhhX/kGmP6qqUkoNXW+122EYhkFQRfeIfM/zPC+OYzkvnqZplmXF0QdrXBiTT0QIAchxEsoAh6MUHz4KpXzjMqeviAYA/Co0n3I6MpullJqmyTnPOc9r/RGVpMhyoZyOkJBJ5lUlGo5aw3JAA4DK5xGMBSGSaGm/5c91f40x1jW1YRr0axrb8rlQ6p8jhKZpDdNsNZuSWVmVPeTecWzHieNYhrZkvB4EXwfjI7qO07KbqpQBpd9ACImj0oEQapjmRLs1xty3flayGq7rervdTtK0KoLbNa5HHW5hGAaBzOyTcQyYF0N0HaWqVIxDxT5CxxbZIYQs0+i2WyqjCEFlwU5+alWFrW/5ynNhinK4GFYIOX/m+b4nR0jPc133mLYEQRAGQVJf/PBK/YUXTzQcSe7LDTVTiBAhZDgc9nq9JPR3d3b2er0337h1Y27G0LSd/X6SpmFZLAaAoih6+/3dg4Pt3f0vn2w4nhdl+aeffmoaxsbGxurq6srycqtsIjgflFJN0zDGmqpazeZEHEdR5LmuXZlC25bzPUEQyJRHQnaUvRTdl0I0HFHwY9tlmHu+/8knH3/04YeB57R07a37d2e6HV3Tdvb7BS/qS+A5L3b29j/64xdfrD9xfN9x/YzzTz/7rNfrffnw4Y/ee6/b6bwQ0QhRxihjmq5XiSvn3PP9Q8k+mmfKH2S56mWD+rKIPgMYITkFk+b88cbWf/vHn+uMvPv2D/7Dvftz01NN07BMc5TjI9Tr9Xq7u7v9fsx5o9NdWkFtz3NdL4xjALAdZ3d313XdF6wlHQFCQgjZYOW4rmxgY4wtLS7OzMxI313nXfYoS8iRU7bOnvcN4hVOa7wQAgD6Q/fBF48++OB3hOCVtVsrt24vzM5YxtHmlTT+7LPPHj56tLC4ODU9Y5im47iyXVjuNwxjanp6emrKMIyXPwvh+f721tbOzo4UYsMwvvPWW0EY+r5ftRJW0X24EKKctj9/MdUVILqCEGNc5D4upEki+8Fl9bVqi3BqOl61usnE59Rq+FUi+kpCllm5ZI5z2RMbBMGRrKdMMv0gCKQ1DMPo6NrQa6JfDpJxaQqlpMgAPxwwZVeQ68r1VLxcU3VN9Mth1CPI+WgFYJalaRoGQbXKZFQplC1XMrDDMIyia6LHgDRJRoscZOJzWkH8mugxgOe5NHpSwcNy2KwC3L4memwQh8iyLE6SKAwrlm3HodXEEsCrNP5cY4RaHV1WcuTCKt0wWq3WVBiiLIoOGzOuiR4LanNG0nfknNM8z0czrbVGmf+fAhwdbYK5DKmUNXeMCcCo2isEzbKsmic99nrhJ3QxQOe2F8m9lz0yIUTzPJfU4trkdNWvdFhv+/cQ3WdSrGkQl8sGEXo9DTSccyTnNo42w50M8yvI9ZnMKgqkKczPw/Q07OzA6ip4Hjx5AkUBpil6vQs9KyGKhEdJFmb8sMxER8W9Wrti1X9U9gSMuuvGMWs6NpxJ8cICbG/D3/wNNJtw7x689x784Q/g+/Dzn0MQQBRBu33R55YX2dbBo4ebnz/delptLE9XCPnnX0cNtWWMy8YMQgggRK/MCHmEZcYgy+DePZiZgXYbfvxj0DT49rdhYQHyHDoduH8ffvlL+PhjMAzo9cB1ka6LC/trYACQF+mT7Yf/8D/+5y/+4dfVxtpf2xVC9gnUp5vqHeNFzZa8RhxhWVXh7l3oduGnP4Uf/Qg8D+7ePf6GNAVdB1WFNIU0BUovlGUAQAibemN2fvrm2vzWZu/Z490gDE48gMemaI7++tpZPgTGUBQwPQ23b8NPfgLvvguTk6cfqShw7x602+D70O1Cs3nRp0axcnPu1o//iq2urf76V7/5p//+q63t6GwnVIpJle1cEZZFniPThGZTrkSCKILBAJLkvPdsb4Ntg6ZBEEAYolZLOM7FnSHFbKFza6Fza23hPuf884+/PPC2zzbL6BRc3Mm9FEQQiJ0dYAw8D3Z34cEDeP78zKPzHDY2YDAAhGBvD/b2LpTlo0AIRlJ8RkRLB3LE712VkVACWRbkORQFfP45tFqwvg7378OpU4VZBhMToOswGECjAeNbLfFSOP1bkeyBw/gI0VeGZQAQngcAaG4OEIIHD+Dv/x7iGN5+G9bW4FhOq+swOwsAoGlAqdjYuLSTxAg3GtbN1UU72vs3A++PqV8AYp4AAAAOZVhJZk1NACoAAAAIAAAAAAAAANJTkwAAAABJRU5ErkJggg==" width="120" height="102" class="img_ev3q"> <img decoding="async" loading="lazy" alt="Underport icon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABmCAIAAACP2sJuAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nN19WY8dSXbeF0tud6uFLBZ3srdhz2haM5I1kAXZ0sibYIwfDEFPhv1D/GT5t/hFDwIECAL8oBfDmwxIGs2op6fX6W6ym2yStdwtt1iPHyJvVta9t4rFrip22wfZyci8WZmRX375xTknIrIZWYtvh5H3RFTXdZ7n8zwvi6Ioy7Isq6qq6tporbVmjEkphZRSiG5BSimEEELwhQnOedherOMoiuI4iqJIShlFzR8IwTkHY5d9d/KyL7DGiABQZx0K3nvnXF3XeVFMp9NZsPl8Pp/neR4QBxAwXbMWHcg7D0BKGbDNsqzX62VpmqRpmqZxHCdxHK7Ohbjsm361QBMRkXPOGGOMscFcY2GrKssAbgB4Pp/PZrN5nhdFURaFJ2oYy1jzb8vhQPbjaAeUoyiK43g0Go2Gw+FwOBgMhoNBr9/v93ppmiZJ8v8b0IG2xtqqqsqqUkqpulb6yIwxVV0H0cjzPA9Az+fz2SzP87worLXs+Gve3TzCt4N3FMdJkqRJsr29vb29vbW1tbW5qbW2zjGAcx6exmXf+ysF2ntvrdVKFWU5m82KPM+LYiHFpVKqVkprrZTSWtd1Xdd1+KmsqlopY4xz7pTzW2uPybQQAcckjuMkaQ9ji7ehUXkppZRsYeGIC7/3V81o55zWuiiK6XQ6mUzGk0krx1VVVVVljPHeh0dinTPGtGRvBf2U81vnmHOMsUB1xpgQQkVRrJQUgi8aQClE0JMoiuIoiqKoo0CM4eKx/gaAttYarZVSZVnmeT6dTsfj8Xg8Dtw1Cy/Iex+ODxY2X3h+rBwU/jD4M1VZFkkSB4CjSEoZkCWita5LeGAXcu+vXKOJAmbee+e9s9YYo5Sq6rqsqqIsrbXo+CRd+5oXXRSc98ZapVRVVXkcyygSQhBRULM4juM4PvL/FrhflPN3aUCvw8W35lxY20BwY9TCjDGXUZPW21FKlVXVIAg06qRUmmVpcEGSJEmSOElYx85fi0sA+jgZQznUNThxjRB0LGx+bc6eoUZERM7a0MZyIQJybtEGKK37SvV6Pdvree8BMM7lQkMuRDsuGmgiWsR4rTi2P1rnbIv1Am63IPh59OGFlfLeW+eM1jXnYIy8d52WVmtttHbO0QJlIUS80JYLqcMFA90GeMdikUBY76u6rqoqz/PgbMzn86IoVF1rY6y1/lTX7TxVavx3Y0K757w3xqiFBxlcmnB1xhgXIpIyieOLfckuHmjnnLG2pUkTBDpnQ5xSlkVRBH8un8/LsqzrOrDJXZp6BDWw1oamzxijoqiu61LKevGYQRRc7yiKkiTJrP1/AWhjVGDLookLQUhd12VVlW3UVxRVVdVKaWOcc5clHIv3DIvW2DnHjQmenLXWEwGIoihOkiRJsiwLzGgamAuqw6UBrVTAtGqtbizwujW1CPm892t9lfNXqVUMFti9iGUYY845MMY5T5Mky7K612vr07QZ306NPmpzFvFIE2aXZZDjwPHwb1XXdVV1gb48Rnf+OWZCiKDRIcXlWsUIx15cfHgJQFurta6qqiiKkHubzef5fD7P85DE0MYE7W7SSUrZpdt7tcY7gSBfsgtyonEp0mGtDsFeVRVFMZvPpwsLILfuSPBMwp5L9aNPsSAgbcY1LA3iQrAQhV+EXaJ7Z6wNDWCg9mQ61VpbY+xyvOKPBPGbsAboLp2F4CFa+dZKBwF+kQmyxoRIrCzLeZ5Pp1PVUYklWJc6XF6ZMcZ4WLp9YIvCt5fRjDHBuZQyjuM0TXu93mAw0FqHeCTklEPTtxSHf1N0Ric9vca+tYzmi8gqjuMsy/paW2O8c0TEOA/ORghkmkjGmBBHfIO60YVZHAP5wjJKuBRGt8FVlgWhAMA5j6QsW3964eGF2wjHfAO2gPJkQn87GU3UAp0mScjRhD0yiuIkKYqm50qWJV9k3INHeJHVOJs1HSkd904cx5h/mxP/jLGmP9R7AjhjQsrQaRRSvVEUCSE4Y8FBCYn/C5TCl63tkTO3xOQLRRkXDDRjPHSGEjFABLFOkpBQz9I0iiLBOev0aSmthRCM84usxlkruxCNNu98OaIR7KIbQ85DjzLnvCGyMdqYNE2zuhZCAPDel2V5cHj48OHD+cFB35qBc8MV9Zg7f+Dd2LoLkZWtXjLo91jco0U/9xr3+XL8jWAvAvqlnAHWvouMc+69j6LIxXFibZCONku5v7//7Nmz9957b/rs2a1I3pJyuEJq5Vxu3eH59DthrMd5xhnvJ171Za/vo5SiRMQpVqRj1eU4x5WX7VSgF7mY5T3BluqxYAoXAkRiMfYndMimIbnufejUyLIskpIxZoGZ84LMZOWuFJHxlDJ2Hs9vyPlVKa5KWXpMZuVeXo42RtlgA3F6mvv8qqUjZHna+1y94W5t1g49CRwnYjj22BjnSZIMB4Miy7S1h9YmgmWR6CVCLLroekAPuPJ1b6w5CbFNYpvEYd1BbQ6tSQTvxZFIUsZiBrke5UsY9vgioL1H18ldmzw8CW7GmuO9DxmQ0DfovBdS7l679p3XX+9H0cHe3nw6HaTs9euD79wcbvQucnRWPtN7z8q952Xl/ZCzt+IY1pt5bp2TvaFYF3lfvGoAeDHQzr000EtYh77agLJz3jlyLuJ8Z2fHOcc511pPi0Kk7P7t0e+/c+3WVnoxdwYA+OTx/K+df/9Zzp3blnJbij3jHuvi+WR+Z9f3srTBV4jjlL54qM/A6G6f6dcCGt6Tc+QcWUuhE5YojqIsy3rD4dWd7WHqR7GN0nivMFKyfsQGMRcX4fLF3PVTbAyZFVwQnCd4xM4n1qGsfDH3+aHOErex8U1rtHPnBZoxLFBuGG1tIDh5zzkfjYbxQPR4nWv1Pz48HEh/eyRvj0QmLwDpca4Spl+7Kiczl+f+cW4Y2Cbn24motZmPJ8p5xtj21uYq0K/W6/Aea/2rk7Du4osO0NZ6Y7wxgdTtIhljMp2W3glI6376q4ku8nd243d242F8MVFMwvDaVfklp5l2T6y9wsXNKLoVR59o/Uk+efL08HeT5O7t2+ybDFiCbji37G+cgvIq0AC8D0CTtX4BMaxtTu49iPLKmKoulRUEEEDItR9Xflw59/Le3UYvunMlu3OlJ0B5qfKi9oACCiLhvGSWAONpm/OUcz+fP/380ziKkh/+aHdnJ+j1NyEd1p4J6LUQh03vYW1Qj6YQnBnn4D1zjhMVtZ3MVKn8cMHjufKPpvbTsdEvj/S9q+LGbnrz+paEf7o3rWrtAE1UEnny3qL2vs/FthA3OZtP808//vTxZL5z/60G5W+G0UE6zhCqrIGYsTD+ipxD4HJgccvlgLX3SrtZZZVxWUSVpZnyM00TzeZOltrW2tfmJcYxpT1yIt7aHMRws7zinHnAAhqw3lui0rMbEdsA3+RiXNQPx/Pp3uTHeSEWPVjfEKNxMtBLurG6yRgjEkSSsVTKfpKYXs8ZA+85Y5LzXpaVdU3AvCg456WhL2fWOErSJOv3Hmym81LtTfJH+/mF9A1YQAGeaOw8h608HTpbk2eMhelDURQJKflF57m+FqOx0vrhONDHSc0AAcRC9JLE93qcKBIiS5J+mg77/VmeF2VJRPvjseC8VP7LGT0v3OvXe9dHQ59sbCeFde6L/fxC+mAc4Ik0wJwzRFPm597XRIKxJEnCbC15CTL9IkaHVmstl9Z6GqtAc84ASUScZ3Hcojzs90eDwXZZzstynufamIdPnnDOrYf1VBkqLdMkgcgjYVF/NFJqMdAlXJYz9GM+iFkqm5pYj8JQYbzgjJ3ASFqM8qqJ4L0CFGCJJGNJHDcZ82+G0WFk+FmkI1RuyfdgDIyJ0MsVRYHXxjnjnDJGGVNU1XQ2K6pq9Ktfyc40tNqy0iCLYUiyuH9tR8zm+TzPW6AFZzs9cXtDXO01f1Uaepy7J7kTknHOwE4bOueAmsgwZokcwIA4SeIkiaQU30BjaC1OGYK/TpGPKXXIznDOOBeMhUHHYIwADzjvHVFV15PB4PnBwbDfFx2glWO15UMhhYyiOB0OSQhpjCmKIhwgGK72+HeuRPc3m/TIYe0hzNSSCHNTTr1zC4RJHO0tBI1uJ7ZcbF7pDECfRaPXsbhx7ALTj6/DaAoGcMa8lL04vrbRv3N1OEyj54srRFIOer3tzU0PaGvDDBQiiqIodPFy2NEwu7U7vH81mZcqLxQq7T05Sy4MHnkZIBhjSRzHXaAv1L6WH92pXbNei3J3aVFuOb7IB0NKlyTXtwZ3rg4G2VHqLoqiQb+/vbHhiJQx2lrGWJamG8Ph8/39g8NDMn5jkN7a3bx3vfd0b2aMIyjvAtDkPb3UkFvGWOgSkpcg0DirdLywMTwF6w7E3rlC66Kqa6PDfiFFEnHJKfL1KMb1zfSrUVJqV2k3SJNbuztvvf66B2qta62V1sqYSqnPHn4+zGJfTUbDPosTw6RjHIyBQtaAnCd6+REMcjEh7tjdXZCdWaNPyvq/DJcN4aOD+bsff/TZh78IvyaRuDqMr4wSq+bj/ce/cTe7klz74Mn8wyf51ih789a1B2+85sHLMD9OqUqpoq7TWLx5aztxc2by957kHzw6jJ1OvD4PEKH/Xkp5dFMXaqcCnabY2gJjKAqU5UkVPA3rjlaAMSuiD9nwv3729K//4i+ay3OWJiKNxK3N+Ad3e//4tf5bO5Hz9HC/3MziW1dHd67vOohS6wB0WddVXW8MB0aXzBTl4eOfvvvL9z58+saWeHPrvDPnL6NjpbVTgR4MEEXIMnz1FabTlXqdIB2huh06f/b8+edW4MqNcmPrb8v8g/6NL975g6WT7W/I/t1o905ixgfxV3R7e5agno/35vuP5Gg3Tfobo1GlVFnXZV2P6lGllKrmEZQX8VeT+moSmyETchkmzhBL0YtlGgkZJr3t3MLuXVy/1xzhLJ49wrNHoHO9EC+0U4FOEiQJvMfe3jHfY8mPPonUCy7/7KOP/vzTJ9i9Z67c/izdfPrmP8Jv/uulS81Q/JI9z/G87z+kq+Wbu19FevKLX7775d7B3d/+w7fe/vUHo6xnTE+pICCVUrqK96vn0akfJpCCZ7EYZVE/lbEUjAF338bv/hv8zk+aOusa//sv8b/+Eo/ff3n0XsLOMK4j+B5dpT4lJuzSeSEdP//kk//yp38KxjDaxn/4j/j3f4TfXr7IzOO9R3j/0cNbOfv+1affv/HR3pfP/uYf9v/h2d/+/rXf+eMf7H4/riXngvMw3qxnjMpkcdiTUjYXZ4wYI4RL8xABCs6yWI56cT/VcaTBOO5/F3/wx/i3t4+uLSQ+f/9bBnTXTmkMW7hDgQhv/RCvv4MHv4nf+QlurrlIxDHMMNxINnZ38vp7HzCM7/gDt+ndxuOr9//68YGlbTx/7p4/or1Ho3406kcpd+PnX9wa+D/80T032nq+sTXPtp9+70rFrkyz6N3NOhrpzFfFoC5Y9XDYf/LWhjeb+M1/jjdur6nBJdvZgA7ux9oofFU3llDmHN7jzR/gX/47/PhfYRe4tuYiMbCV4fpmyu21OcNX/Wt5vJNvvem2Xnv86S//5/t/8+Ffvc/Gz2jyDJO9YRaNenKYit3M3hu5796+97Pk1t/Htz8bvVHc+H594x3H6d3DD58cvC/rqR1ak7l887Xpte+53bdPqsBl2zkYjVN9u2406Am7d/Hr/wS/ceJFGCAFUslNNphvR0/kTr39Ot0d+WuYsO9N/uH/fPzf/wrt6LCJBjBIxL94MLq1s3nl9lXi9/bF/cfbv4YHP8J3YBzKD37ri6qC3Wtu8dYP8PYbeA0SkEAEmDYKfyV2EdKxltHHgH5x8GCASQVMlZupWW1ddybcHeDHf4TtXfhjuX/D3KfRwX+TB5vcfBRfm8ZbPOtRBOLAyZ0EfWAL2ALGwBhY8aUuy84M9EldtKukXpWOM0RpmjCukE8Vcm0dua5M3QC2N/FbP1n6E2Pwq0f1ky9+Kg8fqnhYZSPW6yEG+Gmxdx+4DtwFvgDMKwX6LDMXT+8LP70l5Bwnz6YXQAZkgGRgKZBwo7iCr+1xrBIgWf5bDxRFWuxdAfaYj5gjGE0KVAIGMBrrJohaoAJmQPUKdQMN0IydBveqdKz1o08S6NAYnmARsAVcA3oAbYLyOEdyUBhTvkwXIXkYTeQRzTFTmCWwgCqXpCZYATwFCiAH8rNf4twmm0zmEnZdWx3d8UKgl4LvFwF9B9gEXAS3GR3Y2Dg/qU5OGa4aEVkDa8BzzCeY7oIAVa6VrAIogGdnPfWFWQfowOulYAQv0mh0ghTgGLhHZYKuUUzheksnMAJj4CGwD3gNGut8Uk2mlS0qimY028AIOCn0U+H9P1vobDUqoF45WwmU87Oe5Bwm4dyx9z1Yl7NdRq+60qdzuQXdKBRTTG4sXd5EOByhDLc/AcbajKu6KE1ekpzRDJie3GAboDyBAatmDUrCjGEp81QB1SsDuo3flvJBwU4fRvNCgeYc3sEoVHPMly/vIhSEYghWg03AJhXmla8qqmvUJYo55sMTgbaAKuA6jQd5OA0TOsrMMelwBnWB+WAZ6Bqo87M+rXOYDCOyjujcgtVKylkiw5O8Ds4hBDzBGegC9cr1TeglBdXAeI75lKqy6WpwFraEGp7oHFjAVPCdn71h9YTNeiBP9YS6PzkDU0INsNR5UoeTXPSnyVZsIR0B66DRodDitdrPsooysPw2hEclBIgWRFsHNAMqgAOVosOnlE9RVc00A29hKtQOJ+WZnYUp1wA99QChnh0DujmbP3pTg9X18kkuxzpAL/G63Qy6ofWyN3JKtBKAbh+Y8wDBu7X+VmO6hFGwpnNM+BOLk1x878AZi2IkaRgZzIjgDGwNENxSDxyBHJzFknZ4g8v58s2SHQe65XVXtVtGr7qApwh0d/ka/XdnMQYWRSzL4HukFZS6lKtckK0AvYQ10AxIbJuLteoMHIM4+HYLjf7PP/17/P5d4NTJdCf9cupnaZiULE0Z9cJXwM6QVFk5G9HJ175Ik7C2QfZIUjtYY2UYTZfLwHoud1tCImjNnIaas2p8Uj1IFbA1UUdbvGGmQD1m/CS3w7Ozy6szTBeox4wdkw5SJUxBr6gxbMEFjvEaHd+uq9EtxOv6U44B3Z7HaaZzVh+eWBFdk626lGTOMlOyegx+QmNIBG/Z2YBm3jJTsEouNYasrkgf9xEvwYhaRrdcXlpCSmgto9eiHArds3GOJIa3zNZMFyfWxWg4TejOAHOwiuly2U/oHAFPIE/WwjsQERHzHs42L2jXvINTzBRYGv1oanIKdCkfkeyahLUNLt2XvbsElNdKx2qirqvRQrA/+zMMBicjdT4jkDVkNLQhY8g5gMhogEAgo8+SB381RkfS0UU5FNB8iioAzVrpWAV6racRdKOuoRS2ti6n+kTGUFWRUm2bSVpT2498+U7bGa0jHS3KYR2MNdlk1nXvVt2Mrm4IcQxoAEJgNIJzZDTq6sSqOEtLwaf3MIZUvey/d6uvNYJudHeuhdc7GEP1ytm0gjGvgPuSrGWtXCyI3KzDd5a74/5xcnjSBu4BayHYn/85AGQZdnfJGtQ1FSdngJv5LEcgkXPQipw7MWAhwFk62zd6yTkoteZgrdbvv1AjQMK6Jbk4onbYlBJbW7h3D9MpZrPG/TgtPCFw/icffdRcpN/HzZv4cp/KAvPZS9QuvAQXZSedTSvU1QUnlQJbjvNDwlrQySgLgcEA77yDnR38/Of42c9QFGv8uaWGVIijl3E+x9/9HUSKD95F/jJAvxqzFg8/wfRkv/PMFkSr/UIvCy9/8y3AAHQb/rei0d3MMrz1Fh48QJ7jgw8asV6lc7ch7XpXRYGiwGCEqsQXn57/fi7YiDCfIp8jW+mUfEnzBEfwwecMDVyYMkMwPngdoCMmtnRGB/EgYUGprT0xf9TGlt0WFbh///79e/eOasTYG8NhKLR7ll2aU/afvvOkw7o/Le0EAAwGgzt37pwV1OMWuFw5VAa1g7ZQDtbDeBgP61C7Vjo6DeCxE3TthUCHdZPk9P/p/v1wwO/9+Meh8M+uX4cQR0ug/+rm0v6lRcpjhXBwu3PpbO16KWo9yZP5WuYBT6gNZgozjVwj1ygNSoPKorKoDKQzlpNgBEaAXAl2u2mjdsZr6961RA6FzkP6k9u3j+B4/BhSQkocHDSFsIRfl8rdnacsUYQoOjo+lNeeJ7xn7UvGF2n3r2UNIZv/EGY9WQ/rkRtMFA4rHNYYVxjXmCjMFXKNwkA640DEPDFqlhNd/TaN1wW6DQWX/rB9bYPf1j6wMAu83dluLj2zxWtxtKymB7p/2L362lzC6k8vj3WQCE9HzjoBzkM7aIdcY1Jjr8SzolmeFzisMa2Ra0itrfCCS3ACo2bNCAyYzObjsiiM8Yw5IvfFF242k1qnQMb5iPOREHFwMNogm7EGwRbHJUCXkD3/coTBcUDbnUts7G6+DNZEx5q7drEeyqG2mCnMFKYKkxrjGocV9isclJgozDVkrZxwEB7Cg3sExAWBA4+fPX33888fHxwoa5W16qOP1P5+VlXXOL/O+ZtSvkUUEbGgGIGwSyiHjseTiLm6eUb0uyCecsDSMziHBQo7alTCejiC83AE7RoVninMNQqNyqC2UA7awSyOl1o57iE9hIcgCAKc05XT3n788OHfvvfeJ0+e1FpXWtcHB/V02tf6Jud3ODdEGdF1opQoFSJMGlxGeRXoJVKfxPHV7qVTUF5Fc7VwPguKYRcqoT3MAkRlm3ZvUjeKXBrUBsrCOFgP5+E9pDFWEKHNEBCVVj3ce/5o//lPP/n45x9//MXennXOem/L0modez8heuJ9STTz/i3v70p5mygCojABewnZU0i6FohTqLr2AGB5vYTy6vEvD3MrEZVFbVBb1A7KQjvUFqVtgB7XmGvkBpWFcjAOzjdpBem0IwqedPj0LZ/m+UePHv3Nxx++9/Dh+48e7k0mHE0nfYhzvgI4UHg/8X7qPYg2gR5jsm3uuoNyAjdblWgLS0CsEnYJ2TbT3Xpvrbu2lLNddbTP58wF0TAeyqE0KDSK4LoZ1BZVYLRtpCM0faWBstAedsFgyZxlnBgH85jM5uOqeLj//Beff/bLRw+/OjyotB4Cd4DbYVAKMAOeAQfAlOhj77lzMWOMsbuc3xUiO0lqVwF9oQSjw0EhcOUKdneRpmvi/lM2V/t91gYyLwI60LkwmCpMa0wVpgp5EGWD0qJarAvT+NFzjdrCOIQP6EjmHOdgHMT8+w8/y7V6/8kXv/jss18+fFgqpbS+BrwN/DagAQM8Ad4FZsCE6MA5BUjGBGOREDe8z9ZK7SmIr7+zldaMc1y5gjfeQL+/JgLsbp5eeBl8u9WxHtqi0Jgq7Fc4qHBYYVxjXGGuG1IbD+2gHJRtmF5bmFY64B0cwOHhP336VRxFe9PpJJ/nVdW39ob3d4BbwAbgABtGJQMAngLPgIJo6v3Y+4rIE2FnB6+9hps3j6KVsJwU7C1Fg6vrUEgS7O6i30d6kZ8f7Jr3K04FNQqrfSMXhzUOShxUzXJY47DCTDWwus4ZTKe19C2jwQEH8vRsPN4aDuZFUSplrL3i/QOi+8AuIAEBRMAVgAEbwLvAFHCAAkpAh9nXN2/i934PP/pR87a2UTJjBLBVJV1V1dVy+Kssw+J/433xRjC0aNkWzllozfTCrwi6EVq8cYXDuoE7AF3bJn9EC497KbSR5D05RowRC58od9Y577wniom2gG0gC0k/AEAC9AEFZAAHnBB1muW9Xnl1p965Vn/3Hfbg1/DWd5ngXHAmBBOCCb5IHZ63XbokI8A4VAYz3cQduUGhG3eiWqQsCo3cYL44ZlJjrFBoKAf9ooS2hHMhYHcMIERcxCISnGPB1hroAX6BtQUKYAJUYUpOnJSbW9Nru9Pv/2D6/R+K19/A1VusJilJRhBEEiQYMcY4v5TJ7F/D2kxFa56gHQqDSY39EvsVxnUTPU8Vct24zyEGUQv9LQxqA3P8M7knWQCaLYBmkstESsEFY0wBU2ACREAKBCevBMbAc2AOeMZ4krrNK/rm/dmDH+z/1j+121c9F2xOSUxxTHGMOKLIUSQhBeesydKCHfU/MCx3Rlyedd9utGgTHKG2yE3T1j3L8bzE8xIHFfZLzFQju34RhYcwJKBvae1cmWWT5DzgCPAMjBBzmYg4FlEk5IzwK/JzottAuZDpCfAZ8Dkw4cJyPuiNNq7e3bzxoJY7n01kZEgz8tz3Epal1Et8FrMsoTRmWUSxZIlAxMEZRJtnZeDUdEZcKuNpkalwIR+10NAQjExb0dDIDXKDXGOqMFGY1g3QXQn2ndbyLFGQDF3IBObCqEEmExnHUkohpt4fONoDBZWIAAkcAp8AnwKccyZk2huNrtzevP6dSu58OpEmp5LIMBpmNMj8MGPD1A9TNkhpkLJBTP2YZRKSI+IQ7cIgAM4ul9ltDmg1X2F8g/JcI9coFo5wEOJJ3Rx/nnheMu+JMZADsVTKO5tbYIwBaZw+m42fzyamKg+ttc4KQAAFMAaI8+HW9a0rt67dfjvdfqOOrpVu4HJWws8904wPaz+s2KhHo4w2MtowtGmpTpnxsBEigVgg4ogEpIBkjTCdn9RtK98tBAspnuB1aXcMbu0wrTFTmCsUunE8wvHhSbzkd4PWWDNZKHwiMpPyzub2sNfP0nRztPHBV18S2FPnD1E/W0wP9oABiPGNrRt3X/vh1s23k63X62g3t3E+5zNHU0c1Apdps6aNPm1p2rZUu+bt84REIJFIBBwhJpAAY2AEcREoNwnMNjBCGLrU9DCpRZtm3BHc2mNSH+lGaRugrYP1axJcXwto59CkoMHBEiFHCb+5sSWjxBE3JJJ0OKvKWVUSE8SEZ4KYYCIZXH2QbL2J3i0lNmsT5V7MPc0dFZ4UCJw8yDHSgPZQHpWjEJ4Oa5ZIpJHW/igAAAJLSURBVHIBdygIxAKJgFzwum05mwIDO15e5X5Iw7exRjd3THTUt9SGbWqRzFSuEY1ZEGWFmUJhUAeg1zkqXwNoT3CemA/f4nckON/MBknSt5BM9jdG04OiOCgKLxLHE89jyxOSvcHV13z/XiWuOJvY2lfkK+IGRERgsA61BTQcI01UeswMJgr7NfoxUoEGa4lUIpNIJVKBVCIWEAyCQ4alLS8KR5urQBMcNcnJEJU5D0twHtY3UIaOpbAEH7lc4F4vEp7FojGsbSPN50+2SuecI+a51wRrfW28F5J4FEsxyti1zZSiraRfJ2VleGpFanhqeGpETw52rLyiqW+NNJ4USDGyIM8IjKwjMmRByqNwNDOUKOpVLIuRRgsWL8BNO3AH7ZZBwTmiRUF2Nttf+WLsRPAXW9k1/lijF5bQczpXmOsG9JDSDMm2IN964bSFRGhtYc/bZ7AA2lgyzBvmS7DKYFx6y71h3nA+M7FjIkr6A0E+oZpFNeKaxYTYsdiJofXSWRgO68kwspxc6HbkZB1ZkCJijmDABXEJKRBLRLLBK17IRVgH9GMB2cG3gbiFWxxDv/FYGDiD4J3Y1x91OwUZsXQEcZPPVA30M4VCN7Le9dvCA3MXNCpPWus1eM2oJFSGJiUp1iwa0rCUS5lIOcgiTpJIOpKGJIN0XBovrIXli4XIcyJOROQ8OSLnyHFyjByHY2CcuGB8oQBHPG2xOw6oXBwjO+VIdMqLzbC0sSdD0wBSx33OF/wNvJ62S41cN+9Ek1wJ2Cxa1Aux/wvodhhjxZkGvAAAAABJRU5ErkJggg==" width="120" height="102" class="img_ev3q"></p>
<p>The race timer has also been fixed to use a hundredths timer instead of a 60ths timer.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fix-collision-extraction-">Fix Collision Extraction <a href="https://github.com/open-goal/jak-project/pull/3081" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#fix-collision-extraction-" class="hash-link" aria-label="Direct link to fix-collision-extraction-" title="Direct link to fix-collision-extraction-" translate="no">​</a></h3>
<p>When a collide fragment had exactly 256 polygons, parts of the collision would not be extracted properly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="high-frame-rate-disclaimer-">High Frame Rate Disclaimer <a href="https://github.com/open-goal/jak-project/pull/3092" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#high-frame-rate-disclaimer-" class="hash-link" aria-label="Direct link to high-frame-rate-disclaimer-" title="Direct link to high-frame-rate-disclaimer-" translate="no">​</a></h3>
<p><a href="https://opengoal.dev/blog/progress-report-sept-2023/#experimental-support-for-higher-frame-rates-" target="_blank" rel="noopener noreferrer" class="">Last month</a>, we added experimental support for higher frame rates to Jak 2.</p>
<p>To make sure people are aware that this option is experimental and bugs are to be expected, we added a disclaimer when trying to go past 60 FPS for the first time in a session.</p>
<!--$--><video style="display:block;width:320px;height:180px" class="blog-video" src="/assets/medias/frame-rate-disclaimer-e9c591488cc8ab86d550a6dccfcff1a9.mp4" controls=""></video><!--/$-->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jak-3">Jak 3<a href="https://opengoal.dev/blog/progress-report-oct-2023#jak-3" class="hash-link" aria-label="Direct link to Jak 3" title="Direct link to Jak 3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="allow-decompiler-to-run-on-jak-3-code-and-improve-all-types-generation-">Allow Decompiler To Run on Jak 3 Code and Improve <code>all-types</code> Generation <a href="https://github.com/open-goal/jak-project/pull/2526" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#allow-decompiler-to-run-on-jak-3-code-and-improve-all-types-generation-" class="hash-link" aria-label="Direct link to allow-decompiler-to-run-on-jak-3-code-and-improve-all-types-generation-" title="Direct link to allow-decompiler-to-run-on-jak-3-code-and-improve-all-types-generation-" translate="no">​</a></h3>
<p>This PR has been around since April, but has only been merged recently.
It includes most of the necessary changes to set up Jak 3 for use with the decompiler.</p>
<p>Along with this, it also vastly improves the <code>all-types</code> generation (a big file used by the decompiler that we have to change a lot during decomp, containing information about every single type, method and function in the game), which will save us a lot of time over the course of the decompilation process.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="goal_src-skeleton-for-jak-3-"><code>goal_src</code> Skeleton for Jak 3 <a href="https://github.com/open-goal/jak-project/pull/3069" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#goal_src-skeleton-for-jak-3-" class="hash-link" aria-label="Direct link to goal_src-skeleton-for-jak-3-" title="Direct link to goal_src-skeleton-for-jak-3-" translate="no">​</a></h3>
<p>The folder structure for all of the code files present in Jak 3 (it's over 1000 this time!) has been laid out and stubs have been added.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-v5-data-files--">Support for v5 Data Files <a href="https://github.com/open-goal/jak-project/pull/3076" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a> <a href="https://github.com/open-goal/jak-project/pull/3077" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#support-for-v5-data-files--" class="hash-link" aria-label="Direct link to support-for-v5-data-files--" title="Direct link to support-for-v5-data-files--" translate="no">​</a></h3>
<p>Jak 3 data files are now handled by the decompiler, allowing us to work with files like art groups (containing models), textures and level data.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="allow-texture-and-model-extraction-">Allow Texture and Model Extraction <a href="https://github.com/open-goal/jak-project/pull/3080" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#allow-texture-and-model-extraction-" class="hash-link" aria-label="Direct link to allow-texture-and-model-extraction-" title="Direct link to allow-texture-and-model-extraction-" translate="no">​</a></h3>
<p>It is now possible to extract textures and models from Jak 3 assets. The results are not quite perfect yet and some things are not handled as of now (such as the new desert renderer), but it's a good start and hopefully means that the main foreground and background renderers have not changed a whole lot between Jak 2 and 3.</p>
<p><img decoding="async" loading="lazy" alt="Jak and Daxter" src="https://opengoal.dev/assets/images/jak3-merc-extract-a1a96b298cc27da2ace99f80f2003669.png" width="923" height="732" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Metalhead City background geometry ported to Jak 2" src="https://opengoal.dev/assets/images/jak3-tfrag-extract-fdac393a0d6629dc5eefa377a6ffc052.png" width="1918" height="1079" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Temple" src="https://opengoal.dev/assets/images/jak3-tfrag-extract2-46f7afeeca9812d78895a552dab43f78.png" width="1546" height="926" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="implement-missing-pexcw-instruction-">Implement Missing <code>pexcw</code> Instruction <a href="https://github.com/open-goal/jak-project/pull/3084" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:middle"><path d="M6.766 11.695C4.703 11.437 3.25 9.904 3.25 7.92c0-.806.281-1.677.75-2.258-.203-.532-.172-1.662.062-2.129.626-.081 1.469.258 1.969.726.594-.194 1.219-.291 1.985-.291.765 0 1.39.097 1.953.274.484-.451 1.343-.79 1.969-.709.218.435.25 1.564.046 2.113.5.613.766 1.436.766 2.274 0 1.984-1.453 3.485-3.547 3.759.531.355.891 1.129.891 2.016v1.678c0 .484.39.758.859.564C13.781 14.824 16 11.905 16 8.291 16 3.726 12.406 0 7.984 0 3.562 0 0 3.726 0 8.291c0 3.581 2.203 6.55 5.172 7.663A.595.595 0 0 0 6 15.389v-1.291c-.219.097-.5.162-.75.162-1.031 0-1.641-.581-2.078-1.662-.172-.435-.36-.693-.719-.742-.187-.016-.25-.097-.25-.193 0-.194.313-.339.625-.339.453 0 .844.29 1.25.887.313.468.641.678 1.031.678.391 0 .641-.146 1-.516.266-.275.469-.517.657-.678Z"></path></svg></a><a href="https://opengoal.dev/blog/progress-report-oct-2023#implement-missing-pexcw-instruction-" class="hash-link" aria-label="Direct link to implement-missing-pexcw-instruction-" title="Direct link to implement-missing-pexcw-instruction-" translate="no">​</a></h3>
<p>The MIPS instruction <code>pexcw</code> was not being handled by the decompiler. It's only used in two files in Jak 3.</p>]]></content>
        <author>
            <name>Hat Kid</name>
            <uri>https://github.com/Hat-Kid</uri>
        </author>
        <category label="progress-report" term="progress-report"/>
    </entry>
</feed>