UNPKG

gbx

Version:

a slim, fast and easy to set up Gamebox (GBX) parser written in TypeScript

2 lines (1 loc) 26.7 kB
"use strict";var Z=Object.create;var A=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var o=(r,e)=>A(r,"name",{value:e,configurable:!0});var Y=(r,e)=>{for(var t in e)A(r,t,{get:e[t],enumerable:!0})},W=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of $(e))!X.call(r,s)&&s!==t&&A(r,s,{get:()=>e[s],enumerable:!(n=H(e,s))||n.enumerable});return r};var j=(r,e,t)=>(t=r!=null?Z(K(r)):{},W(e||!r||!r.__esModule?A(t,"default",{value:r,enumerable:!0}):t,r)),_=r=>W(A({},"__esModule",{value:!0}),r);var ee={};Y(ee,{CGameCtnBlock:()=>L,CGameCtnBlockSkin:()=>G,CGameCtnChallenge:()=>v,CGameCtnChallengeParameters:()=>T,CGameCtnCollectorList:()=>w,CGameCtnGhost:()=>f,CGameCtnMediaClip:()=>F,CGameCtnMediaTrack:()=>N,CGameCtnReplayRecord:()=>D,CGameGhost:()=>S,CGameWaypointSpecialProperty:()=>I,CPlugEntRecordData:()=>P,GBX:()=>M,Utils:()=>O});module.exports=_(ee);var u={compress:async r=>{let{LZO:e}=await import("lzo-ts");return e.compress(r)},decompress:async r=>{let{LZO:e}=await import("lzo-ts");return e.decompress(r)}};var R={554172416:50606080,554225664:50933760,603992064:50606080,604028928:50704384,604090368:50929664,604217344:50696192,604225536:50442240,604237824:50933760,604377088:50823168,604381184:50823168,604463104:50827264,604495872:50933760};var L=class{static{o(this,"CGameCtnBlock")}author;blockName;direction;flags;position;skin;waypointSpecialProperty};var b=class{static{o(this,"Node")}chunks={}};var G=class extends b{static{o(this,"CGameCtnBlockSkin")}foregroundPackDesc;packDesc;parentPackDesc;text;50696192=({r:e},t)=>{this.text=e.n(),t.t(e.n())};50696193=({r:e})=>{this.text=e.n(),this.packDesc=e.d()};50696194=({r:e})=>{this.text=e.n(),this.packDesc=e.d(),this.parentPackDesc=e.d()};50696195=({r:e},t)=>{t.i(e.e()),this.foregroundPackDesc=e.d()}};var x=class extends b{static{o(this,"GameVersion")}C(e){return Object.keys(e).map(t=>parseInt(t,10))}isTM2020(){let e=this.C(this.chunks),t=e.some(i=>i>50606169&&i<=50610175),n=e.some(i=>i>50929704&&i<=50933759),s=e.some(i=>i>50933798&&i<=50937855);return t||n||s}isManiaPlanet(){let e=this.C(this.chunks),t=e.some(i=>i>50606122&&i<=50610175),n=e.some(i=>i>50929689&&i<=50933759),s=e.some(i=>i>50933781&&i<=50937855);return t||n||s}isTurbo(){let e=this.C(this.chunks),t=this.chunks[50606144]?.version>2&&!e.some(i=>i>50606165&&i<=50610175),n=e.some(i=>i==50929664)&&!e.some(i=>i>50929703&&i<=50933759),s=e.some(i=>i>50933793)&&!e.some(i=>i>50933795&&i<=50937855);return t||n||s}isTMF(){let e=this.C(this.chunks),t=e.some(i=>i>=50606080)&&!e.some(i=>i>50606122&&i<=50610175),n=e.some(i=>i>=50929664)&&!e.some(i=>i>50929689),s=e.some(i=>i>=50933760)&&!e.some(i=>i>50933781);return t||n||s}};var v=class extends x{static{o(this,"CGameCtnChallenge")}authorExtraInfo;authorLogin;authorNickname;authorScore;authorTime;authorVersion;authorZone;blocks;blockStock;bronzeTime;buildVersion;challengeParameters;checkpoints;comments;cost;crc32;createdWithSimpleEditor;customMusicPackDesc;dayDuration;dayTime;decoBaseHeightOffset;decoration;dynamicDaylight;editorMode;goldTime;hasCustomCamThumbnail;hashedPassword;headerVersion;isLapRace;isMultilap;lightmapCacheUid;lightmapVersion;mapCoordOrigin;mapCoordTarget;mapInfo;mapKind;mapName;mapStyle;mapType;modPackDesc;nbCheckpoints;nbLaps;needUnlock;objectiveTextAuthor;objectiveTextBronze;objectiveTextGold;objectiveTextSilver;offzones;offzoneTriggerSize;packMask;password;playerModel;playMode;silverTime;size;thumbnailData;thumbnailFarClipPlane;thumbnailFov;thumbnailNearClipPlane;thumbnailPitchYawRoll;thumbnailPosition;thumbnailSize;titleId;worldDistortion;xml;50606082=({r:e},t)=>{let n=t.i(e.o());n<=2&&(this.mapInfo=e.c(),this.mapName=e.n()),t.t(e.s()),n>=1&&(this.bronzeTime=e.e(),this.silverTime=e.e(),this.goldTime=e.e(),this.authorTime=e.e()),n==2&&t.t(e.o()),n>=4&&(this.cost=e.e()),n>=5&&(this.isLapRace=e.s()),n==6&&(this.isMultilap=e.s()),n>=7&&(this.playMode=e.e()),n>=9&&t.t(e.e()),n>=10&&(this.authorScore=e.e()),n>=11&&(this.editorMode=e.e()),n>=12&&t.t(e.e()),n>=13&&(this.nbCheckpoints=e.e(),this.nbLaps=e.e())};50606083=({r:e},t)=>{let n=t.i(e.o());this.mapInfo=e.c(),this.mapName=e.n(),this.mapKind=e.o(),n>=1&&(t.t(e.e()),this.password=e.n()),n>=2&&(this.decoration=e.c()),n>=3&&(this.mapCoordOrigin=e.k()),n>=4&&(this.mapCoordTarget=e.k()),n>=5&&(this.packMask=e.l(16)),n>=6&&(this.mapType=e.n(),this.mapStyle=e.n()),n>=8&&(this.lightmapCacheUid=e.l(8)),n>=9&&(this.lightmapVersion=e.o()),n>=11&&(this.titleId=e.u())};50606084=({r:e})=>{this.headerVersion=e.e()};50606085=({r:e})=>{this.xml=e.n()};50606087=({r:e},t)=>{t.i(e.e()),this.thumbnailSize=e.e(),e.n(15),this.thumbnailData=e.h(this.thumbnailSize),e.n(16),e.n(10),this.comments=e.n(),e.n(11)};50606088=({r:e},t)=>{t.i(e.e()),this.authorVersion=e.e(),this.authorLogin=e.n(),this.authorNickname=e.n(),this.authorZone=e.n(),this.authorExtraInfo=e.n()};50606093=({r:e})=>{this.playerModel=e.c()};50606095=({r:e})=>{this.mapInfo=e.c(),this.size=e.b(),this.blocks=e.createArray(e.e(),()=>e.p()),this.needUnlock=e.s(),this.decoration=e.c()};50606097=({r:e})=>{this.blockStock=e.p(),this.challengeParameters=e.p(),this.mapKind=e.e()};50606099=({r:e},t)=>{this.mapInfo=e.c(),this.mapName=e.n(),this.decoration=e.c(),this.size=e.b(),t.t(e.s()),this.blocks=e.createArray(e.e(),()=>{let n=e.u(),s=e.o(),i=e.v(),a=e.g();return{blockName:n,direction:s,position:i,flags:a}})};50606100=({r:e},t)=>{t.t(e.s()),this.password=e.n()};50606102=({r:e},t)=>{t.t(e.e())};50606103=({r:e})=>{this.checkpoints=e.createArray(e.e(),()=>e.b())};50606104=({r:e})=>{this.isLapRace=e.s(),this.nbLaps=e.e()};50606105=({r:e})=>{this.modPackDesc=e.d()};50606106=({r:e},t)=>{t.t(e.p())};50606107=({r:e},t)=>{if(t.t(e.e())!=0)throw new Error("Unexpected value SOldIgs > 0 in chunk 0x0304301b")};50606108=({r:e})=>{this.playMode=e.e()};50606109=({r:e},t)=>{t.t(e.e())};50606111=({r:e},t)=>{this.blocks=[],this.mapInfo=e.c(),this.mapName=e.n(),this.decoration=e.c(),this.size=e.b(),this.needUnlock=e.s();let n=t.i(e.e()),s=e.e(),i=o(()=>{let a=e.u(),c=e.o(),h=e.v(),m=0;if(n==0?m=e.g():n>0&&(m=e.e()),m==4294967295)return this.blocks?.push({blockName:a,direction:c,position:h,flags:m}),!1;let l,k,d;return m&32768&&(l=e.u(),k=e.p()),m&1048576&&(d=e.p()),this.blocks?.push({blockName:a,direction:c,position:h,flags:m,author:l,skin:k,waypointSpecialProperty:d}),!0},"readBlock");for(let a=0;a<s;a++)i()||a--;for(;(e.peekUInt32()&3221225472)>0;)i()};50606112=({r:e,fullChunkId:t})=>{e.forceChunkSkip(t)};50606113=({r:e,fullChunkId:t})=>{e.forceChunkSkip(t)};50606114=({r:e},t)=>{t.t(e.e())};50606115=({r:e})=>{this.mapCoordOrigin=e.k(),this.mapCoordTarget=this.mapCoordOrigin};50606116=({r:e})=>{this.customMusicPackDesc=e.d()};50606117=({r:e})=>{this.mapCoordOrigin=e.k(),this.mapCoordTarget=e.k()};50606118=({r:e},t)=>{t.t(e.p())};50606119=({r:e},t)=>{this.hasCustomCamThumbnail=e.s(),this.hasCustomCamThumbnail&&(t.t(e.o()),t.t(e.m()),t.t(e.m()),t.t(e.m()),this.thumbnailPosition=e.m(),this.thumbnailFov=e.a(),this.thumbnailNearClipPlane=e.a(),this.thumbnailFarClipPlane=e.a())};50606120=(e,t)=>{this[50606119](e,t);let{r:n}=e;this.comments=n.n()};50606121=({r:e})=>{this.hashedPassword=e.h(16),this.crc32=e.e()};50606122=({r:e})=>{this.createdWithSimpleEditor=e.s()};50606125=({r:e},t)=>{this.thumbnailPosition=e.m(),this.thumbnailPitchYawRoll=e.m(),this.thumbnailFov=e.a(),t.t(e.a()),t.t(e.a()),this.thumbnailNearClipPlane=e.a(),this.thumbnailFarClipPlane=e.a(),this.comments=e.n()};50606132=({r:e})=>{let t=e.e();e.h(t)};50606134=(e,t)=>{this[50606125](e,t)};50606144=({r:e,length:t},n)=>{n.i(e.e()),e.h(t-4)};50606146=({r:e},t)=>{t.i(e.e()),this.authorVersion=e.e(),this.authorLogin=e.n(),this.authorNickname=e.n(),this.authorZone=e.n(),this.authorExtraInfo=e.n()};50606151=({r:e},t)=>{let n=t.i(e.e());if(t.t(e.n()),n>=1)throw new Error("Unexpected version >= 1 in chunk 0x03043047")};50606153=({r:e,fullChunkId:t})=>{e.forceChunkSkip(t)};50606155=({r:e})=>{this.objectiveTextAuthor=e.n(),this.objectiveTextGold=e.n(),this.objectiveTextSilver=e.n(),this.objectiveTextBronze=e.n()};50606160=({r:e},t)=>{t.i(e.e()),this.offzoneTriggerSize=[e.e(),e.e(),e.e()],this.offzones=e.createArray(e.e(),()=>({1:e.b(),2:e.b()}))};50606161=({r:e},t)=>{t.i(e.e()),this.titleId=e.u(),this.buildVersion=e.n()};50606162=({r:e},t)=>{t.i(e.e()),this.decoBaseHeightOffset=e.e()};50606166=({r:e},t)=>{t.i(e.e()),t.t(e.e()),this.dayTime=e.e(),t.t(e.e()),this.dynamicDaylight=e.s(),this.dayDuration=e.e()};50606168=({r:e},t)=>{if(t.i(e.e()),t.t(e.e())>0)throw new Error("Unexpected value > 0 in chunk 0x03043058")};50606169=({r:e},t)=>{let n=t.i(e.e());if(this.worldDistortion=e.m(),n==0)throw new Error("Unexpected version 0 in chunk 0x03043059");if(n>=1&&t.t(e.s()))throw new Error("Unexpected value true in chunk 0x03043059");n>=3&&(t.t(e.e()),t.t(e.e()))};50606170=({r:e},t)=>{t.t(e.e()),t.t(e.e())};50606187=({r:e},t)=>{t.t(e.e()),this.dayTime=e.e(),t.t(e.e()),this.dynamicDaylight=e.s(),this.dayDuration=e.e()}};var T=class extends b{static{o(this,"CGameCtnChallengeParameters")}authorScore;authorTime;bronzeTime;goldTime;isValidatedForScriptModes;mapStyle;mapType;raceValidationGhost;silverTime;timeLimit;tip;tip1;tip2;tip3;tip4;50704384=({r:e},t)=>{t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e())};50704385=({r:e})=>{this.tip1=e.n(),this.tip2=e.n(),this.tip3=e.n(),this.tip4=e.n()};50704386=({r:e},t)=>{t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.a()),t.t(e.a()),t.t(e.a()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e())};50704387=({r:e},t)=>{t.t(e.e()),t.t(e.a()),t.t(e.e()),t.t(e.e()),t.t(e.e())};50704388=({r:e},t)=>{this.bronzeTime=e.e(),this.silverTime=e.e(),this.goldTime=e.e(),this.authorTime=e.e(),t.t(e.e())};50704389=({r:e},t)=>{t.t(e.e()),t.t(e.e()),t.t(e.e())};50704390=({r:e},t)=>{t.t(e.createArray(e.e(),()=>e.e()))};50704391=({r:e},t)=>{t.t(e.e())};50704392=({r:e})=>{this.timeLimit=e.e(),this.authorScore=e.e()};50704394=({r:e})=>{this.tip=e.n(),this.bronzeTime=e.e(),this.silverTime=e.e(),this.goldTime=e.e(),this.authorTime=e.e(),this.timeLimit=e.e(),this.authorScore=e.e()};50704397=({r:e})=>{this.raceValidationGhost=e.p()};50704398=({r:e})=>{this.mapType=e.n(),this.mapStyle=e.n(),this.isValidatedForScriptModes=e.s()}};var w=class extends b{static{o(this,"CGameCtnCollectorList")}blockSet;50442240=({r:e})=>{this.blockSet=e.createArray(e.e(),()=>{let t=e.c(),n=e.e();return{blockModel:t,count:n}})}};var S=class extends x{static{o(this,"CGameGhost")}isReplaying;sampleData;50589699=({r:e})=>{let t=e.e();this.sampleData=e.h(t);let n=e.createArray(e.e(),()=>e.e()),s=e.createArray(e.e(),()=>e.e()),i=e.s(),a=e.e(),c=e.e()};50589700=({r:e},t)=>{t.t(e.e())};50589701=({r:e})=>{let t=e.e(),n=e.e();this.sampleData=e.h(n)};50589702=e=>{let{r:t}=e;this.isReplaying=t.s(),this[50589701](e)}};var f=class extends S{static{o(this,"CGameCtnGhost")}appearanceVersion;apperanceVersion;badge;checkpoints;controlEntries;controlNames;eventsDuration;ghostAvatarName;ghostClubTag;ghostLogin;ghostNickname;ghostTrigram;ghostUid;ghostZone;hasBadges;lightTrailColor;playerModel;raceTime;recordData;recordingContext;respawns;skinFile;skinPackDescs;steeringWheelSensitivity;stuntScore;validationChallengeUid;validationCpuKind;validationExeChecksum;validationExeVersion;validationOsKind;validationRaceSettings;validationTitleId;50929664=({r:e},t)=>{let n=e.e();n>=9&&(this.appearanceVersion=e.e()),this.playerModel=e.c(),this.lightTrailColor=e.m(),this.skinPackDescs=e.createArray(e.e(),()=>e.d()),this.hasBadges=e.s(),this.hasBadges&&(this.badge={},this.badge.version=e.e(),this.badge.color=[e.e(),e.e(),e.e()],this.badge.version==0&&(t.t(e.e()),t.t(e.n())),this.badge.stickers=e.createArray(e.e(),()=>{let s=e.n(),i=e.n();return{item1:s,item2:i}}),this.badge.layers=e.createArray(e.e(),()=>e.n())),(this.apperanceVersion??!1)&&t.t(e.n()),this.ghostNickname=e.n(),this.ghostAvatarName=e.n(),n>=2&&(this.recordingContext=e.n()),n>=4&&t.t(e.s()),n>=5&&(this.recordData=e.p(),t.t(e.createArray(e.e(),()=>e.e()))),n>=6&&(this.ghostTrigram=e.n()),n>=7&&(this.ghostZone=e.n()),n>=8&&(this.ghostClubTag=e.n())};50929667=({r:e})=>{this.playerModel=e.c(),this.skinFile=e.n(),this.ghostNickname=e.n()};50929668=({r:e})=>{let t=e.e();this.checkpoints=e.createArray(t,()=>{let n=e.e(),s=e.a();return{time:n,speed:s}})};50929669=({r:e})=>{this.raceTime=e.e()};50929670=({r:e},t)=>{this.playerModel=e.c(),this.skinFile=e.n(),t.t(e.e()),this.ghostNickname=e.n()};50929671=({r:e})=>{this.lightTrailColor=e.m()};50929672=({r:e})=>{this.respawns=e.e()};50929673=({r:e})=>{this.lightTrailColor=[e.e(),e.e(),e.e()]};50929674=({r:e})=>{this.stuntScore=e.e()};50929675=({r:e})=>{let t=e.e();this.checkpoints=e.createArray(t,()=>{let n=e.e(),s=e.e();return{time:n,stuntScore:s}})};50929676=({r:e},t)=>{t.t(e.e())};50929677=({r:e},t)=>{this.playerModel=e.c(),this.skinFile=e.n(),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.e()),this.ghostNickname=e.n()};50929678=({r:e})=>{this.ghostUid=e.u()};50929679=({r:e})=>{this.ghostLogin=e.n()};50929680=({r:e})=>{this.validationChallengeUid=e.u()};50929681=({r:e},t)=>{if(this.eventsDuration=e.e(),this.eventsDuration==0)return;t.t(e.e()),this.controlNames=e.createArray(e.e(),()=>e.u());let n=e.e();t.t(e.e()),this.controlEntries=e.createArray(n,()=>{let s=e.e()-1e5,i=e.o(),a=e.e(),c=this.controlNames[i],h=["Steer","Gas","AccelerateReal","BrakeReal"].includes(c);return{name:c,time:s,value:a,analog:h}}),this.validationExeVersion=e.n(),this.validationExeChecksum=e.e(),this.validationOsKind=e.e(),this.validationCpuKind=e.e(),this.validationRaceSettings=e.n()};50929682=({r:e},t)=>{t.t(e.e()),t.t(e.l(16))};50929683=({r:e},t)=>{t.t(e.e()),t.t(e.e())};50929684=({r:e},t)=>{t.t(e.e())};50929685=({r:e})=>{this.ghostNickname=e.u()};50929687=({r:e})=>{this.skinPackDescs=e.createArray(e.e(),()=>e.d()),this.ghostNickname=e.n(),this.ghostAvatarName=e.n()};50929688=({r:e})=>{this.playerModel=e.c()};50929689=(e,t)=>{this[50929681](e,t);let{r:n}=e;this.eventsDuration!=0&&t.t(n.e())};50929690=({r:e},t)=>{t.t(e.e())};50929699=({r:e},t)=>{let n=t.i(e.e());t.t(e.n()),t.t(e.e()),t.t(e.n()),t.t(e.e()),t.t(e.e()),t.t(e.n()),t.t(e.e()),t.t(e.n()),n>=2&&(t.t(e.o()),t.t(e.e()),t.t(e.e())),n>=3&&(t.t(e.o()),t.t(e.o()))};50929701=(e,t)=>{let{r:n}=e,s=t.i(n.e());this[50929689](e,t),this.steeringWheelSensitivity=n.s()};50929702=({r:e},t)=>{t.t(e.l(16))};50929704=({r:e},t)=>{this.eventsDuration!=0&&(this.validationTitleId=e.n(),t.t(e.l(32)))}};var F=class{static{o(this,"CGameCtnMediaClip")}tracks;name;stopWhenLeave;stopWhenRespawn;localPlayerClipEntIndex;50827277=({r:e})=>{this.tracks=[];let t=e.e(),n=e.e();for(let a=0;a<n;a++){let c=e.p();this.tracks.push(c)}this.name=e.n(),this.stopWhenLeave=e.s();let s=e.e();this.stopWhenRespawn=e.s();let i=e.e();this.localPlayerClipEntIndex=e.e()}};var N=class{static{o(this,"CGameCtnMediaTrack")}name;blocks;50823169=({r:e})=>{this.blocks=[];let t=e.n(),n=e.e();for(let i=0;i<n;i++){let a=e.p();this.blocks.push(a)}let s=e.e()}};var D=class extends x{static{o(this,"CGameCtnReplayRecord")}authorExtraInfo;authorLogin;authorNickname;authorVersion;authorZone;challengeData;controlEntries;controlNames;eventsDuration;extras;game;ghosts;mapInfo;playerLogin;playerNickname;playgroundScript;recordData;time;titleId;xml;50933760=({r:e},t)=>{let n=t.i(e.e());n>=2&&(this.mapInfo=e.c(),this.time=e.e(),this.playerNickname=e.n()),n>=6&&(this.playerLogin=e.n()),n>=8&&(t.t(e.o()),this.titleId=e.u())};50933761=({r:e})=>{this.xml=e.n()};50933762=({r:e,isHeaderChunk:t},n)=>{if(t){n.i(e.e()),this.authorVersion=e.e(),this.authorLogin=e.n(),this.authorNickname=e.n(),this.authorZone=e.n(),this.authorExtraInfo=e.n();return}let s=e.e();this.challengeData=new M(e.h(s))};50933764=({r:e},t)=>{t.i(e.e()),t.t(e.e()),this.ghosts=e.createArray(e.e(),()=>e.p()),t.t(e.e()),t.t(e.e())};50933765=({r:e},t)=>{t.t(e.e())};50933767=({r:e},t)=>{t.t(e.e())};50933768=({r:e},t)=>{this.game=e.n(),t.t(e.e())};50933772=({r:e,fullChunkId:t})=>{e.forceChunkSkip(t)};50933773=({r:e},t)=>{if(this.eventsDuration=e.e(),this.eventsDuration==0)return;t.t(e.e()),this.controlNames=e.createArray(e.e(),()=>e.u());let n=e.e();t.t(e.e()),this.controlEntries=e.createArray(n,()=>{let s=e.e()+1e5,i=e.o(),a=e.e(),c=this.controlNames[i],h=["Steer","Gas","AccelerateReal","BrakeReal"].includes(c);return{name:c,time:s,value:a,analog:h}})};50933774=({r:e,fullChunkId:t})=>{e.forceChunkSkip(t)};50933775=({r:e},t)=>{this.game=e.n(),t.t(e.e()),t.t(e.e()),t.t(e.e()),t.t(e.n())};50933776=({r:e,fullChunkId:t})=>{e.forceChunkSkip(t)};50933780=({r:e},t)=>{t.i(e.e()),this.ghosts=e.createArray(e.e(),()=>e.p()),t.t(e.e()),this.extras=e.createArray(e.e(),()=>{let n=e.e(),s=e.e();return{extra1:n,extra2:s}})};50933781=({r:e,fullChunkId:t})=>{e.forceChunkSkip(t)};50933784=({r:e})=>{this.titleId=e.u(),this.authorVersion=e.e(),this.authorLogin=e.n(),this.authorNickname=e.n(),this.authorZone=e.n(),this.authorExtraInfo=e.n()};50933787=({r:e},t)=>{t.i(e.e()),t.t(e.createArray(e.e(),()=>({1:e.e(),2:e.e()})))};50933788=({r:e},t)=>{t.i(e.e()),this.playgroundScript=e.n()};50933793=({r:e},t)=>{t.i(e.e()),t.t(e.s())};50933796=({r:e},t)=>{t.i(e.e()),t.t(e.e()),this.recordData=e.p()};50933797=({r:e},t)=>{t.i(e.e()),t.t(e.e()),t.t(e.e())}};var I=class extends b{static{o(this,"CGameWaypointSpecialProperty")}order;spawn;tag;771788800=({r:e},t)=>{let n=t.i(e.e());n==1?(this.spawn=e.e(),this.order=e.e()):n==2&&(this.tag=e.n(),this.order=e.e())}};var P=class extends b{static{o(this,"CPlugEntRecordData")}compressedData;compressedSize;uncompressedSize;152170496=({r:e},t)=>{t.i(e.e())>=5&&(this.uncompressedSize=e.e(),this.compressedSize=e.e(),this.compressedData=e.h(this.compressedSize))}};function z(r){return{50442240:w,50606080:v,50696192:G,50704384:T,50823168:N,50827264:F,50929664:f,50933760:D,152170496:P,771788800:I}[r]}o(z,"getNodeType");var E=class{constructor(e){this.options=e;Object.assign(this,e)}static{o(this,"GBXReader")}current;fullChunkId=0;versions={};unknowns={};i(e){return this.versions[this.fullChunkId]=e,e}t(e){return this.unknowns[this.fullChunkId]===void 0&&(this.unknowns[this.fullChunkId]=[]),this.unknowns[this.fullChunkId].push(e),e}T(){let e=this.options.stream,t={};for(;;){let n=e.e();if(n==4207599105)break;if(t[n]=!0,e.peekUInt32()==1397442896){let i=e.e(),a=e.e();if(!this.G(n,!1,a)){p.warn(`Skipped chunk: 0x${C.fromDecimal(n)}`);let h=e.h(a);t[n]=!1}continue}if(!this.G(n))throw new Error(`Failed processing unskippable chunk 0x${C.fromDecimal(n)}.`)}return this.current.chunks=g.mergeChunks(t,this.unknowns,this.versions),this.current}G(e,t=!1,n=0){let s=this.options.stream;this.fullChunkId=e;let i=this.options.classId,a=e&4294963200;i=R[i]??i,a=R[a]??a;let c=z(i),h=a+(e&4095);return c===void 0||(this.current===void 0&&(this.current=new c),this.current[h]===void 0)?!1:(p.debug(`Processing ${t?"header chunk":"chunk"}: 0x${C.fromDecimal(h)}`),this.current[h]({r:s,length:n,fullChunkId:e,isHeaderChunk:t},{i:this.i.bind(this),t:this.t.bind(this)}),!0)}w(e){let t=this.options.headerChunks,n={};for(let s=0;s<t.length;s++){let i=t[s],a=e+i.chunkId;this.options.stream=new y(i.chunkData),this.G(a,!0)||(p.warn(`Skipped chunk: 0x${C.fromDecimal(a)}`),n[a]=!1),n[a]=!0}return this.current.chunks=g.mergeChunks(n,this.unknowns,this.versions),this.current}};var U={0:"Desert",1:"Snow",2:"Rally",3:"Island",4:"Bay",5:"Coast",6:"Stadium",7:"Basic",8:"Plain",9:"Moon",10:"Toy",11:"Valley",12:"Canyon",13:"Lagoon",14:"Deprecated_Arena",17:"TMCommon",18:"Canyon4",19:"Canyon256",20:"Valley4",21:"Valley256",22:"Lagoon4",23:"Lagoon256",24:"Stadium4",25:"Stadium256",26:"Trackmania",100:"History",101:"Society",102:"Galaxy",200:"Gothic",201:"Paris",202:"Storm",203:"Cryo",204:"Meteor",205:"Meteor4",206:"Meteor256",299:"SMCommon",1e4:"Vehicles",10001:"Orbital",10002:"Actors",10003:"Common",4294967295:"Unassigned"};var Q=new TextDecoder,y=class{static{o(this,"DataStream")}stream;position=0;constructor(e){this.stream=e}createArray(e,t){return Array.from({length:e},(n,s)=>t(s))}peekByte(e=0){return this.stream[this.position+e]}o(){let e=this.peekByte();if(e===void 0)throw new Error("Attempted to read an undefined byte.");return this.position++,e}peekBytes(e){return this.createArray(e,t=>this.peekByte(t))}h(e){return this.createArray(e,()=>this.o())}bytesToNumber(e){return e.reduce((t,n,s)=>t|n<<s*8,0)}peekNumbers(e){return this.bytesToNumber(this.peekBytes(e))>>>0}l(e){return this.bytesToNumber(this.h(e))>>>0}a(){let e=this.bytesToNumber(this.h(4));if(e==0)return 0;let t=e>>>31?-1:1,n=(e>>>23&255)-127,s=e&8388607|8388608;return t*s*Math.pow(2,n-23)}peekUInt16(){return this.peekNumbers(2)}g(){return this.l(2)}peekUInt32(){return this.peekNumbers(4)}e(){return this.l(4)}s(){return!!this.l(4)}n(e=0){return e==0&&(e=this.l(4)),Q.decode(new Uint8Array(this.h(e)))}f(){return this.n(1)}S(){return{x:this.e(),y:this.e()}}b(){return{x:this.e(),y:this.e(),z:this.e()}}k(){return{x:this.a(),y:this.a()}}m(){return{x:this.a(),y:this.a(),z:this.a()}}v(){return{x:this.o(),y:this.o(),z:this.o()}}c(){return{id:this.u(),collection:this.u(),author:this.u()}}d(){let e=this.o();e>=3&&this.h(32);let t=this.n();return(t.length>0&&e>=1||e>=3)&&this.n(),t}nodeList=[];p(){let e=this.l(4)<<1>>1;if(e==-1)return;let t=this.nodeList[e]!==void 0;if(e>=0&&!t){let n=this.e(),s=new E({stream:this,classId:n}).T();return this.nodeList[e]=s,s}if(t)return this.nodeList[e];throw new Error("Invalid node reference")}lookbackVersion;lookbackStrings=[];u(){this.lookbackVersion===void 0&&(this.lookbackVersion=this.e());let e=new Uint32Array([this.e()])[0];if(e==4294967295)return"";if(!(e&16383)&&(e>>30==1||e>>30==-2)){let t=this.n();return this.lookbackStrings.push(t),t}if((e&16383)==16383)switch(e>>30){case 2:return"Unassigned";case 3:return"";default:throw new Error("Invalid lookback string, the file provided may be corrupt")}return e>>30?this.lookbackStrings.length>(e&16383)-1?this.lookbackStrings[(e&16383)-1]:"":U[e]===void 0?"Unknown collection":U[e]}forceChunkSkip(e){for(;;){let t=this.peekUInt32();if((t&4294967040)==(e&4294967040)){p.warn(`Force skipped chunk: 0x${C.fromDecimal(e)}`);break}if(t==4207599105&&this.peekByte(4)===void 0){p.warn(`Force skipped chunk: 0x${C.fromDecimal(e)}`),p.warn("Reached end of file early");break}let n=this.o()}}};var C=class{static{o(this,"Hex")}static fromDecimal(e){return e.toString(16)}};var p=class{static{o(this,"Logger")}static showLogs=!1;static showDebug=!1;static showWarns=!1;static reset="\x1B[0m";static highlight(e,t=35){return`${`\x1B[${t}m`}${e}${this.reset}`}static log(...e){this.showLogs&&console.log(this.highlight("[INFO]",34),...e)}static debug(...e){this.showDebug&&console.log(this.highlight("[DEBUG]",35),...e)}static warn(...e){this.showWarns&&console.warn(this.highlight("[WARN]",33),...e)}static error(...e){console.error(this.highlight("[ERROR]",31),...e)}static outline(...e){console.log(this.highlight("[DEVEL]",41),this.highlight(e[0],35),...e.slice(1))}};var B=class{static{o(this,"LZOHandler")}static async compress(e){try{return u.compress(e)}catch(t){throw console.error(t),new Error("Failed to compress data, is the lzo-ts package installed?")}}static async decompress(e){try{return u.decompress(e)}catch(t){throw console.error(t),new Error("Failed to decompress data, is the lzo-ts package installed?")}}};var g=class{static{o(this,"Merger")}static mergeChunks(e,t,n){let s={};for(let i in e){if(e[i]===!1){s[i]=null;continue}s[i]={unknowns:t[i],version:n[i]}}return s}static mergeInstances(e,t){for(let n in t)Object.prototype.hasOwnProperty.call(t,n)&&t[n]!==void 0&&(e[n]=t[n]);return e}};var M=class{static{o(this,"GBX")}stream;classId;wrappedClassId;constructor(e,t=2){t>=1&&(p.showWarns=!0),t>=2&&(p.showLogs=!0),t>=3&&(p.showDebug=!0),this.stream=new y(e)}async parseHeaders(){if(this.stream.n(3)!="GBX")return Promise.reject(new Error("Not a GBX file"));p.debug("Found GBX magic");let e=this.stream.g();if(e<3)return Promise.reject(new Error("Unsupported GBX version"));p.debug(`Reading GBX version ${e}`);let t=this.stream.f(),n=this.stream.f(),s=this.stream.f();e>=4&&this.stream.f(),this.classId=this.stream.e(),this.wrappedClassId=R[this.classId],e>=6&&this.stream.e();let i=this.stream.e();if(i==0)return Promise.reject(new Error("No header chunks"));let a=[];for(let l=0;l<i;l++){let k=this.stream.e()&4095,d=this.stream.e()&2147483647,V=(d&2147483648)!=0;a.push({chunkId:k,chunkSize:d,isHeavy:V})}for(let l=0;l<i;l++)a[l].chunkData=this.stream.h(a[l].chunkSize);p.debug("Reading header data");let c=new E({headerChunks:a,classId:this.classId}).w(this.classId),h=this.stream.e();return this.stream.e()>0?Promise.reject(new Error("[Unimplemented] External nodes are not supported")):s!="C"?Promise.reject(new Error("Body is already decompressed")):Promise.resolve(c)}async parse(){let e=await this.parseHeaders(),t=this.stream.e(),n=this.stream.e(),s=this.stream.h(n),i=new y(await B.decompress(s));p.debug("Reading body data");let a=new E({stream:i,classId:this.classId}).T();return Promise.resolve(g.mergeInstances(e,a))}};var O;(a=>{function r(c){if(c instanceof f)return c.checkpoints?.length||void 0;let h=c.chunks?.[50606111]?.version,m=new Set,l=0;if(h>=6)c.blocks?.forEach(k=>{let d=k.waypointSpecialProperty;if(d?.order!==void 0&&(d?.tag=="Checkpoint"&&l++,d?.tag=="LinkedCheckpoint")){if(m.has(d.order))return;l++,m.add(d.order)}});else return c.checkpoints?.length||void 0;if(c.blocks!==void 0)return c.nbCheckpoints&&l<c.nbCheckpoints?(p.warn("The amount of checkpoints doesn't match the amount of checkpoints in the header. Returning amount of header."),c.nbCheckpoints):l}a.getCheckpointCount=r,o(r,"getCheckpointCount");function e(c){return c.controlEntries?.filter(h=>h?.name=="Respawn"&&h?.value==1)}o(e,"getRespawns");function t(c){return e(c)?.length}a.getRespawnsCount=t,o(t,"getRespawnsCount");function n(c){return c.checkpoints?.map(h=>h.time)}a.getCheckpointTimes=n,o(n,"getCheckpointTimes");function s(c){let h=n(c),m=e(c);if(h===void 0||m===void 0)return;let l=h.map(()=>0),k=0;for(let d of m){let V=h[k];d.time>=V&&k++,l[k]++}return l}a.getRespawnsByCheckpoint=s,o(s,"getRespawnsByCheckpoint");function i(c){let h=n(c);if(h!==void 0)return h.map((m,l,k)=>{let d=k[l-1]||0;return m-d})}a.getSectorTimes=i,o(i,"getSectorTimes")})(O||={});0&&(module.exports={CGameCtnBlock,CGameCtnBlockSkin,CGameCtnChallenge,CGameCtnChallengeParameters,CGameCtnCollectorList,CGameCtnGhost,CGameCtnMediaClip,CGameCtnMediaTrack,CGameCtnReplayRecord,CGameGhost,CGameWaypointSpecialProperty,CPlugEntRecordData,GBX,Utils});