update asset URLs to tribes2.online
Some checks failed
Deploy to Cloudflare Pages / deploy (push) Has been cancelled

This commit is contained in:
Brian Beck 2026-04-08 09:08:59 -07:00
parent 8db82d0b70
commit 49680aa4b1
23 changed files with 68 additions and 64 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,78631,(e,t,n)=>{!function(t,n){if("function"==typeof define&&define.amd){let t;void 0!==(t=n())&&e.v(t)}else n()}(e.e,function(){"use strict";function n(e,t,n){var o=new XMLHttpRequest;o.open("GET",e),o.responseType="blob",o.onload=function(){s(o.response,t,n)},o.onerror=function(){console.error("could not download file")},o.send()}function o(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function a(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(n){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var i="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:e.g.global===e.g?e.g:void 0,r=i.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),s=i.saveAs||("object"!=typeof window||window!==i?function(){}:"download"in HTMLAnchorElement.prototype&&!r?function(e,t,r){var s=i.URL||i.webkitURL,c=document.createElement("a");c.download=t=t||e.name||"download",c.rel="noopener","string"==typeof e?(c.href=e,c.origin===location.origin?a(c):o(c.href)?n(e,t,r):a(c,c.target="_blank")):(c.href=s.createObjectURL(e),setTimeout(function(){s.revokeObjectURL(c.href)},4e4),setTimeout(function(){a(c)},0))}:"msSaveOrOpenBlob"in navigator?function(e,t,i){if(t=t||e.name||"download","string"!=typeof e){var r;navigator.msSaveOrOpenBlob((void 0===(r=i)?r={autoBom:!1}:"object"!=typeof r&&(console.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\uFEFF",e],{type:e.type}):e),t)}else if(o(e))n(e,t,i);else{var s=document.createElement("a");s.href=e,s.target="_blank",setTimeout(function(){a(s)})}}:function(e,t,o,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return n(e,t,o);var s="application/octet-stream"===e.type,c=/constructor/i.test(i.HTMLElement)||i.safari,l=/CriOS\/[\d]+/.test(navigator.userAgent);if((l||s&&c||r)&&"undefined"!=typeof FileReader){var u=new FileReader;u.onloadend=function(){var e=u.result;e=l?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=e:location=e,a=null},u.readAsDataURL(e)}else{var f=i.URL||i.webkitURL,d=f.createObjectURL(e);a?a.location=d:location.href=d,a=null,setTimeout(function(){f.revokeObjectURL(d)},4e4)}});i.saveAs=s.saveAs=s,t.exports=s})},69642,e=>{"use strict";e.s(["collectFiles",()=>r,"createZipFile",()=>o,"savePngFile",()=>i,"saveZipFile",()=>a]);var t=e.i(71315),n=e.i(78631);function o(e){let n=new t.default;for(let t of e)n.file("textures/skins/".concat(t.name),t.data);return n}async function a(e,t){let o=await e.generateAsync({type:"blob"});(0,n.saveAs)(o,t)}function i(e,t){(0,n.saveAs)(e,t)}async function r(e){let{skipNotFound:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(await Promise.all(e.map(async e=>{let n="".concat("https://exogen.github.io/t2-skins/skins","/").concat(e),o=await fetch(n);if(!o.ok){if(t&&404===o.status)return null;throw Error("Response failed: ".concat(o.status," ").concat(o.statusText))}let a=await o.arrayBuffer();return{name:e.replace(/@1x\.png$/,".png"),data:a}}))).filter(e=>null!=e)}}]);
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,78631,(e,t,n)=>{!function(t,n){if("function"==typeof define&&define.amd){let t;void 0!==(t=n())&&e.v(t)}else n()}(e.e,function(){"use strict";function n(e,t,n){var o=new XMLHttpRequest;o.open("GET",e),o.responseType="blob",o.onload=function(){c(o.response,t,n)},o.onerror=function(){console.error("could not download file")},o.send()}function o(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function a(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(n){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var i="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:e.g.global===e.g?e.g:void 0,r=i.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),c=i.saveAs||("object"!=typeof window||window!==i?function(){}:"download"in HTMLAnchorElement.prototype&&!r?function(e,t,r){var c=i.URL||i.webkitURL,s=document.createElement("a");s.download=t=t||e.name||"download",s.rel="noopener","string"==typeof e?(s.href=e,s.origin===location.origin?a(s):o(s.href)?n(e,t,r):a(s,s.target="_blank")):(s.href=c.createObjectURL(e),setTimeout(function(){c.revokeObjectURL(s.href)},4e4),setTimeout(function(){a(s)},0))}:"msSaveOrOpenBlob"in navigator?function(e,t,i){if(t=t||e.name||"download","string"!=typeof e){var r;navigator.msSaveOrOpenBlob((void 0===(r=i)?r={autoBom:!1}:"object"!=typeof r&&(console.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\uFEFF",e],{type:e.type}):e),t)}else if(o(e))n(e,t,i);else{var c=document.createElement("a");c.href=e,c.target="_blank",setTimeout(function(){a(c)})}}:function(e,t,o,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return n(e,t,o);var c="application/octet-stream"===e.type,s=/constructor/i.test(i.HTMLElement)||i.safari,l=/CriOS\/[\d]+/.test(navigator.userAgent);if((l||c&&s||r)&&"undefined"!=typeof FileReader){var u=new FileReader;u.onloadend=function(){var e=u.result;e=l?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=e:location=e,a=null},u.readAsDataURL(e)}else{var f=i.URL||i.webkitURL,d=f.createObjectURL(e);a?a.location=d:location.href=d,a=null,setTimeout(function(){f.revokeObjectURL(d)},4e4)}});i.saveAs=c.saveAs=c,t.exports=c})},69642,e=>{"use strict";e.s(["collectFiles",()=>c,"createZipFile",()=>a,"savePngFile",()=>r,"saveZipFile",()=>i]);var t=e.i(71315),n=e.i(78631),o=e.i(96165);function a(e){let n=new t.default;for(let t of e)n.file("textures/skins/".concat(t.name),t.data);return n}async function i(e,t){let o=await e.generateAsync({type:"blob"});(0,n.saveAs)(o,t)}function r(e,t){(0,n.saveAs)(e,t)}async function c(e){let{skipNotFound:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(await Promise.all(e.map(async e=>{let n="".concat(o.SKIN_ASSET_BASE_URL,"/").concat(e),a=await fetch(n);if(!a.ok){if(t&&404===a.status)return null;throw Error("Response failed: ".concat(a.status," ").concat(a.statusText))}let i=await a.arrayBuffer();return{name:e.replace(/@1x\.png$/,".png"),data:i}}))).filter(e=>null!=e)}}]);

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,7 @@
3:I[39756,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"default"]
4:I[37457,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"default"]
5:I[47257,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"ClientPageRoot"]
6:I[25500,["/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js","/t2-model-skinner/_next/static/chunks/a0f1f445ab9525e3.js","/t2-model-skinner/_next/static/chunks/d63fc3798baf75bd.js","/t2-model-skinner/_next/static/chunks/d9f21d966613a96e.js","/t2-model-skinner/_next/static/chunks/40cecef8385b39df.js"],"default"]
6:I[25500,["/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js","/t2-model-skinner/_next/static/chunks/d0ff1d6ce0fd9297.js","/t2-model-skinner/_next/static/chunks/2a02daea7eb2756c.js","/t2-model-skinner/_next/static/chunks/4cde5a883a99f9c9.js","/t2-model-skinner/_next/static/chunks/c8d20bf4c6d52266.js"],"default"]
9:I[97367,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"OutletBoundary"]
b:I[11533,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"AsyncMetadataOutlet"]
d:I[97367,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"ViewportBoundary"]
@ -12,7 +12,7 @@ f:I[97367,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-mode
12:I[68027,["/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js"],"default"]
:HL["/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","style"]
:HL["/t2-model-skinner/_next/static/chunks/42cdb402ed9b36c5.css","style"]
0:{"P":null,"b":"kzYjkQr65mRpo7Nh2-DI8","p":"/t2-model-skinner","c":["","gallery",""],"i":false,"f":[[["",{"children":["gallery",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["gallery",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/42cdb402ed9b36c5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/t2-model-skinner/_next/static/chunks/a0f1f445ab9525e3.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/t2-model-skinner/_next/static/chunks/d63fc3798baf75bd.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/t2-model-skinner/_next/static/chunks/d9f21d966613a96e.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/t2-model-skinner/_next/static/chunks/40cecef8385b39df.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Ld",null,{"children":"$Le"}],null],["$","$Lf",null,{"children":["$","div",null,{"hidden":true,"children":["$","$10",null,{"fallback":null,"children":"$L11"}]}]}]]}],false]],"m":"$undefined","G":["$12",[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"s":false,"S":true}
0:{"P":null,"b":"Ip_GuyV0-9tYYuXg6C6XE","p":"/t2-model-skinner","c":["","gallery",""],"i":false,"f":[[["",{"children":["gallery",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["gallery",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/42cdb402ed9b36c5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/t2-model-skinner/_next/static/chunks/d0ff1d6ce0fd9297.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/t2-model-skinner/_next/static/chunks/2a02daea7eb2756c.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/t2-model-skinner/_next/static/chunks/4cde5a883a99f9c9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/t2-model-skinner/_next/static/chunks/c8d20bf4c6d52266.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Ld",null,{"children":"$Le"}],null],["$","$Lf",null,{"children":["$","div",null,{"hidden":true,"children":["$","$10",null,{"fallback":null,"children":"$L11"}]}]}]]}],false]],"m":"$undefined","G":["$12",[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"s":false,"S":true}
7:{}
8:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params"
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,7 @@
3:I[39756,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"default"]
4:I[37457,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"default"]
5:I[47257,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"ClientPageRoot"]
6:I[52683,["/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js","/t2-model-skinner/_next/static/chunks/3eaa877b756003b3.js","/t2-model-skinner/_next/static/chunks/d63fc3798baf75bd.js","/t2-model-skinner/_next/static/chunks/43ceca71888c9b70.js","/t2-model-skinner/_next/static/chunks/5f9470a691b55cfe.js","/t2-model-skinner/_next/static/chunks/a55df98dcb3b60ad.js"],"default"]
6:I[52683,["/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js","/t2-model-skinner/_next/static/chunks/0baa0c6f20549fef.js","/t2-model-skinner/_next/static/chunks/8b82d6c1705317af.js","/t2-model-skinner/_next/static/chunks/f66959b00ac693d8.js","/t2-model-skinner/_next/static/chunks/fce06ff30e9ff4bb.js","/t2-model-skinner/_next/static/chunks/a55df98dcb3b60ad.js"],"default"]
9:I[97367,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"OutletBoundary"]
b:I[11533,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"AsyncMetadataOutlet"]
d:I[97367,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-model-skinner/_next/static/chunks/7dd66bdf8a7e5707.js"],"ViewportBoundary"]
@ -12,7 +12,7 @@ f:I[97367,["/t2-model-skinner/_next/static/chunks/ff1a16fafef87110.js","/t2-mode
12:I[68027,["/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js"],"default"]
:HL["/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","style"]
:HL["/t2-model-skinner/_next/static/chunks/df18f9fdc6a3cb7c.css","style"]
0:{"P":null,"b":"kzYjkQr65mRpo7Nh2-DI8","p":"/t2-model-skinner","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/df18f9fdc6a3cb7c.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/t2-model-skinner/_next/static/chunks/3eaa877b756003b3.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/t2-model-skinner/_next/static/chunks/d63fc3798baf75bd.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/t2-model-skinner/_next/static/chunks/43ceca71888c9b70.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/t2-model-skinner/_next/static/chunks/5f9470a691b55cfe.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/t2-model-skinner/_next/static/chunks/a55df98dcb3b60ad.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Ld",null,{"children":"$Le"}],null],["$","$Lf",null,{"children":["$","div",null,{"hidden":true,"children":["$","$10",null,{"fallback":null,"children":"$L11"}]}]}]]}],false]],"m":"$undefined","G":["$12",[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"s":false,"S":true}
0:{"P":null,"b":"Ip_GuyV0-9tYYuXg6C6XE","p":"/t2-model-skinner","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/t2-model-skinner/_next/static/chunks/993ba35625024c1a.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/df18f9fdc6a3cb7c.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/t2-model-skinner/_next/static/chunks/0baa0c6f20549fef.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/t2-model-skinner/_next/static/chunks/8b82d6c1705317af.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/t2-model-skinner/_next/static/chunks/f66959b00ac693d8.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/t2-model-skinner/_next/static/chunks/fce06ff30e9ff4bb.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/t2-model-skinner/_next/static/chunks/a55df98dcb3b60ad.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Ld",null,{"children":"$Le"}],null],["$","$Lf",null,{"children":["$","div",null,{"hidden":true,"children":["$","$10",null,{"fallback":null,"children":"$L11"}]}]}]]}],false]],"m":"$undefined","G":["$12",[["$","link","0",{"rel":"stylesheet","href":"/t2-model-skinner/_next/static/chunks/795c34bef1c92210.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"s":false,"S":true}
7:{}
8:"$0:f:0:1:2:children:1:props:children:0:props:params"
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]

View file

@ -5,9 +5,9 @@ import { WarriorContext } from "./useWarrior";
import type { MaterialDefinition } from "./models";
import type { Skin } from "./importUtils";
import modelConfig from "./models";
import { SKIN_ASSET_BASE_URL } from "./deployPaths";
const { materials, modelDefaults, defaultSkins } = modelConfig;
const baseSkinPath = `https://exogen.github.io/t2-skins/skins`;
let IMPORTED_SKINS: Map<string, Map<string | null, Skin>> = new Map();
@ -121,7 +121,7 @@ export function getSkinImageUrls({
};
case "custom":
return {
base: [`${baseSkinPath}/${selectedSkin}.${actualModel}.png`],
base: [`${SKIN_ASSET_BASE_URL}/${selectedSkin}.${actualModel}.png`],
};
}
break;
@ -130,7 +130,7 @@ export function getSkinImageUrls({
return materialDefs.reduce(
(
skinImageUrls: Record<string, string[]>,
materialDef: MaterialDefinition
materialDef: MaterialDefinition,
) => {
if (materialDef) {
const frameCount = materialDef.frameCount ?? 1;
@ -140,7 +140,7 @@ export function getSkinImageUrls({
skinImageUrls[materialDef.file ?? materialDef.name] =
getFrameNames(
materialDef.file ?? materialDef.name,
frameCount
frameCount,
).map((name) => `${basePath}/textures/${name}.png`);
}
break;
@ -148,16 +148,17 @@ export function getSkinImageUrls({
skinImageUrls[materialDef.file ?? materialDef.name] =
getFrameNames(
materialDef.file ?? materialDef.name,
frameCount
frameCount,
).map(
(name) => `${baseSkinPath}/${selectedSkin}/${name}.png`
(name) =>
`${SKIN_ASSET_BASE_URL}/${selectedSkin}/${name}.png`,
);
break;
}
}
return skinImageUrls;
},
{}
{},
);
}
return {};
@ -166,7 +167,7 @@ export function getSkinImageUrls({
function getModelUrl(
basePath: string,
actualModel: string,
selectedAnimation: string | null
selectedAnimation: string | null,
) {
switch (actualModel) {
default:
@ -185,13 +186,13 @@ export default function WarriorProvider({ children }: { children: ReactNode }) {
const [selectedModel, setSelectedModel] = useState<string>("lmale");
const [selectedModelType, setSelectedModelType] = useState("player");
const [selectedSkin, setSelectedSkin] = useState<string | null>(
"Blood Eagle"
"Blood Eagle",
);
const [selectedSkinType, setSelectedSkinType] = useState<string | null>(
"default"
"default",
);
const [selectedAnimation, setSelectedAnimation] = useState<string | null>(
null
null,
);
const [animationPaused, setAnimationPaused] = useState(false);
const [slowModeEnabled, setSlowModeEnabled] = useState(false);
@ -200,7 +201,7 @@ export default function WarriorProvider({ children }: { children: ReactNode }) {
const selectedModelUrl = getModelUrl(
basePath,
actualModel,
selectedAnimation
selectedAnimation,
);
const [importedSkins, setImportedSkins] = useState(IMPORTED_SKINS);
@ -217,7 +218,7 @@ export default function WarriorProvider({ children }: { children: ReactNode }) {
selectedModelType,
selectedSkin,
selectedSkinType,
})
}),
);
const defaultSkinImageUrls = useMemo(
@ -229,7 +230,7 @@ export default function WarriorProvider({ children }: { children: ReactNode }) {
selectedSkin: modelDefaults[actualModel],
selectedSkinType: "default",
}),
[actualModel, basePath, selectedModelType]
[actualModel, basePath, selectedModelType],
);
const context = useMemo(() => {

View file

@ -20,8 +20,8 @@ import styles from "./gallery.module.css";
import { collectFiles, createZipFile, saveZipFile } from "../../exportUtils";
import { modelToModelType, modelTypes } from "../../importUtils";
import modelConfig from "../../models";
import { SKIN_GALLERY_BASE_URL } from "../../deployPaths";
const baseManifestPath = `https://exogen.github.io/t2-skins`;
const emptySkins: string[] = [];
function modelToFileList(modelName: string) {
@ -93,7 +93,7 @@ const modelOrder: Record<string, number> = {
};
function skinDataToList(
skinData: Record<string, string[]>
skinData: Record<string, string[]>,
): Array<{ name: string; model: string }> {
const allSkins: Array<{ name: string; model: string }> = [];
@ -104,7 +104,7 @@ function skinDataToList(
return orderBy(
allSkins,
[(skin) => skin.name.toLowerCase(), (skin) => modelOrder[skin.model]],
["asc", "asc"]
["asc", "asc"],
);
}
@ -115,7 +115,7 @@ function Gallery() {
clearOnDefault: true,
});
const [browseMode, setBrowseMode] = useState<"select" | "search">(
searchQuery.trim() ? "search" : "select"
searchQuery.trim() ? "search" : "select",
);
const deferredSearchQuery = useDeferredValue(searchQuery);
const [manifest, isLoaded] = useManifest();
@ -125,7 +125,7 @@ function Gallery() {
});
const [isPreparingDownload, setPreparingDownload] = useState(false);
const [hiResDownload, setHiResDownload] = useState<"prompt" | "yes" | "no">(
"prompt"
"prompt",
);
const actualModel = selectedModel === "hfemale" ? "hmale" : selectedModel;
const customSkins = manifest.customSkins?.[actualModel] ?? emptySkins;
@ -152,12 +152,12 @@ function Gallery() {
const fileNames = pack.files;
const hasHiRes = fileNames.some(
(fileName) => manifest.sizeMultiplier[fileName] > 1
(fileName) => manifest.sizeMultiplier[fileName] > 1,
);
if (hasHiRes && hiResDownload === "prompt") {
window.alert(
"This download contains HD textures, which require the QoL patch. Select “yes” or “no” for HD support, then try again."
"This download contains HD textures, which require the QoL patch. Select “yes” or “no” for HD support, then try again.",
);
if (hiResSelectRef.current) {
hiResSelectRef.current.focus();
@ -213,7 +213,7 @@ function Gallery() {
return orderBy(
Object.keys(manifest?.packs ?? {}),
(name) => name.toLowerCase(),
["asc"]
["asc"],
);
}, [manifest]);
@ -221,8 +221,8 @@ function Gallery() {
const skinData = isNew
? manifest?.newSkins
: isPack
? manifest?.packs?.[selectedModel]?.skins
: null;
? manifest?.packs?.[selectedModel]?.skins
: null;
if (skinData) {
return skinDataToList(skinData);
} else {
@ -250,8 +250,8 @@ function Gallery() {
browseMode === "search" && hasSearchInput
? searchResults
: isNew || isPack
? selectedSkinList
: customSkins;
? selectedSkinList
: customSkins;
useEffect(() => {
setPreparingDownload(false);
@ -288,7 +288,7 @@ function Gallery() {
title={browseMode === "select" ? "Search" : "Close search mode"}
onClick={() => {
setBrowseMode((mode) =>
mode === "select" ? "search" : "select"
mode === "select" ? "search" : "select",
);
setSearchQuery("");
}}
@ -440,8 +440,8 @@ function Gallery() {
skinName = name.name;
skinModel = name.model;
}
const url = `${baseManifestPath}/gallery/${encodeURIComponent(
skinName
const url = `${SKIN_GALLERY_BASE_URL}/${encodeURIComponent(
skinName,
)}.${skinModel}.webp`;
return (
@ -458,7 +458,7 @@ function Gallery() {
<Link
className={styles.LoadInEditor}
href={`/?m=${skinModel}&s=${encodeURIComponent(
skinName
skinName,
)}`}
>
<BsBadge3dFill
@ -476,7 +476,7 @@ function Gallery() {
const modelType = modelToModelType(skinModel);
const camelCaseModelName = skinModel.replace(
/(?:^([a-z])|_([a-z]))/g,
(match, a, b) => (a || b).toUpperCase()
(match, a, b) => (a || b).toUpperCase(),
);
let zipFileName = "";
let fileNames: string[] = [];
@ -487,34 +487,34 @@ function Gallery() {
fileNames = modelTypes.player
.filter((modelName) =>
manifest.customSkins[modelName].includes(
skinName
)
skinName,
),
)
.map(
(modelName) => `${skinName}.${modelName}.png`
(modelName) => `${skinName}.${modelName}.png`,
);
break;
case "weapon":
zipFileName = `zWeapon${camelCaseModelName}-${skinName}.vl2`;
fileNames = modelToFileList(skinModel).map(
(fileName) => `${skinName}/${fileName}`
(fileName) => `${skinName}/${fileName}`,
);
break;
case "vehicle":
zipFileName = `z${camelCaseModelName}-${skinName}.vl2`;
fileNames = modelToFileList(skinModel).map(
(fileName) => `${skinName}/${fileName}`
(fileName) => `${skinName}/${fileName}`,
);
break;
}
if (fileNames.length) {
const hasHiRes = fileNames.some(
(fileName) => manifest.sizeMultiplier[fileName] > 1
(fileName) => manifest.sizeMultiplier[fileName] > 1,
);
if (hasHiRes && hiResDownload === "prompt") {
window.alert(
"This download contains HD textures, which require the QoL patch. Select “yes” or “no” for HD support, then try again."
"This download contains HD textures, which require the QoL patch. Select “yes” or “no” for HD support, then try again.",
);
if (hiResSelectRef.current) {
hiResSelectRef.current.focus();
@ -534,7 +534,7 @@ function Gallery() {
if (hasHiRes && hiResDownload === "no") {
zipFileName = zipFileName.replace(
/\.vl2$/,
"@1x.vl2"
"@1x.vl2",
);
}
@ -547,7 +547,7 @@ function Gallery() {
name: name.split("/").slice(-1)[0],
data,
};
})
}),
);
await saveZipFile(zip, zipFileName);
}

3
src/deployPaths.ts Normal file
View file

@ -0,0 +1,3 @@
export const SKIN_ASSET_BASE_URL = `https://assets.tribes2.online/skins/files`;
export const SKIN_MANIFEST_URL = `https://assets.tribes2.online/skins/manifest.json`;
export const SKIN_GALLERY_BASE_URL = `https://assets.tribes2.online/skins/gallery`;

View file

@ -1,10 +1,9 @@
import JSZip from "jszip";
import { saveAs } from "file-saver";
const basePath = `https://exogen.github.io/t2-skins/skins`;
import { SKIN_ASSET_BASE_URL } from "./deployPaths";
export function createZipFile(
files: Array<{ name: string; data: ArrayBuffer | Blob }>
files: Array<{ name: string; data: ArrayBuffer | Blob }>,
) {
const zip = new JSZip();
for (const file of files) {
@ -24,11 +23,11 @@ export function savePngFile(imageUrl: string, name: string) {
export async function collectFiles(
files: string[],
{ skipNotFound = false }: { skipNotFound?: boolean } = {}
{ skipNotFound = false }: { skipNotFound?: boolean } = {},
) {
const results = await Promise.all(
files.map(async (fileName) => {
const url = `${basePath}/${fileName}`;
const url = `${SKIN_ASSET_BASE_URL}/${fileName}`;
const res = await fetch(url);
if (!res.ok) {
if (skipNotFound && res.status === 404) {
@ -41,7 +40,7 @@ export async function collectFiles(
name: fileName.replace(/@1x\.png$/, ".png"),
data: arrayBuffer,
};
})
}),
);
return results.filter((fileInfo) => fileInfo != null);
}

View file

@ -1,4 +1,5 @@
import { useState, useEffect } from "react";
import { SKIN_MANIFEST_URL } from "./deployPaths";
export type Manifest = {
customSkins: Record<string, string[]>;
@ -14,7 +15,6 @@ export type Manifest = {
sizeMultiplier: Record<string, number>;
};
const baseManifestPath = `https://exogen.github.io/t2-skins`;
export const defaultManifest: Manifest = {
customSkins: {},
newSkins: {},
@ -33,7 +33,7 @@ export default function useManifest(): [Manifest, boolean] {
const loadCustomSkins = async () => {
let res;
try {
res = await fetch(`${baseManifestPath}/skins.json`, { signal });
res = await fetch(SKIN_MANIFEST_URL, { signal });
if (!ignore) {
const json = await res.json();
if (!ignore) {