├── .eslintrc.cjs
├── .github
├── dependabot.yml
└── workflows
│ ├── bump.yml
│ └── repo.yml
├── .gitignore
├── .nvmrc
├── .prettierrc
├── .stylelintrc.json
├── LICENSE.md
├── README.md
├── astro.config.mts
├── eslint.config.mjs
├── package.json
├── pnpm-lock.yaml
├── postcss.config.cjs
├── public
├── .well-known
│ └── security.txt
├── _headers
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon.png
├── assets
│ └── app
│ │ └── crosshairs
│ │ ├── Crossdot.vtf
│ │ ├── bigcross.vtf
│ │ ├── bigcrosshair7.vtf
│ │ ├── bigcrosshair7OL.vtf
│ │ ├── brackets.vtf
│ │ ├── circle.vtf
│ │ ├── circledot.vtf
│ │ ├── cpma_1.vtf
│ │ ├── cpma_10.vtf
│ │ ├── cpma_11.vtf
│ │ ├── cpma_12.vtf
│ │ ├── cpma_13.vtf
│ │ ├── cpma_14.vtf
│ │ ├── cpma_15.vtf
│ │ ├── cpma_16.vtf
│ │ ├── cpma_17.vtf
│ │ ├── cpma_18.vtf
│ │ ├── cpma_19.vtf
│ │ ├── cpma_2.vtf
│ │ ├── cpma_3.vtf
│ │ ├── cpma_4.vtf
│ │ ├── cpma_5.vtf
│ │ ├── cpma_6.vtf
│ │ ├── cpma_7.vtf
│ │ ├── cpma_8.vtf
│ │ ├── cpma_9.vtf
│ │ ├── crosshair1.vtf
│ │ ├── crosshair11.vtf
│ │ ├── crosshair1OL.vtf
│ │ ├── crosshair2.vtf
│ │ ├── crosshair2OL.vtf
│ │ ├── crosshair3.vtf
│ │ ├── crosshair3OL.vtf
│ │ ├── crosshair5.vtf
│ │ ├── crosshair5OL.vtf
│ │ ├── crosshair5circle.vtf
│ │ ├── crosshair5circleOL.vtf
│ │ ├── crosshair6.vtf
│ │ ├── crosshair6OL.vtf
│ │ ├── crosshair6circle.vtf
│ │ ├── crosshair6circleOL.vtf
│ │ ├── crosshair7.vtf
│ │ ├── crosshair7OL.vtf
│ │ ├── crosshair7circle.vtf
│ │ ├── crosshair7circleOL.vtf
│ │ ├── dot.vtf
│ │ ├── fatcross.vtf
│ │ ├── fatcrossOL.vtf
│ │ ├── fatcrosscircle.vtf
│ │ ├── fatcrosscircleOL.vtf
│ │ ├── mediccross.vtf
│ │ ├── mediccrossbig.vtf
│ │ ├── opencross.vtf
│ │ ├── opencrossOL.vtf
│ │ ├── ql_1.vtf
│ │ ├── ql_10.vtf
│ │ ├── ql_11.vtf
│ │ ├── ql_12.vtf
│ │ ├── ql_13.vtf
│ │ ├── ql_14.vtf
│ │ ├── ql_15.vtf
│ │ ├── ql_16.vtf
│ │ ├── ql_17.vtf
│ │ ├── ql_18.vtf
│ │ ├── ql_19.vtf
│ │ ├── ql_2.vtf
│ │ ├── ql_3.vtf
│ │ ├── ql_4.vtf
│ │ ├── ql_5.vtf
│ │ ├── ql_6.vtf
│ │ ├── ql_7.vtf
│ │ ├── ql_8.vtf
│ │ ├── ql_9.vtf
│ │ ├── quarteredcircle.vtf
│ │ ├── seeker.vtf
│ │ ├── seekerOL.vtf
│ │ ├── smallcrosshair7.vtf
│ │ ├── smallcrosshair7OL.vtf
│ │ ├── smallcrosshair7circle.vtf
│ │ ├── smallcrosshair7circleOL.vtf
│ │ ├── sniper.vtf
│ │ ├── sniperOL.vtf
│ │ ├── sniperbig.vtf
│ │ ├── sniperbigOL.vtf
│ │ ├── snipercircle.vtf
│ │ ├── snipercircleOL.vtf
│ │ ├── thalashseeker.vtf
│ │ ├── tob_rocketcross.vtf
│ │ ├── tob_wingscross.vtf
│ │ ├── tob_wingsdot.vtf
│ │ ├── wings.vtf
│ │ ├── wingsdot.vtf
│ │ ├── xhairshadowdefault.vtf
│ │ ├── xhairshadowdots.vtf
│ │ ├── xhairshadowplus.vtf
│ │ ├── xhairshadowpluss.vtf
│ │ ├── xhairshadowrocketsthick.vtf
│ │ └── yzwings.vtf
├── browserconfig.xml
├── favicon.ico
├── favicon.png
├── img
│ ├── app
│ │ └── crosshairs
│ │ │ └── preview
│ │ │ ├── bigcross.webp
│ │ │ ├── bigcrosshair7.webp
│ │ │ ├── bigcrosshair7OL.webp
│ │ │ ├── brackets.svg
│ │ │ ├── brackets.webp
│ │ │ ├── circle.svg
│ │ │ ├── circle.webp
│ │ │ ├── circle_large.svg
│ │ │ ├── circledot.webp
│ │ │ ├── cpma_1.webp
│ │ │ ├── cpma_10.webp
│ │ │ ├── cpma_11.webp
│ │ │ ├── cpma_12.webp
│ │ │ ├── cpma_13.webp
│ │ │ ├── cpma_14.webp
│ │ │ ├── cpma_15.webp
│ │ │ ├── cpma_16.webp
│ │ │ ├── cpma_17.webp
│ │ │ ├── cpma_18.webp
│ │ │ ├── cpma_19.webp
│ │ │ ├── cpma_2.webp
│ │ │ ├── cpma_3.webp
│ │ │ ├── cpma_4.webp
│ │ │ ├── cpma_5.webp
│ │ │ ├── cpma_6.webp
│ │ │ ├── cpma_7.webp
│ │ │ ├── cpma_8.webp
│ │ │ ├── cpma_9.webp
│ │ │ ├── cross.svg
│ │ │ ├── cross_with_dot.svg
│ │ │ ├── crossdot.webp
│ │ │ ├── crosshair1.webp
│ │ │ ├── crosshair11.webp
│ │ │ ├── crosshair1OL.webp
│ │ │ ├── crosshair2.webp
│ │ │ ├── crosshair2OL.webp
│ │ │ ├── crosshair3.webp
│ │ │ ├── crosshair3OL.webp
│ │ │ ├── crosshair5.webp
│ │ │ ├── crosshair5OL.webp
│ │ │ ├── crosshair5circle.webp
│ │ │ ├── crosshair5circleOL.webp
│ │ │ ├── crosshair6.webp
│ │ │ ├── crosshair6OL.webp
│ │ │ ├── crosshair6circle.webp
│ │ │ ├── crosshair6circleOL.webp
│ │ │ ├── crosshair7.webp
│ │ │ ├── crosshair7OL.webp
│ │ │ ├── crosshair7circle.webp
│ │ │ ├── crosshair7circleOL.webp
│ │ │ ├── dot.svg
│ │ │ ├── dot.webp
│ │ │ ├── ex.svg
│ │ │ ├── fatcross.webp
│ │ │ ├── fatcrossOL.webp
│ │ │ ├── fatcrosscircle.webp
│ │ │ ├── fatcrosscircleOL.webp
│ │ │ ├── half_cross_with_dot.svg
│ │ │ ├── mediccross.webp
│ │ │ ├── mediccrossbig.webp
│ │ │ ├── opencross.svg
│ │ │ ├── opencross.webp
│ │ │ ├── opencrossOL.webp
│ │ │ ├── ql_1.webp
│ │ │ ├── ql_10.webp
│ │ │ ├── ql_11.webp
│ │ │ ├── ql_12.webp
│ │ │ ├── ql_13.webp
│ │ │ ├── ql_14.webp
│ │ │ ├── ql_15.webp
│ │ │ ├── ql_16.webp
│ │ │ ├── ql_17.webp
│ │ │ ├── ql_18.webp
│ │ │ ├── ql_19.webp
│ │ │ ├── ql_2.webp
│ │ │ ├── ql_3.webp
│ │ │ ├── ql_4.webp
│ │ │ ├── ql_5.webp
│ │ │ ├── ql_6.webp
│ │ │ ├── ql_7.webp
│ │ │ ├── ql_8.webp
│ │ │ ├── ql_9.webp
│ │ │ ├── ring.svg
│ │ │ ├── ring.webp
│ │ │ ├── ring_large.svg
│ │ │ ├── seeker.webp
│ │ │ ├── seekerOL.webp
│ │ │ ├── smallcrosshair7.webp
│ │ │ ├── smallcrosshair7OL.webp
│ │ │ ├── smallcrosshair7circle.webp
│ │ │ ├── smallcrosshair7circleOL.webp
│ │ │ ├── sniper.webp
│ │ │ ├── sniperOL.webp
│ │ │ ├── sniperbig.webp
│ │ │ ├── sniperbigOL.webp
│ │ │ ├── snipercircle.webp
│ │ │ ├── snipercircleOL.webp
│ │ │ ├── squarebracket.webp
│ │ │ ├── thalashseeker.webp
│ │ │ ├── tob_rocketcross.webp
│ │ │ ├── tob_wingscross.webp
│ │ │ ├── tob_wingsdot.webp
│ │ │ ├── wings.webp
│ │ │ ├── wingsdot.webp
│ │ │ ├── xhairshadowdefault.webp
│ │ │ ├── xhairshadowdots.webp
│ │ │ ├── xhairshadowplus.webp
│ │ │ ├── xhairshadowpluss.webp
│ │ │ ├── xhairshadowrocketsthick.webp
│ │ │ └── yzwings.webp
│ ├── mastercomfig_banner.png
│ ├── mastercomfig_banner.svg
│ ├── mastercomfig_logo.svg
│ ├── mastercomfig_logo_192x.png
│ ├── mastercomfig_logo_512x.png
│ ├── mastercomfig_logo_sus.webp
│ ├── mastercomfig_logo_transparent_i.png
│ ├── mastercomfig_logo_transparent_i.svg
│ ├── modules
│ │ ├── 3dsky
│ │ │ ├── off.webp
│ │ │ └── on.webp
│ │ ├── anti_aliasing
│ │ │ ├── msaa_2x.webp
│ │ │ ├── msaa_4x.webp
│ │ │ ├── msaa_8x.webp
│ │ │ └── off.webp
│ │ ├── characters
│ │ │ ├── high.mp4
│ │ │ ├── low.mp4
│ │ │ ├── medium.mp4
│ │ │ ├── medium_high.mp4
│ │ │ ├── ultra.mp4
│ │ │ └── very_low.mp4
│ │ ├── decals
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ ├── off.webp
│ │ │ └── ultra.webp
│ │ ├── decals_art
│ │ │ ├── off.webp
│ │ │ └── on.webp
│ │ ├── decals_models
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ └── off.webp
│ │ ├── effects
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ └── ultra.webp
│ │ ├── gibs
│ │ │ ├── high.mp4
│ │ │ ├── low.mp4
│ │ │ ├── medium.mp4
│ │ │ ├── medium_low.mp4
│ │ │ └── off.mp4
│ │ ├── hud_player_model
│ │ │ ├── off.webp
│ │ │ └── on.webp
│ │ ├── jigglebones
│ │ │ ├── force_on.mp4
│ │ │ ├── off.mp4
│ │ │ └── on.mp4
│ │ ├── lighting
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ ├── medium_high.webp
│ │ │ ├── ultra.webp
│ │ │ ├── very_high.webp
│ │ │ └── very_low.webp
│ │ ├── lighting_ex
│ │ │ ├── high.webp
│ │ │ └── low.webp
│ │ ├── lod
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ └── ultra.webp
│ │ ├── motion_blur
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ └── off.webp
│ │ ├── outlines
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ └── off.webp
│ │ ├── particles
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ ├── ultra.webp
│ │ │ └── very_low.webp
│ │ ├── post_processing
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ └── off.webp
│ │ ├── props
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ └── ultra.webp
│ │ ├── pyrovision
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ └── medium.webp
│ │ ├── ragdolls
│ │ │ ├── hidden.mp4
│ │ │ ├── high.mp4
│ │ │ ├── medium.mp4
│ │ │ └── off.mp4
│ │ ├── ropes
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── off.webp
│ │ │ └── ultra.webp
│ │ ├── shadows
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ ├── off.webp
│ │ │ ├── ultra.webp
│ │ │ ├── very_high.webp
│ │ │ └── very_low.webp
│ │ ├── sheens_speed
│ │ │ ├── fast.mp4
│ │ │ ├── medium.mp4
│ │ │ └── slow.mp4
│ │ ├── sheens_tint
│ │ │ ├── full.webp
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ └── medium.webp
│ │ ├── sillygibs
│ │ │ └── on.webp
│ │ ├── texture_filter
│ │ │ ├── aniso16x.webp
│ │ │ ├── aniso2x.webp
│ │ │ ├── aniso4x.webp
│ │ │ ├── aniso8x.webp
│ │ │ ├── bilinear.webp
│ │ │ └── trilinear.webp
│ │ ├── texture_quality
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ ├── ultra.webp
│ │ │ ├── very_high.webp
│ │ │ └── very_low.webp
│ │ ├── textures
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ ├── ultra.webp
│ │ │ ├── very_high.webp
│ │ │ └── very_low.webp
│ │ ├── vsync
│ │ │ ├── off.webp
│ │ │ └── on.webp
│ │ └── water
│ │ │ ├── high.webp
│ │ │ ├── low.webp
│ │ │ ├── medium.webp
│ │ │ ├── medium_high.webp
│ │ │ ├── ultra.webp
│ │ │ ├── very_high.webp
│ │ │ └── very_low.webp
│ ├── presets
│ │ ├── high-hq.webp
│ │ ├── low-hq.webp
│ │ ├── medium-high-hq.webp
│ │ ├── medium-hq.webp
│ │ ├── medium-low-hq.webp
│ │ ├── ultra-hq.webp
│ │ └── very-low-hq.webp
│ ├── third_party
│ │ ├── solid_gray.svg
│ │ └── tradeit.webp
│ └── update
│ │ ├── favicon.ico
│ │ └── springcleaning.png
├── mstile-150x150.png
├── safari-pinned-tab.svg
└── sw.ts
├── scripts
├── bucket-cors.json
├── mastercomfig-cf-worker.js
└── purge-cloudflare.js
├── sentry.client.config.ts
├── src
├── components
│ ├── Body.astro
│ ├── Footer.astro
│ ├── HelpTooltip.tsx
│ ├── ImageSlider.tsx
│ ├── NavSelector.astro
│ ├── ResponsiveImage.astro
│ ├── Sponsor.astro
│ ├── head
│ │ ├── BaseHead.astro
│ │ ├── ImportHead.astro
│ │ ├── MainHead.astro
│ │ └── PreloadHead.astro
│ ├── hits
│ │ ├── HitsNav.astro
│ │ ├── HitsPage.astro
│ │ └── MiniHitsPlayer.astro
│ ├── huds
│ │ ├── HudListItem.astro
│ │ ├── HudNav.astro
│ │ └── HudSearch.astro
│ ├── items
│ │ ├── ColorPickerWrapper.tsx
│ │ ├── Items.tsx
│ │ ├── ItemsInner.tsx
│ │ └── ItemsSelector.tsx
│ ├── loaders
│ │ ├── AppLoader.astro
│ │ ├── EasyMdeLoader.astro
│ │ ├── FittyText.astro
│ │ ├── HitsLoader.astro
│ │ ├── HomePageLoader.astro
│ │ ├── HudFormLoader.astro
│ │ ├── HudPreviewCarouselLoader.astro
│ │ └── TooltipLoader.astro
│ └── quickplay
│ │ ├── CustomizeButton.tsx
│ │ ├── MapBans.tsx
│ │ ├── MatchGroupSelector.tsx
│ │ ├── PingDisplay.tsx
│ │ ├── ServerFinder.tsx
│ │ └── ServerList.tsx
├── env.d.ts
├── img
│ ├── app
│ │ ├── crosshairs
│ │ │ └── crosspreview.webp
│ │ └── explosions
│ │ │ ├── ExplosionCore_sapperdestroyed.webp
│ │ │ ├── default.webp
│ │ │ ├── duck_collect_trail_special_red.webp
│ │ │ ├── electrocuted_blue_flash.webp
│ │ │ ├── electrocuted_red_flash.webp
│ │ │ ├── eotl_pyro_pool_explosion_flash.webp
│ │ │ └── muzzle_minigun_starflash01.webp
│ ├── cp_badlands01.webp
│ ├── cp_sunshine04.webp
│ ├── gamemodes
│ │ ├── ad.webp
│ │ ├── arena.webp
│ │ ├── cp.webp
│ │ ├── ctf.webp
│ │ ├── halloween.webp
│ │ ├── jump1.webp
│ │ ├── koth.webp
│ │ ├── mvm.webp
│ │ ├── pass.webp
│ │ ├── pl.webp
│ │ ├── plr.webp
│ │ ├── powerup.webp
│ │ ├── random.webp
│ │ ├── sd.webp
│ │ └── workshop.webp
│ ├── network.webp
│ ├── pl_badwater01.webp
│ ├── presets
│ │ ├── high-hq.webp
│ │ ├── high.webp
│ │ ├── low-hq.webp
│ │ ├── low.webp
│ │ ├── medium-high-hq.webp
│ │ ├── medium-high.webp
│ │ ├── medium-hq.webp
│ │ ├── medium-low-hq.webp
│ │ ├── medium-low.webp
│ │ ├── medium.webp
│ │ ├── none.webp
│ │ ├── ultra-hq.webp
│ │ ├── ultra.webp
│ │ ├── very-low-hq.webp
│ │ └── very-low.webp
│ ├── third_party
│ │ ├── tf2cc.webp
│ │ └── tradeit.webp
│ ├── update
│ │ ├── lair.webp
│ │ ├── lairoutside.webp
│ │ ├── quicklime.webp
│ │ └── tf2logo.webp
│ └── xmark.webp
├── layouts
│ ├── Layout.astro
│ └── Redirector.astro
├── pages
│ ├── 404.astro
│ ├── api
│ │ └── [id].json.ts
│ ├── app.astro
│ ├── connect.astro
│ ├── discord.astro
│ ├── gameData
│ │ └── [id].json.ts
│ ├── hits
│ │ ├── hs
│ │ │ ├── [page].astro
│ │ │ └── alphabetical
│ │ │ │ └── [page].astro
│ │ └── ks
│ │ │ ├── [page].astro
│ │ │ └── alphabetical
│ │ │ └── [page].astro
│ ├── huds
│ │ ├── [page].astro
│ │ ├── alphabetical
│ │ │ └── [page].astro
│ │ ├── author
│ │ │ └── [author].astro
│ │ ├── customize.astro
│ │ ├── featured
│ │ │ └── index.astro
│ │ ├── page
│ │ │ └── [id].astro
│ │ ├── search
│ │ │ └── [id].json.ts
│ │ ├── submit.astro
│ │ └── trending
│ │ │ └── [page].astro
│ ├── index.astro
│ ├── player-stats.astro
│ ├── quickplay.astro
│ ├── quickplay
│ │ ├── data
│ │ │ └── [id].json.ts
│ │ ├── host_faq.astro
│ │ └── updates.astro
│ └── update.astro
├── posts
│ └── quickplay
│ │ └── updates.md
├── pwa.ts
├── ssg
│ ├── appData.ts
│ ├── fetchCache.ts
│ ├── hits.ts
│ ├── hitsounds.json
│ ├── hudEditData.ts
│ ├── huds.ts
│ ├── quickplayData.ts
│ └── quickplayStaticData.ts
├── store
│ ├── items.ts
│ ├── quickplay.ts
│ └── version.ts
├── styles
│ ├── _materia.scss
│ ├── app.scss
│ ├── bootstrap.scss
│ ├── global.scss
│ ├── hits.scss
│ ├── keyboard.scss
│ ├── mde.scss
│ └── quickplay.scss
└── utils
│ ├── app.ts
│ ├── fastClone.ts
│ ├── filter.ts
│ ├── game.ts
│ ├── globalStyles.ts
│ ├── hits.ts
│ ├── idbstorage.ts
│ ├── index.ts
│ ├── math.ts
│ ├── nonce.ts
│ ├── quickplay.ts
│ ├── shuffle.ts
│ └── tson.ts
├── tailwind.config.ts
└── tsconfig.json
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: { browser: true, es2021: true },
4 | extends: [
5 | "eslint:recommended",
6 | "plugin:@typescript-eslint/recommended",
7 | "plugin:react-hooks/recommended",
8 | "plugin:astro/recommended",
9 | "plugin:astro/jsx-a11y-strict",
10 | "prettier",
11 | ],
12 | parser: "@typescript-eslint/parser",
13 | parserOptions: {
14 | ecmaFeatures: {
15 | jsx: true,
16 | },
17 | ecmaVersion: "latest",
18 | sourceType: "module",
19 | },
20 | plugins: ["react-refresh"],
21 | rules: {
22 | "react-refresh/only-export-components": [
23 | "error",
24 | { allowConstantExport: true },
25 | ],
26 | "@typescript-eslint/no-explicit-any": "error",
27 | },
28 | overrides: [
29 | {
30 | // Define the configuration for `.astro` file.
31 | files: ["*.astro"],
32 | // Allows Astro components to be parsed.
33 | parser: "astro-eslint-parser",
34 | // Parse the script in `.astro` as TypeScript by adding the following configuration.
35 | // It's the setting you need when using TypeScript.
36 | parserOptions: {
37 | parser: "@typescript-eslint/parser",
38 | extraFileExtensions: [".astro"],
39 | },
40 | },
41 | ],
42 | };
43 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 | # Please see the documentation for all configuration options:
4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5 |
6 | version: 2
7 | updates:
8 | - package-ecosystem: "github-actions" # See documentation for possible values
9 | directory: "/" # Location of package manifests
10 | schedule:
11 | interval: "weekly"
12 |
--------------------------------------------------------------------------------
/.github/workflows/bump.yml:
--------------------------------------------------------------------------------
1 | name: Bump Comfig Web
2 |
3 | on:
4 | workflow_dispatch:
5 | inputs:
6 | reason:
7 | description: "Change reason"
8 | required: true
9 | type: string
10 | default: "bump comfig web"
11 | schedule:
12 | - cron: "0 12 * * *"
13 |
14 | jobs:
15 | bump:
16 | runs-on: ubuntu-latest
17 | steps:
18 | - uses: actions/checkout@v4
19 | with:
20 | token: ${{ secrets.REPO_TOKEN }}
21 | fetch-depth: 0
22 | ref: main
23 | - name: Commit bump
24 | run: |
25 | git config user.email "support@mastercomfig.com"
26 | git config user.name "mastercoms"
27 | git commit --allow-empty -m "web data update: ${{ github.event.inputs.reason || 'daily update' }}"
28 | git push
29 |
--------------------------------------------------------------------------------
/.github/workflows/repo.yml:
--------------------------------------------------------------------------------
1 | name: Repo
2 |
3 | on:
4 | push:
5 | branches: [main]
6 |
7 | jobs:
8 | merge:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v4
12 | - name: Merge main -> develop
13 | uses: everlytic/branch-merge@master
14 | with:
15 | target_branch: develop
16 | github_token: ${{ secrets.REPO_TOKEN }}
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /dev/
2 | /dev-dist/
3 | /.idea/
4 | /.vscode/
5 | /.astro/
6 |
7 | # build output
8 | dist/
9 | .output/
10 |
11 | # dependencies
12 | node_modules/
13 |
14 | # logs
15 | .pnpm-debug.log*
16 |
17 | # environment variables
18 | .env*.local
19 |
20 | # macOS-specific files
21 | .DS_Store
22 |
23 | # generated files
24 | generated/
25 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 20
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["prettier-plugin-astro", "@trivago/prettier-plugin-sort-imports"],
3 | "tabWidth": 2,
4 | "trailingComma": "all",
5 | "importOrder": [
6 | "^@type/(.*)$",
7 | "^@utils/(.*)$",
8 | "^@store/(.*)$",
9 | "^@data/(.*)$",
10 | "^@components/(.*)$",
11 | "^[./]"
12 | ],
13 | "importOrderSeparation": true,
14 | "importOrderSortSpecifiers": true,
15 | "overrides": [
16 | {
17 | "files": "*.astro",
18 | "options": {
19 | "parser": "astro"
20 | }
21 | }
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["stylelint-config-standard-scss", "stylelint-config-html"]
3 | }
4 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016-2024 mastercoms
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 | Portions of this software are based upon cfgtf and used according to the terms described below:
24 |
25 | Copyright (c) 2018 mkrl
26 |
27 | Permission is hereby granted, free of charge, to any person obtaining a copy
28 | of this software and associated documentation files (the "Software"), to deal
29 | in the Software without restriction, including without limitation the rights
30 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
31 | copies of the Software, and to permit persons to whom the Software is
32 | furnished to do so, subject to the following conditions:
33 |
34 | The above copyright notice and this permission notice shall be included in all
35 | copies or substantial portions of the Software.
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # mastercomfig web app
2 |
3 | The [web app](https://comfig.app/) for mastercomfig.
4 |
5 | ## Color Scheme
6 |
7 | We use [a material color scheme](https://material.io/resources/color/#!/?view.left=0&view.right=0&primary.color=009688&secondary.color=00BFA5).
8 |
9 | ## Project Structure
10 |
11 | You'll see the following folders and files:
12 |
13 | ```
14 | /
15 | ├── public/
16 | │ └── favicon.ico
17 | ├── src/
18 | │ ├── components/
19 | │ │ └── Footer.astro
20 | │ ├── layouts/
21 | │ │ └── Layout.astro
22 | │ └── pages/
23 | │ └── index.astro
24 | └── package.json
25 | ```
26 |
27 | Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
28 |
29 | Any Astro/React [components](https://docs.astro.build/en/core-concepts/astro-components/) are put in `src/components/`.
30 |
31 | Astro [layouts](https://docs.astro.build/en/core-concepts/layouts/) are put in `src/layouts/`.
32 |
33 | Any static assets, like images, scripts, CSS, can be placed in the `public/` directory.
34 |
35 | ## Commands
36 |
37 | All commands are run from the root of the project, from a terminal:
38 |
39 | | Command | Action |
40 | | :------------- | :------------------------------------------- |
41 | | `pnpm install` | Installs dependencies |
42 | | `pnpm dev` | Starts local dev server at `localhost:3000` |
43 | | `pnpm build` | Build your production site to `./dist/` |
44 | | `pnpm preview` | Preview your build locally, before deploying |
45 |
46 | ## Want to learn more?
47 |
48 | Feel free to check the [Astro documentation](https://docs.astro.build/en/getting-started/).
49 |
--------------------------------------------------------------------------------
/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import { fixupConfigRules } from "@eslint/compat";
2 | import { FlatCompat } from "@eslint/eslintrc";
3 | import js from "@eslint/js";
4 | import tsParser from "@typescript-eslint/parser";
5 | import parser from "astro-eslint-parser";
6 | import reactRefresh from "eslint-plugin-react-refresh";
7 | import globals from "globals";
8 | import path from "node:path";
9 | import { fileURLToPath } from "node:url";
10 |
11 | const __filename = fileURLToPath(import.meta.url);
12 | const __dirname = path.dirname(__filename);
13 | const compat = new FlatCompat({
14 | baseDirectory: __dirname,
15 | recommendedConfig: js.configs.recommended,
16 | allConfig: js.configs.all,
17 | });
18 |
19 | export default [
20 | ...fixupConfigRules(
21 | compat.extends(
22 | "eslint:recommended",
23 | "plugin:@typescript-eslint/recommended",
24 | "plugin:react-hooks/recommended",
25 | "plugin:astro/recommended",
26 | "plugin:astro/jsx-a11y-strict",
27 | "prettier",
28 | ),
29 | ),
30 | {
31 | plugins: {
32 | "react-refresh": reactRefresh,
33 | },
34 |
35 | languageOptions: {
36 | globals: {
37 | ...globals.browser,
38 | },
39 |
40 | parser: tsParser,
41 | ecmaVersion: "latest",
42 | sourceType: "module",
43 |
44 | parserOptions: {
45 | ecmaFeatures: {
46 | jsx: true,
47 | },
48 | },
49 | },
50 |
51 | rules: {
52 | "react-refresh/only-export-components": [
53 | "error",
54 | {
55 | allowConstantExport: true,
56 | },
57 | ],
58 |
59 | "@typescript-eslint/no-explicit-any": "error",
60 | },
61 | },
62 | {
63 | files: ["**/*.astro"],
64 |
65 | languageOptions: {
66 | parser: parser,
67 | ecmaVersion: 5,
68 | sourceType: "script",
69 |
70 | parserOptions: {
71 | parser: "@typescript-eslint/parser",
72 | extraFileExtensions: [".astro"],
73 | },
74 | },
75 | },
76 | ];
77 |
--------------------------------------------------------------------------------
/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [require("autoprefixer"), require("postcss-import")],
3 | };
4 |
--------------------------------------------------------------------------------
/public/.well-known/security.txt:
--------------------------------------------------------------------------------
1 | Contact: mailto:support@mastercomfig.com
2 | Expires: 2026-04-01T00:00:00z
3 | Preferred-Languages: en
4 | Canonical: https://comfig.app/.well-known/security.txt
5 | Policy: https://github.com/mastercomfig/mastercomfig/blob/develop/SECURITY.md
6 |
--------------------------------------------------------------------------------
/public/_headers:
--------------------------------------------------------------------------------
1 | /*
2 | ! Access-Control-Allow-Origin
3 | Permissions-Policy: document-domain=()
4 | Document-Policy: js-profiling
5 | Content-Security-Policy: upgrade-insecure-requests; default-src 'none'; script-src {{SRC_NONCE}} {{SCRIPT_SRC_HASHES}} 'self' blob: https://static.cloudflareinsights.com https://ajax.cloudflare.com https://challenges.cloudflare.com; frame-src https://www.youtube-nocookie.com https://challenges.cloudflare.com; img-src data: https:; connect-src https:; media-src blob: https:; style-src 'self'; style-src-elem {{SRC_NONCE}} {{STYLE_SRC_ELEM_HASHES}} 'self'; style-src-attr 'unsafe-inline'; manifest-src 'self'; font-src 'self'; worker-src blob: 'self'; form-action 'self'; frame-ancestors 'none'; base-uri 'none'; sandbox allow-downloads allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts;
6 | Cross-Origin-Resource-Policy: same-origin
7 | Cross-Origin-Opener-Policy: same-origin
8 | Cross-Origin-Embedder-Policy: require-corp
9 |
10 | /sw.js
11 | ! Cache-Control
12 |
13 | /registerSW.js
14 | ! Cache-Control
15 |
16 | /manifest.webmanifest
17 | ! Cache-Control
18 | Content-Type: application/manifest+json
19 |
20 | /_astro/*
21 | Cache-Control: public, max-age=31536000, immutable
22 |
23 | /workbox-*
24 | Cache-Control: public, max-age=31536000, immutable
25 |
26 | /*.cached.json
27 | Cache-Control: public, max-age=31536000, immutable
28 |
29 | /*.png
30 | Cache-Control: public, max-age=604800, stale-while-revalidate=1987200
31 |
32 | /*.jpg
33 | Cache-Control: public, max-age=604800, stale-while-revalidate=1987200
34 |
35 | /*.ico
36 | Cache-Control: public, max-age=604800, stale-while-revalidate=1987200
37 |
38 | /*.webp
39 | Cache-Control: public, max-age=604800, stale-while-revalidate=1987200
40 |
41 | /*.vtf
42 | Cache-Control: public, max-age=604800, stale-while-revalidate=1987200
43 |
44 | /*.vmt
45 | Cache-Control: public, max-age=604800, stale-while-revalidate=1987200
46 |
47 | /*.svg
48 | Cache-Control: public, max-age=604800, stale-while-revalidate=1987200
49 |
50 | /*.xml
51 | Cache-Control: public, max-age=604800, stale-while-revalidate=1987200
52 |
--------------------------------------------------------------------------------
/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/Crossdot.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/Crossdot.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/bigcross.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/bigcross.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/bigcrosshair7.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/bigcrosshair7.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/bigcrosshair7OL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/bigcrosshair7OL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/brackets.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/brackets.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/circle.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/circle.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/circledot.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/circledot.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_1.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_1.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_10.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_10.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_11.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_11.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_12.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_12.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_13.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_13.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_14.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_14.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_15.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_15.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_16.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_16.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_17.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_17.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_18.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_18.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_19.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_19.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_2.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_2.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_3.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_3.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_4.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_4.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_5.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_5.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_6.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_6.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_7.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_7.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_8.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_8.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/cpma_9.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/cpma_9.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair1.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair1.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair11.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair11.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair1OL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair1OL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair2.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair2.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair2OL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair2OL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair3.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair3.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair3OL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair3OL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair5.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair5.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair5OL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair5OL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair5circle.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair5circle.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair5circleOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair5circleOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair6.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair6.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair6OL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair6OL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair6circle.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair6circle.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair6circleOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair6circleOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair7.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair7.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair7OL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair7OL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair7circle.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair7circle.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/crosshair7circleOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/crosshair7circleOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/dot.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/dot.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/fatcross.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/fatcross.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/fatcrossOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/fatcrossOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/fatcrosscircle.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/fatcrosscircle.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/fatcrosscircleOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/fatcrosscircleOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/mediccross.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/mediccross.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/mediccrossbig.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/mediccrossbig.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/opencross.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/opencross.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/opencrossOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/opencrossOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_1.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_1.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_10.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_10.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_11.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_11.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_12.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_12.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_13.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_13.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_14.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_14.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_15.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_15.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_16.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_16.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_17.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_17.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_18.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_18.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_19.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_19.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_2.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_2.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_3.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_3.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_4.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_4.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_5.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_5.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_6.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_6.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_7.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_7.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_8.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_8.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/ql_9.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/ql_9.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/quarteredcircle.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/quarteredcircle.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/seeker.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/seeker.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/seekerOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/seekerOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/smallcrosshair7.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/smallcrosshair7.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/smallcrosshair7OL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/smallcrosshair7OL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/smallcrosshair7circle.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/smallcrosshair7circle.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/smallcrosshair7circleOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/smallcrosshair7circleOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/sniper.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/sniper.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/sniperOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/sniperOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/sniperbig.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/sniperbig.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/sniperbigOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/sniperbigOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/snipercircle.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/snipercircle.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/snipercircleOL.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/snipercircleOL.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/thalashseeker.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/thalashseeker.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/tob_rocketcross.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/tob_rocketcross.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/tob_wingscross.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/tob_wingscross.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/tob_wingsdot.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/tob_wingsdot.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/wings.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/wings.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/wingsdot.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/wingsdot.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/xhairshadowdefault.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/xhairshadowdefault.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/xhairshadowdots.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/xhairshadowdots.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/xhairshadowplus.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/xhairshadowplus.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/xhairshadowpluss.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/xhairshadowpluss.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/xhairshadowrocketsthick.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/xhairshadowrocketsthick.vtf
--------------------------------------------------------------------------------
/public/assets/app/crosshairs/yzwings.vtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/assets/app/crosshairs/yzwings.vtf
--------------------------------------------------------------------------------
/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #009688
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/favicon.ico
--------------------------------------------------------------------------------
/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/favicon.png
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/bigcross.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/bigcross.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/bigcrosshair7.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/bigcrosshair7.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/bigcrosshair7OL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/bigcrosshair7OL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/brackets.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/brackets.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/brackets.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/circle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/circle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/circle.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/circle_large.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/circledot.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/circledot.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_1.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_10.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_10.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_11.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_11.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_12.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_12.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_13.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_13.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_14.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_14.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_15.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_15.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_16.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_16.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_17.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_17.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_18.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_18.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_19.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_19.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_2.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_3.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_4.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_4.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_5.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_5.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_6.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_6.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_7.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_7.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_8.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_8.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cpma_9.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/cpma_9.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cross.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/cross_with_dot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crossdot.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crossdot.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair1.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair11.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair11.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair1OL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair1OL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair2.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair2OL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair2OL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair3.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair3OL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair3OL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair5.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair5.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair5OL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair5OL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair5circle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair5circle.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair5circleOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair5circleOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair6.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair6.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair6OL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair6OL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair6circle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair6circle.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair6circleOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair6circleOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair7.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair7.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair7OL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair7OL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair7circle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair7circle.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/crosshair7circleOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/crosshair7circleOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/dot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/dot.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/dot.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ex.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/fatcross.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/fatcross.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/fatcrossOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/fatcrossOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/fatcrosscircle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/fatcrosscircle.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/fatcrosscircleOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/fatcrosscircleOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/half_cross_with_dot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/mediccross.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/mediccross.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/mediccrossbig.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/mediccrossbig.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/opencross.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/opencross.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/opencross.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/opencrossOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/opencrossOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_1.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_10.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_10.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_11.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_11.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_12.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_12.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_13.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_13.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_14.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_14.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_15.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_15.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_16.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_16.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_17.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_17.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_18.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_18.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_19.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_19.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_2.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_3.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_4.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_4.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_5.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_5.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_6.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_6.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_7.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_7.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_8.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_8.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ql_9.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ql_9.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ring.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ring.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/ring.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/ring_large.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/seeker.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/seeker.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/seekerOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/seekerOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/smallcrosshair7.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/smallcrosshair7.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/smallcrosshair7OL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/smallcrosshair7OL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/smallcrosshair7circle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/smallcrosshair7circle.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/smallcrosshair7circleOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/smallcrosshair7circleOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/sniper.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/sniper.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/sniperOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/sniperOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/sniperbig.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/sniperbig.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/sniperbigOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/sniperbigOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/snipercircle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/snipercircle.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/snipercircleOL.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/snipercircleOL.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/squarebracket.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/squarebracket.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/thalashseeker.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/thalashseeker.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/tob_rocketcross.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/tob_rocketcross.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/tob_wingscross.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/tob_wingscross.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/tob_wingsdot.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/tob_wingsdot.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/wings.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/wings.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/wingsdot.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/wingsdot.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/xhairshadowdefault.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/xhairshadowdefault.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/xhairshadowdots.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/xhairshadowdots.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/xhairshadowplus.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/xhairshadowplus.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/xhairshadowpluss.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/xhairshadowpluss.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/xhairshadowrocketsthick.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/xhairshadowrocketsthick.webp
--------------------------------------------------------------------------------
/public/img/app/crosshairs/preview/yzwings.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/app/crosshairs/preview/yzwings.webp
--------------------------------------------------------------------------------
/public/img/mastercomfig_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/mastercomfig_banner.png
--------------------------------------------------------------------------------
/public/img/mastercomfig_banner.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/mastercomfig_logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/mastercomfig_logo_192x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/mastercomfig_logo_192x.png
--------------------------------------------------------------------------------
/public/img/mastercomfig_logo_512x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/mastercomfig_logo_512x.png
--------------------------------------------------------------------------------
/public/img/mastercomfig_logo_sus.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/mastercomfig_logo_sus.webp
--------------------------------------------------------------------------------
/public/img/mastercomfig_logo_transparent_i.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/mastercomfig_logo_transparent_i.png
--------------------------------------------------------------------------------
/public/img/mastercomfig_logo_transparent_i.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/modules/3dsky/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/3dsky/off.webp
--------------------------------------------------------------------------------
/public/img/modules/3dsky/on.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/3dsky/on.webp
--------------------------------------------------------------------------------
/public/img/modules/anti_aliasing/msaa_2x.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/anti_aliasing/msaa_2x.webp
--------------------------------------------------------------------------------
/public/img/modules/anti_aliasing/msaa_4x.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/anti_aliasing/msaa_4x.webp
--------------------------------------------------------------------------------
/public/img/modules/anti_aliasing/msaa_8x.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/anti_aliasing/msaa_8x.webp
--------------------------------------------------------------------------------
/public/img/modules/anti_aliasing/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/anti_aliasing/off.webp
--------------------------------------------------------------------------------
/public/img/modules/characters/high.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/characters/high.mp4
--------------------------------------------------------------------------------
/public/img/modules/characters/low.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/characters/low.mp4
--------------------------------------------------------------------------------
/public/img/modules/characters/medium.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/characters/medium.mp4
--------------------------------------------------------------------------------
/public/img/modules/characters/medium_high.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/characters/medium_high.mp4
--------------------------------------------------------------------------------
/public/img/modules/characters/ultra.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/characters/ultra.mp4
--------------------------------------------------------------------------------
/public/img/modules/characters/very_low.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/characters/very_low.mp4
--------------------------------------------------------------------------------
/public/img/modules/decals/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals/high.webp
--------------------------------------------------------------------------------
/public/img/modules/decals/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals/low.webp
--------------------------------------------------------------------------------
/public/img/modules/decals/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/decals/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals/off.webp
--------------------------------------------------------------------------------
/public/img/modules/decals/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/decals_art/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals_art/off.webp
--------------------------------------------------------------------------------
/public/img/modules/decals_art/on.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals_art/on.webp
--------------------------------------------------------------------------------
/public/img/modules/decals_models/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals_models/high.webp
--------------------------------------------------------------------------------
/public/img/modules/decals_models/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals_models/low.webp
--------------------------------------------------------------------------------
/public/img/modules/decals_models/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/decals_models/off.webp
--------------------------------------------------------------------------------
/public/img/modules/effects/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/effects/high.webp
--------------------------------------------------------------------------------
/public/img/modules/effects/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/effects/low.webp
--------------------------------------------------------------------------------
/public/img/modules/effects/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/effects/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/effects/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/effects/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/gibs/high.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/gibs/high.mp4
--------------------------------------------------------------------------------
/public/img/modules/gibs/low.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/gibs/low.mp4
--------------------------------------------------------------------------------
/public/img/modules/gibs/medium.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/gibs/medium.mp4
--------------------------------------------------------------------------------
/public/img/modules/gibs/medium_low.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/gibs/medium_low.mp4
--------------------------------------------------------------------------------
/public/img/modules/gibs/off.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/gibs/off.mp4
--------------------------------------------------------------------------------
/public/img/modules/hud_player_model/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/hud_player_model/off.webp
--------------------------------------------------------------------------------
/public/img/modules/hud_player_model/on.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/hud_player_model/on.webp
--------------------------------------------------------------------------------
/public/img/modules/jigglebones/force_on.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/jigglebones/force_on.mp4
--------------------------------------------------------------------------------
/public/img/modules/jigglebones/off.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/jigglebones/off.mp4
--------------------------------------------------------------------------------
/public/img/modules/jigglebones/on.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/jigglebones/on.mp4
--------------------------------------------------------------------------------
/public/img/modules/lighting/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting/high.webp
--------------------------------------------------------------------------------
/public/img/modules/lighting/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting/low.webp
--------------------------------------------------------------------------------
/public/img/modules/lighting/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/lighting/medium_high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting/medium_high.webp
--------------------------------------------------------------------------------
/public/img/modules/lighting/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/lighting/very_high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting/very_high.webp
--------------------------------------------------------------------------------
/public/img/modules/lighting/very_low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting/very_low.webp
--------------------------------------------------------------------------------
/public/img/modules/lighting_ex/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting_ex/high.webp
--------------------------------------------------------------------------------
/public/img/modules/lighting_ex/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lighting_ex/low.webp
--------------------------------------------------------------------------------
/public/img/modules/lod/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lod/high.webp
--------------------------------------------------------------------------------
/public/img/modules/lod/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lod/low.webp
--------------------------------------------------------------------------------
/public/img/modules/lod/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lod/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/lod/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/lod/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/motion_blur/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/motion_blur/high.webp
--------------------------------------------------------------------------------
/public/img/modules/motion_blur/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/motion_blur/low.webp
--------------------------------------------------------------------------------
/public/img/modules/motion_blur/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/motion_blur/off.webp
--------------------------------------------------------------------------------
/public/img/modules/outlines/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/outlines/high.webp
--------------------------------------------------------------------------------
/public/img/modules/outlines/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/outlines/low.webp
--------------------------------------------------------------------------------
/public/img/modules/outlines/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/outlines/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/outlines/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/outlines/off.webp
--------------------------------------------------------------------------------
/public/img/modules/particles/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/particles/high.webp
--------------------------------------------------------------------------------
/public/img/modules/particles/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/particles/low.webp
--------------------------------------------------------------------------------
/public/img/modules/particles/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/particles/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/particles/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/particles/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/particles/very_low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/particles/very_low.webp
--------------------------------------------------------------------------------
/public/img/modules/post_processing/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/post_processing/high.webp
--------------------------------------------------------------------------------
/public/img/modules/post_processing/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/post_processing/low.webp
--------------------------------------------------------------------------------
/public/img/modules/post_processing/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/post_processing/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/post_processing/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/post_processing/off.webp
--------------------------------------------------------------------------------
/public/img/modules/props/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/props/high.webp
--------------------------------------------------------------------------------
/public/img/modules/props/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/props/low.webp
--------------------------------------------------------------------------------
/public/img/modules/props/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/props/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/props/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/props/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/pyrovision/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/pyrovision/high.webp
--------------------------------------------------------------------------------
/public/img/modules/pyrovision/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/pyrovision/low.webp
--------------------------------------------------------------------------------
/public/img/modules/pyrovision/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/pyrovision/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/ragdolls/hidden.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/ragdolls/hidden.mp4
--------------------------------------------------------------------------------
/public/img/modules/ragdolls/high.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/ragdolls/high.mp4
--------------------------------------------------------------------------------
/public/img/modules/ragdolls/medium.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/ragdolls/medium.mp4
--------------------------------------------------------------------------------
/public/img/modules/ragdolls/off.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/ragdolls/off.mp4
--------------------------------------------------------------------------------
/public/img/modules/ropes/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/ropes/high.webp
--------------------------------------------------------------------------------
/public/img/modules/ropes/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/ropes/low.webp
--------------------------------------------------------------------------------
/public/img/modules/ropes/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/ropes/off.webp
--------------------------------------------------------------------------------
/public/img/modules/ropes/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/ropes/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/shadows/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/shadows/high.webp
--------------------------------------------------------------------------------
/public/img/modules/shadows/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/shadows/low.webp
--------------------------------------------------------------------------------
/public/img/modules/shadows/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/shadows/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/shadows/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/shadows/off.webp
--------------------------------------------------------------------------------
/public/img/modules/shadows/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/shadows/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/shadows/very_high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/shadows/very_high.webp
--------------------------------------------------------------------------------
/public/img/modules/shadows/very_low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/shadows/very_low.webp
--------------------------------------------------------------------------------
/public/img/modules/sheens_speed/fast.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/sheens_speed/fast.mp4
--------------------------------------------------------------------------------
/public/img/modules/sheens_speed/medium.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/sheens_speed/medium.mp4
--------------------------------------------------------------------------------
/public/img/modules/sheens_speed/slow.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/sheens_speed/slow.mp4
--------------------------------------------------------------------------------
/public/img/modules/sheens_tint/full.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/sheens_tint/full.webp
--------------------------------------------------------------------------------
/public/img/modules/sheens_tint/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/sheens_tint/high.webp
--------------------------------------------------------------------------------
/public/img/modules/sheens_tint/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/sheens_tint/low.webp
--------------------------------------------------------------------------------
/public/img/modules/sheens_tint/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/sheens_tint/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/sillygibs/on.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/sillygibs/on.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_filter/aniso16x.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_filter/aniso16x.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_filter/aniso2x.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_filter/aniso2x.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_filter/aniso4x.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_filter/aniso4x.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_filter/aniso8x.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_filter/aniso8x.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_filter/bilinear.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_filter/bilinear.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_filter/trilinear.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_filter/trilinear.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_quality/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_quality/high.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_quality/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_quality/low.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_quality/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_quality/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_quality/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_quality/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_quality/very_high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_quality/very_high.webp
--------------------------------------------------------------------------------
/public/img/modules/texture_quality/very_low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/texture_quality/very_low.webp
--------------------------------------------------------------------------------
/public/img/modules/textures/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/textures/high.webp
--------------------------------------------------------------------------------
/public/img/modules/textures/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/textures/low.webp
--------------------------------------------------------------------------------
/public/img/modules/textures/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/textures/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/textures/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/textures/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/textures/very_high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/textures/very_high.webp
--------------------------------------------------------------------------------
/public/img/modules/textures/very_low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/textures/very_low.webp
--------------------------------------------------------------------------------
/public/img/modules/vsync/off.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/vsync/off.webp
--------------------------------------------------------------------------------
/public/img/modules/vsync/on.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/vsync/on.webp
--------------------------------------------------------------------------------
/public/img/modules/water/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/water/high.webp
--------------------------------------------------------------------------------
/public/img/modules/water/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/water/low.webp
--------------------------------------------------------------------------------
/public/img/modules/water/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/water/medium.webp
--------------------------------------------------------------------------------
/public/img/modules/water/medium_high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/water/medium_high.webp
--------------------------------------------------------------------------------
/public/img/modules/water/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/water/ultra.webp
--------------------------------------------------------------------------------
/public/img/modules/water/very_high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/water/very_high.webp
--------------------------------------------------------------------------------
/public/img/modules/water/very_low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/modules/water/very_low.webp
--------------------------------------------------------------------------------
/public/img/presets/high-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/presets/high-hq.webp
--------------------------------------------------------------------------------
/public/img/presets/low-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/presets/low-hq.webp
--------------------------------------------------------------------------------
/public/img/presets/medium-high-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/presets/medium-high-hq.webp
--------------------------------------------------------------------------------
/public/img/presets/medium-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/presets/medium-hq.webp
--------------------------------------------------------------------------------
/public/img/presets/medium-low-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/presets/medium-low-hq.webp
--------------------------------------------------------------------------------
/public/img/presets/ultra-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/presets/ultra-hq.webp
--------------------------------------------------------------------------------
/public/img/presets/very-low-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/presets/very-low-hq.webp
--------------------------------------------------------------------------------
/public/img/third_party/solid_gray.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/img/third_party/tradeit.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/third_party/tradeit.webp
--------------------------------------------------------------------------------
/public/img/update/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/update/favicon.ico
--------------------------------------------------------------------------------
/public/img/update/springcleaning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/img/update/springcleaning.png
--------------------------------------------------------------------------------
/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/public/mstile-150x150.png
--------------------------------------------------------------------------------
/public/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/sw.ts:
--------------------------------------------------------------------------------
1 | ///
2 | import { clientsClaim } from "workbox-core";
3 | import {
4 | cleanupOutdatedCaches,
5 | createHandlerBoundToURL,
6 | precacheAndRoute,
7 | } from "workbox-precaching";
8 | import { NavigationRoute, registerRoute } from "workbox-routing";
9 |
10 | declare let self: ServiceWorkerGlobalScope;
11 |
12 | // self.__WB_MANIFEST is the default injection point
13 | precacheAndRoute(self.__WB_MANIFEST);
14 |
15 | // clean old assets
16 | cleanupOutdatedCaches();
17 |
18 | let allowlist: RegExp[] | undefined;
19 | // in dev mode, we disable precaching to avoid caching issues
20 | if (import.meta.env.DEV) allowlist = [/^\/$/];
21 |
22 | // to allow work offline
23 | registerRoute(
24 | new NavigationRoute(createHandlerBoundToURL("index.html"), { allowlist }),
25 | );
26 |
27 | self.skipWaiting();
28 | clientsClaim();
29 |
--------------------------------------------------------------------------------
/scripts/bucket-cors.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "origin": ["https://comfig.app", "http://127.0.0.1:4321"],
4 | "method": ["GET"],
5 | "responseHeader": ["Content-Type"],
6 | "maxAgeSeconds": 3600
7 | }
8 | ]
9 |
--------------------------------------------------------------------------------
/scripts/purge-cloudflare.js:
--------------------------------------------------------------------------------
1 | const { globSync } = require("glob");
2 | const https = require("https");
3 |
4 | const MAX_CF_URLS = 30;
5 |
6 | const headers = {
7 | "X-Auth-Email": process.env.CF_API_EMAIL,
8 | Authorization: `Bearer ${process.env.CF_API_KEY}`,
9 | "Content-Type": "application/json",
10 | };
11 |
12 | const hosts = ["comfig.app"];
13 |
14 | function purgeOnCloudflare(pages) {
15 | const files = pages.flatMap((f) => hosts.map((h) => `https://${h}/${f}`));
16 | const data = JSON.stringify({
17 | files,
18 | });
19 | const options = {
20 | hostname: "api.cloudflare.com",
21 | port: 443,
22 | path: `/client/v4/zones/${process.env.CF_ZONE_ID}/purge_cache`,
23 | method: "POST",
24 | headers,
25 | };
26 | const req = https.request(options, (res) => {
27 | res.on("data", (d) => {
28 | process.stdout.write(d);
29 | });
30 | });
31 | req.write(data);
32 | req.end();
33 | }
34 |
35 | function main() {
36 | let files = globSync("src/pages/**/*.astro");
37 | files = files.flatMap((f) => {
38 | if (f.endsWith("index.astro")) {
39 | return [""];
40 | }
41 | let base = `${f.substring(f.lastIndexOf("/") + 1, f.lastIndexOf("."))}`;
42 | return [base, `${base}/`];
43 | });
44 | if (files.length > MAX_CF_URLS) {
45 | while (files.length) {
46 | purgeOnCloudflare(files.splice(0, MAX_CF_URLS));
47 | }
48 | } else {
49 | purgeOnCloudflare(files);
50 | }
51 | }
52 |
53 | main();
54 |
--------------------------------------------------------------------------------
/sentry.client.config.ts:
--------------------------------------------------------------------------------
1 | import * as Sentry from "@sentry/browser";
2 |
3 | Sentry.init({
4 | dsn: "https://42c25ee2fb084eb5a832ee92d97057d5@o182209.ingest.us.sentry.io/6265934",
5 | integrations: [
6 | Sentry.replayIntegration({
7 | networkDetailAllowUrls: [
8 | window.location.origin,
9 | "localhost",
10 | "https://api.comfig.app/",
11 | "https://worker.comfig.app/",
12 | ],
13 | }),
14 | Sentry.browserTracingIntegration({
15 | enableInp: true,
16 | }),
17 | Sentry.browserProfilingIntegration(),
18 | Sentry.captureConsoleIntegration({
19 | levels: ["warn", "error", "assert"],
20 | }),
21 | Sentry.extraErrorDataIntegration(),
22 | Sentry.httpClientIntegration(),
23 | Sentry.reportingObserverIntegration(),
24 | Sentry.contextLinesIntegration(),
25 | Sentry.sessionTimingIntegration(),
26 | ],
27 | tracesSampleRate: 0.1,
28 | tracePropagationTargets: [
29 | "localhost",
30 | /https:\/\/api.comfig.app/,
31 | /https:\/\/worker.comfig.app/,
32 | ],
33 | profilesSampleRate: 1.0,
34 | replaysSessionSampleRate: 0.005,
35 | replaysOnErrorSampleRate: 0.01,
36 | });
37 |
--------------------------------------------------------------------------------
/src/components/Body.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/components/Footer.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
17 |
--------------------------------------------------------------------------------
/src/components/HelpTooltip.tsx:
--------------------------------------------------------------------------------
1 | import { OverlayTrigger, Tooltip } from "react-bootstrap";
2 |
3 | export default function HelpTooltip({ id, title }) {
4 | return (
5 | {title}}
8 | >
9 |
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/src/components/ImageSlider.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | ReactCompareSlider,
3 | ReactCompareSliderHandle,
4 | ReactCompareSliderImage,
5 | } from "react-compare-slider";
6 |
7 | export default function ImageSlider({ srcOne, altOne, srcTwo, altTwo }) {
8 | return (
9 |
21 | }
22 | itemOne={
23 |
24 | }
25 | itemTwo={
26 |
27 | }
28 | />
29 | );
30 | }
31 |
--------------------------------------------------------------------------------
/src/components/NavSelector.astro:
--------------------------------------------------------------------------------
1 | ---
2 | const { pageName } = Astro.props;
3 | ---
4 |
5 |
8 |
9 |
53 |
--------------------------------------------------------------------------------
/src/components/ResponsiveImage.astro:
--------------------------------------------------------------------------------
1 | ---
2 | const { class: className, ...rest } = Astro.props;
3 | ---
4 |
5 |
10 |
--------------------------------------------------------------------------------
/src/components/head/BaseHead.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { NONCE } from "astro:env/server";
3 | ---
4 |
5 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/src/components/head/ImportHead.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import "@fortawesome/fontawesome-free/css/all.css";
3 | import "@styles/global.scss";
4 | ---
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/components/head/MainHead.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { ViewTransitions } from "astro:transitions";
3 | import { pwaInfo } from "virtual:pwa-info";
4 |
5 | export interface Props {
6 | title?: string;
7 | site?: string;
8 | noSite?: boolean;
9 | description?: string;
10 | url?: string;
11 | image?: string;
12 | favicon?: string;
13 | }
14 |
15 | const {
16 | title = "mastercomfig",
17 | site = "mastercomfig",
18 | noSite = false,
19 | description = "mastercomfig is a modern Team Fortress 2 performance and customization config.",
20 | image = "https://comfig.app/img/mastercomfig_banner.png",
21 | favicon = "",
22 | } = Astro.props as Props;
23 |
24 | const canonical = Astro.url.href;
25 | ---
26 |
27 | {favicon && }
28 | {
29 | !favicon && (
30 | <>
31 |
32 |
33 |
38 |
39 | >
40 | )
41 | }
42 |
43 | {noSite ? title : `${title} | ${site}`}
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | {pwaInfo && }
66 |
67 |
--------------------------------------------------------------------------------
/src/components/head/PreloadHead.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
--------------------------------------------------------------------------------
/src/components/hits/MiniHitsPlayer.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
75 |
--------------------------------------------------------------------------------
/src/components/items/ColorPickerWrapper.tsx:
--------------------------------------------------------------------------------
1 | import { useCallback, useState } from "react";
2 | import { RgbaColorPicker } from "react-colorful";
3 |
4 | export function ColorPickerWrapper({ className, color, onChange }) {
5 | const [myColor, setMyColor] = useState(color);
6 | const fullChangeUpdate = useCallback(
7 | (color) => {
8 | setMyColor(color);
9 | onChange(color);
10 | },
11 | [setMyColor, onChange],
12 | );
13 |
14 | return (
15 |
20 | );
21 | }
22 |
--------------------------------------------------------------------------------
/src/components/items/Items.tsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from "react";
2 | import { Tabs, Tab } from "react-bootstrap";
3 | import ItemsInner from "./ItemsInner.tsx";
4 | import "@utils/game.ts";
5 |
6 | export default function Items({ hash }) {
7 | const [resetKey, setResetKey] = useState(0);
8 |
9 | useEffect(() => {
10 | (async () => {
11 | const gameDataResp = await fetch(`/gameData/${hash}.cached.json`);
12 | const gameData = await gameDataResp.json();
13 | globalThis.items = gameData.items;
14 | globalThis.languageCache = gameData.languageCache;
15 | setResetKey((resetKey) => resetKey + 1);
16 | })();
17 | }, [hash]);
18 |
19 | if (!globalThis.items) {
20 | return <>>;
21 | }
22 |
23 | const playerClasses = Object.keys(globalThis.itemUsedBy);
24 |
25 | return (
26 |
27 |
28 |
29 |
35 |
36 | {playerClasses.map((playerClass) => (
37 |
42 | [
47 | i,
48 | globalThis.items[i],
49 | ]),
50 | )}
51 | />
52 |
53 | ))}
54 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/src/components/loaders/AppLoader.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
21 |
--------------------------------------------------------------------------------
/src/components/loaders/EasyMdeLoader.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
26 |
--------------------------------------------------------------------------------
/src/components/loaders/FittyText.astro:
--------------------------------------------------------------------------------
1 | ---
2 | const { className } = Astro.props;
3 | ---
4 |
5 |
6 |
7 |
20 |
--------------------------------------------------------------------------------
/src/components/loaders/HitsLoader.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
20 |
--------------------------------------------------------------------------------
/src/components/loaders/HomePageLoader.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
21 |
--------------------------------------------------------------------------------
/src/components/loaders/HudPreviewCarouselLoader.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
45 |
--------------------------------------------------------------------------------
/src/components/loaders/TooltipLoader.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
25 |
--------------------------------------------------------------------------------
/src/components/quickplay/MapBans.tsx:
--------------------------------------------------------------------------------
1 | import { interpolateRdYlGn } from "d3-scale-chromatic";
2 | import { useMemo } from "react";
3 | import { useMiniSearch } from "react-minisearch";
4 |
5 | const searchOptions = {
6 | fields: ["name"],
7 | storeFields: ["name"],
8 | searchOptions: {
9 | prefix: true,
10 | fuzzy: true,
11 | },
12 | };
13 |
14 | const MAX_POP = 87;
15 |
16 | function getPopulationPct(pop: number) {
17 | if (pop >= MAX_POP) {
18 | pop = 1.0;
19 | } else {
20 | pop /= MAX_POP;
21 | }
22 | return pop;
23 | }
24 |
25 | function getPopulationColor(pop: number) {
26 | return interpolateRdYlGn(getPopulationPct(pop));
27 | }
28 |
29 | export default function MapBans({
30 | mapPop,
31 | maps,
32 | mapbans,
33 | index,
34 | mapToThumbnail,
35 | addMapBan,
36 | setMapBanIndex,
37 | }) {
38 | const sortedMaps = useMemo(() => {
39 | return maps
40 | .filter((map) => {
41 | return !mapbans.has(map.name);
42 | })
43 | .toSorted((a, b) => {
44 | const pop = (mapPop[b.name] ?? 0) - (mapPop[a.name] ?? 0);
45 | if (pop !== 0) {
46 | return pop;
47 | }
48 | return a.name.localeCompare(b.name);
49 | });
50 | }, [maps, mapPop, mapbans]);
51 |
52 | const { search, searchResults } = useMiniSearch(sortedMaps, searchOptions);
53 |
54 | let mapList = sortedMaps;
55 | if (searchResults?.length) {
56 | mapList = searchResults;
57 | }
58 |
59 | return (
60 |
61 |
65 | SELECT A MAP TO BAN{" "}
66 |
74 |
75 |
76 | {
82 | search(e.target.value);
83 | }}
84 | />
85 |
86 |
87 |
88 |
95 | {mapList.map((m) => {
96 | return (
97 |
98 |
{
111 | if (!mapbans.has(m.name)) {
112 | addMapBan(m.name, index);
113 | }
114 | setMapBanIndex(-1);
115 | }}
116 | >
117 | {m.name}
118 |
128 | {mapPop[m.name] ?? 0}
129 |
130 |
131 |
132 | );
133 | })}
134 |
135 |
136 | );
137 | }
138 |
--------------------------------------------------------------------------------
/src/components/quickplay/PingDisplay.tsx:
--------------------------------------------------------------------------------
1 | import { useMemo } from "react";
2 | import { OverlayTrigger, Tooltip } from "react-bootstrap";
3 |
4 | export default function PingDisplay({ ping, calcPingColor }) {
5 | const pingColor = useMemo(() => {
6 | return calcPingColor(ping);
7 | }, [ping, calcPingColor]);
8 |
9 | const roundPing = useMemo(() => {
10 | return Math.round(ping);
11 | }, [ping]);
12 |
13 | return (
14 | Estimated ping: {roundPing}ms}
17 | >
18 |
19 |
20 | );
21 | }
22 |
--------------------------------------------------------------------------------
/src/components/quickplay/ServerList.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 |
3 | import PingDisplay from "./PingDisplay";
4 |
5 | export default function ServerList({
6 | servers,
7 | mapToThumbnail,
8 | setShowServers,
9 | connectToServer,
10 | calcPingColor,
11 | finishSearch,
12 | }) {
13 | const [selectedServer, setSelectedServer] = useState(undefined);
14 |
15 | return (
16 |
17 |
Search Results
18 |
25 | {servers.map((server) => (
26 |
{
31 | setSelectedServer(server);
32 | }}
33 | >
34 |
35 |
36 |

43 |
44 |
45 |
49 | {server.name}{" "}
50 |
54 |
55 |
59 | Map: {server.map}
60 |
61 |
65 |
66 | Players: {server.players} /{" "}
67 | {server.max_players}
68 |
69 |
70 |
71 |
72 |
73 |
74 | ))}
75 |
76 |
77 |
78 |
88 |
97 |
98 |
99 | );
100 | }
101 |
--------------------------------------------------------------------------------
/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 | ///
5 |
--------------------------------------------------------------------------------
/src/img/app/crosshairs/crosspreview.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/app/crosshairs/crosspreview.webp
--------------------------------------------------------------------------------
/src/img/app/explosions/ExplosionCore_sapperdestroyed.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/app/explosions/ExplosionCore_sapperdestroyed.webp
--------------------------------------------------------------------------------
/src/img/app/explosions/default.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/app/explosions/default.webp
--------------------------------------------------------------------------------
/src/img/app/explosions/duck_collect_trail_special_red.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/app/explosions/duck_collect_trail_special_red.webp
--------------------------------------------------------------------------------
/src/img/app/explosions/electrocuted_blue_flash.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/app/explosions/electrocuted_blue_flash.webp
--------------------------------------------------------------------------------
/src/img/app/explosions/electrocuted_red_flash.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/app/explosions/electrocuted_red_flash.webp
--------------------------------------------------------------------------------
/src/img/app/explosions/eotl_pyro_pool_explosion_flash.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/app/explosions/eotl_pyro_pool_explosion_flash.webp
--------------------------------------------------------------------------------
/src/img/app/explosions/muzzle_minigun_starflash01.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/app/explosions/muzzle_minigun_starflash01.webp
--------------------------------------------------------------------------------
/src/img/cp_badlands01.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/cp_badlands01.webp
--------------------------------------------------------------------------------
/src/img/cp_sunshine04.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/cp_sunshine04.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/ad.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/ad.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/arena.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/arena.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/cp.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/cp.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/ctf.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/ctf.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/halloween.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/halloween.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/jump1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/jump1.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/koth.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/koth.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/mvm.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/mvm.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/pass.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/pass.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/pl.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/pl.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/plr.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/plr.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/powerup.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/powerup.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/random.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/random.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/sd.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/sd.webp
--------------------------------------------------------------------------------
/src/img/gamemodes/workshop.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/gamemodes/workshop.webp
--------------------------------------------------------------------------------
/src/img/network.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/network.webp
--------------------------------------------------------------------------------
/src/img/pl_badwater01.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/pl_badwater01.webp
--------------------------------------------------------------------------------
/src/img/presets/high-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/high-hq.webp
--------------------------------------------------------------------------------
/src/img/presets/high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/high.webp
--------------------------------------------------------------------------------
/src/img/presets/low-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/low-hq.webp
--------------------------------------------------------------------------------
/src/img/presets/low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/low.webp
--------------------------------------------------------------------------------
/src/img/presets/medium-high-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/medium-high-hq.webp
--------------------------------------------------------------------------------
/src/img/presets/medium-high.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/medium-high.webp
--------------------------------------------------------------------------------
/src/img/presets/medium-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/medium-hq.webp
--------------------------------------------------------------------------------
/src/img/presets/medium-low-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/medium-low-hq.webp
--------------------------------------------------------------------------------
/src/img/presets/medium-low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/medium-low.webp
--------------------------------------------------------------------------------
/src/img/presets/medium.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/medium.webp
--------------------------------------------------------------------------------
/src/img/presets/none.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/none.webp
--------------------------------------------------------------------------------
/src/img/presets/ultra-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/ultra-hq.webp
--------------------------------------------------------------------------------
/src/img/presets/ultra.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/ultra.webp
--------------------------------------------------------------------------------
/src/img/presets/very-low-hq.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/very-low-hq.webp
--------------------------------------------------------------------------------
/src/img/presets/very-low.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/presets/very-low.webp
--------------------------------------------------------------------------------
/src/img/third_party/tf2cc.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/third_party/tf2cc.webp
--------------------------------------------------------------------------------
/src/img/third_party/tradeit.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/third_party/tradeit.webp
--------------------------------------------------------------------------------
/src/img/update/lair.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/update/lair.webp
--------------------------------------------------------------------------------
/src/img/update/lairoutside.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/update/lairoutside.webp
--------------------------------------------------------------------------------
/src/img/update/quicklime.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/update/quicklime.webp
--------------------------------------------------------------------------------
/src/img/update/tf2logo.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/update/tf2logo.webp
--------------------------------------------------------------------------------
/src/img/xmark.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mastercomfig/comfig-app/ff15ba773c98e037e391df416057af32e3ce12c9/src/img/xmark.webp
--------------------------------------------------------------------------------
/src/layouts/Layout.astro:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
8 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/layouts/Redirector.astro:
--------------------------------------------------------------------------------
1 | ---
2 | let { name, target } = Astro.props;
3 |
4 | if (!name) {
5 | name = target;
6 | }
7 | ---
8 |
9 |
10 |
11 | Redirecting to {name}
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/pages/404.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Body from "@components/Body.astro";
3 | import Footer from "@components/Footer.astro";
4 | import BaseHead from "@components/head/BaseHead.astro";
5 | import ImportHead from "@components/head/ImportHead.astro";
6 | import MainHead from "@components/head/MainHead.astro";
7 | import PreloadHead from "@components/head/PreloadHead.astro";
8 | import Layout from "@layouts/Layout.astro";
9 | ---
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
41 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/src/pages/api/[id].json.ts:
--------------------------------------------------------------------------------
1 | import { getAppData } from "@ssg/appData";
2 |
3 | export async function GET() {
4 | const { appData } = await getAppData();
5 | return new Response(JSON.stringify(appData), {
6 | status: 200,
7 | headers: {
8 | "Content-Type": "application/json",
9 | },
10 | });
11 | }
12 |
13 | export async function getStaticPaths() {
14 | const { appData, hash } = await getAppData();
15 |
16 | return [{ params: { id: `${appData.v[0]}.${hash.substring(0, 8)}.cached` } }];
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/connect.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Redirector from "@layouts/Redirector.astro";
3 | ---
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/discord.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Redirector from "@layouts/Redirector.astro";
3 |
4 | const discordInvite = "mastercomfig-389089828249010188";
5 | ---
6 |
7 |
11 |
--------------------------------------------------------------------------------
/src/pages/gameData/[id].json.ts:
--------------------------------------------------------------------------------
1 | import { getGameData } from "@ssg/appData";
2 |
3 | export async function GET() {
4 | const { gameData } = await getGameData();
5 | return new Response(JSON.stringify(gameData), {
6 | status: 200,
7 | headers: {
8 | "Content-Type": "application/json",
9 | },
10 | });
11 | }
12 |
13 | export async function getStaticPaths() {
14 | const { hash } = await getGameData();
15 |
16 | return [{ params: { id: `${hash.substring(0, 8)}.cached` } }];
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/hits/hs/[page].astro:
--------------------------------------------------------------------------------
1 | ---
2 | import HitsPage from "@components/hits/HitsPage.astro";
3 | import { getHitsounds } from "@ssg/hits";
4 |
5 | export async function getStaticPaths({ paginate }) {
6 | let pages = paginate(await getHitsounds(), {
7 | pageSize: 12,
8 | });
9 | return pages;
10 | }
11 |
12 | const { page } = Astro.props;
13 | ---
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/pages/hits/hs/alphabetical/[page].astro:
--------------------------------------------------------------------------------
1 | ---
2 | import HitsPage from "@components/hits/HitsPage.astro";
3 | import { getHitsounds } from "@ssg/hits";
4 |
5 | export async function getStaticPaths({ paginate }) {
6 | let pages = paginate(await getHitsounds(true), {
7 | pageSize: 12,
8 | });
9 | return pages;
10 | }
11 |
12 | const { page } = Astro.props;
13 | ---
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/pages/hits/ks/[page].astro:
--------------------------------------------------------------------------------
1 | ---
2 | import HitsPage from "@components/hits/HitsPage.astro";
3 | import { getKillsounds } from "@ssg/hits";
4 |
5 | export async function getStaticPaths({ paginate }) {
6 | let pages = paginate(await getKillsounds(), {
7 | pageSize: 12,
8 | });
9 | return pages;
10 | }
11 |
12 | const { page } = Astro.props;
13 | ---
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/pages/hits/ks/alphabetical/[page].astro:
--------------------------------------------------------------------------------
1 | ---
2 | import HitsPage from "@components/hits/HitsPage.astro";
3 | import { getKillsounds } from "@ssg/hits";
4 |
5 | export async function getStaticPaths({ paginate }) {
6 | let pages = paginate(await getKillsounds(true), {
7 | pageSize: 12,
8 | });
9 | return pages;
10 | }
11 |
12 | const { page } = Astro.props;
13 | ---
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/pages/huds/[page].astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Body from "@components/Body.astro";
3 | import Footer from "@components/Footer.astro";
4 | import BaseHead from "@components/head/BaseHead.astro";
5 | import ImportHead from "@components/head/ImportHead.astro";
6 | import MainHead from "@components/head/MainHead.astro";
7 | import PreloadHead from "@components/head/PreloadHead.astro";
8 | import HudListItem from "@components/huds/HudListItem.astro";
9 | import HudNav from "@components/huds/HudNav.astro";
10 | import HudPreviewCarouselLoader from "@components/loaders/HudPreviewCarouselLoader.astro";
11 | import TooltipLoader from "@components/loaders/TooltipLoader.astro";
12 | import Sponsor from "@components/Sponsor.astro";
13 | import Layout from "@layouts/Layout.astro";
14 |
15 | import { fetchHuds } from "@ssg/huds";
16 |
17 | export async function getStaticPaths({ paginate }) {
18 | let pages = paginate(await fetchHuds(), {
19 | pageSize: 12,
20 | });
21 | return pages;
22 | }
23 |
24 | const { page } = Astro.props;
25 | const currentPage = page.currentPage ?? 1;
26 | ---
27 |
28 |
29 |
30 |
31 |
32 |
33 |
37 |
38 |
39 |
40 |
41 |
42 |
107 |
108 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/src/pages/huds/featured/index.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Body from "@components/Body.astro";
3 | import Footer from "@components/Footer.astro";
4 | import BaseHead from "@components/head/BaseHead.astro";
5 | import ImportHead from "@components/head/ImportHead.astro";
6 | import MainHead from "@components/head/MainHead.astro";
7 | import PreloadHead from "@components/head/PreloadHead.astro";
8 | import HudListItem from "@components/huds/HudListItem.astro";
9 | import HudNav from "@components/huds/HudNav.astro";
10 | import HudPreviewCarouselLoader from "@components/loaders/HudPreviewCarouselLoader.astro";
11 | import TooltipLoader from "@components/loaders/TooltipLoader.astro";
12 | import Sponsor from "@components/Sponsor.astro";
13 | import Layout from "@layouts/Layout.astro";
14 |
15 | import { getHuds } from "@ssg/huds";
16 |
17 | const huds = await getHuds();
18 |
19 | const featuredHudIds = [
20 | "budhud",
21 | "flawhud",
22 | "m0rehud",
23 | "hypnotizehud",
24 | "rayshud",
25 | "lighthud",
26 | "kbnhud",
27 | "7hud",
28 | ];
29 |
30 | const featuredHuds = featuredHudIds.map((id) => huds.get(id));
31 | ---
32 |
33 |
34 |
35 |
36 |
37 |
38 |
42 |
43 |
44 |
45 |
46 |
47 |
76 |
77 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/src/pages/huds/search/[id].json.ts:
--------------------------------------------------------------------------------
1 | import { fetchHuds, getAllHudsHash } from "@ssg/huds";
2 | import removeMd from "remove-markdown";
3 |
4 | export async function GET() {
5 | const allHuds = await fetchHuds(true);
6 | const hudData = allHuds.map((hud) => {
7 | const data = {
8 | id: hud.id,
9 | name: hud.name,
10 | author: hud.author,
11 | content: removeMd(hud.content).toLowerCase(),
12 | flags: hud.flags || [],
13 | tags: hud.tags || [],
14 | bannerUrl: hud.bannerUrl,
15 | };
16 | const traits = ["os", "gamemode", "res", "position"];
17 | if (hud.traits) {
18 | for (const [trait, traitVal] of Object.entries(hud.traits)) {
19 | data[trait] = traitVal;
20 | }
21 | }
22 | for (const trait of traits) {
23 | if (!data[trait]) {
24 | data[trait] = [];
25 | }
26 | }
27 | return data;
28 | });
29 | return new Response(JSON.stringify(hudData), {
30 | status: 200,
31 | headers: {
32 | "Content-Type": "application/json",
33 | },
34 | });
35 | }
36 |
37 | export async function getStaticPaths() {
38 | const hash = await getAllHudsHash();
39 |
40 | return [{ params: { id: `${hash.substring(0, 8)}.cached` } }];
41 | }
42 |
--------------------------------------------------------------------------------
/src/pages/player-stats.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Body from "@components/Body.astro";
3 | import Footer from "@components/Footer.astro";
4 | import BaseHead from "@components/head/BaseHead.astro";
5 | import ImportHead from "@components/head/ImportHead.astro";
6 | import MainHead from "@components/head/MainHead.astro";
7 | import PreloadHead from "@components/head/PreloadHead.astro";
8 | import Layout from "@layouts/Layout.astro";
9 | ---
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/pages/quickplay/data/[id].json.ts:
--------------------------------------------------------------------------------
1 | import { getQuickplayData } from "@ssg/quickplayData";
2 |
3 | export async function GET() {
4 | const { quickplayData } = await getQuickplayData();
5 | return new Response(JSON.stringify(quickplayData), {
6 | status: 200,
7 | headers: {
8 | "Content-Type": "application/json",
9 | },
10 | });
11 | }
12 |
13 | export async function getStaticPaths() {
14 | const { hash } = await getQuickplayData();
15 |
16 | return [{ params: { id: `${hash.substring(0, 8)}.cached` } }];
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/quickplay/updates.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Body from "@components/Body.astro";
3 | import Footer from "@components/Footer.astro";
4 | import BaseHead from "@components/head/BaseHead.astro";
5 | import ImportHead from "@components/head/ImportHead.astro";
6 | import MainHead from "@components/head/MainHead.astro";
7 | import PreloadHead from "@components/head/PreloadHead.astro";
8 | import NavSelector from "@components/NavSelector.astro";
9 | import Layout from "@layouts/Layout.astro";
10 | import { Content as UpdatePost } from "../../posts/quickplay/updates.md";
11 | ---
12 |
13 |
14 |
15 |
16 |
17 |
18 |
22 |
23 |
24 |
51 |
52 | Quickplay Updates
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/pwa.ts:
--------------------------------------------------------------------------------
1 | import { registerSW } from "virtual:pwa-register";
2 |
3 | registerSW({
4 | immediate: true,
5 | onRegisteredSW(swScriptUrl) {
6 | console.log("SW registered: ", swScriptUrl);
7 | },
8 | onOfflineReady() {
9 | console.log("PWA application ready to work offline");
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/src/ssg/appData.ts:
--------------------------------------------------------------------------------
1 | import gm from "@utils/game.ts";
2 |
3 | import { fetchCache } from "./fetchCache";
4 |
5 | let appData = null;
6 |
7 | export async function sha256(str) {
8 | const buf = await crypto.subtle.digest(
9 | "SHA-256",
10 | new TextEncoder().encode(str),
11 | );
12 | return Array.from(new Uint32Array(buf))
13 | .map((b) => b.toString(16).padStart(2, "0"))
14 | .join("");
15 | }
16 |
17 | export async function getAppData() {
18 | if (!appData) {
19 | appData = await fetchCache(
20 | import.meta.env.COMFIG_API_URL ?? "https://api.comfig.app/",
21 | );
22 | }
23 |
24 | const hash = await sha256(JSON.stringify(appData));
25 |
26 | return {
27 | appData,
28 | hash,
29 | };
30 | }
31 |
32 | let hasInit = false;
33 |
34 | export async function getGameData() {
35 | if (!hasInit) {
36 | await gm.initGameData();
37 | hasInit = true;
38 | }
39 | const clientLanguageCache = {};
40 | for (const lang of Object.keys(gm.languageCache)) {
41 | const langCache = {};
42 | for (const playerClass of Object.keys(itemUsedBy)) {
43 | const classItems = itemUsedBy[playerClass];
44 | for (const item of classItems) {
45 | const itemData = gm.items[item];
46 | let key = itemData.printname;
47 | if (classNameToName[itemData.classname]) {
48 | key = classNameToName[itemData.classname];
49 | }
50 | if (Array.isArray(key)) {
51 | for (const k of key) {
52 | key = k.substring(1);
53 | langCache[key] = gm.languageCache[lang][key];
54 | }
55 | } else if (key.startsWith("#")) {
56 | key = key.substring(1);
57 | langCache[key] = gm.languageCache[lang][key];
58 | }
59 | }
60 | }
61 | clientLanguageCache[lang] = langCache;
62 | }
63 |
64 | const gameData = {
65 | languageCache: clientLanguageCache,
66 | items: gm.items,
67 | };
68 |
69 | const hash = await sha256(JSON.stringify(gameData));
70 |
71 | return {
72 | gameData,
73 | hash,
74 | };
75 | }
76 |
--------------------------------------------------------------------------------
/src/ssg/fetchCache.ts:
--------------------------------------------------------------------------------
1 | const apiCache = {};
2 |
3 | export async function fetchCache(...args) {
4 | if (import.meta.env.PROD) {
5 | return fetch(...args).then((res) => res.json());
6 | }
7 | const key = JSON.stringify(args);
8 | if (apiCache[key] && apiCache[key].expires > Date.now()) {
9 | return apiCache[key].data;
10 | }
11 | const res = await fetch(...args);
12 | if (res.status >= 500) {
13 | const text = await res.text();
14 | throw Error(text);
15 | }
16 | if (res.status >= 400) {
17 | const text = await res.text();
18 | console.error(args[0], text);
19 | return null;
20 | }
21 | const json = await res.json();
22 | apiCache[key] = {};
23 | apiCache[key].data = json;
24 | apiCache[key].expires = Date.now() + 1000 * 60 * 5;
25 | return json;
26 | }
27 |
28 | export async function fetchCacheText(...args) {
29 | if (import.meta.env.PROD) {
30 | return fetch(...args).then((res) => res.text());
31 | }
32 | const key = JSON.stringify(args);
33 | if (apiCache[key] && apiCache[key].expires > Date.now()) {
34 | return apiCache[key].data;
35 | }
36 | const res = await fetch(...args);
37 | if (res.status >= 500) {
38 | const text = await res.text();
39 | throw Error(text);
40 | }
41 | if (res.status >= 400) {
42 | const text = await res.text();
43 | console.error(args[0], text);
44 | return null;
45 | }
46 | const text = await res.text();
47 | apiCache[key] = {};
48 | apiCache[key].data = text;
49 | apiCache[key].expires = Date.now() + 1000 * 60 * 5;
50 | return text;
51 | }
52 |
53 | async function fetchWithTimeout(resource, options = {}) {
54 | const { timeout = 10000 } = options;
55 |
56 | const controller = new AbortController();
57 | const id = setTimeout(() => controller.abort(), timeout);
58 | const response = await fetch(resource, {
59 | ...options,
60 | signal: controller.signal,
61 | });
62 | clearTimeout(id);
63 | return response;
64 | }
65 |
66 | export async function fetchCacheTextWithTimeout(resource, options = {}) {
67 | if (import.meta.env.PROD) {
68 | try {
69 | const response = await fetchWithTimeout(resource, options);
70 | if (response.ok) {
71 | return response.text();
72 | }
73 | } catch {
74 | // Ignored
75 | }
76 | return null;
77 | }
78 | const key = JSON.stringify(arguments);
79 | if (apiCache[key] && apiCache[key].expires > Date.now()) {
80 | return apiCache[key].data;
81 | }
82 | let text = null;
83 | try {
84 | const res = await fetchWithTimeout(resource, options);
85 | if (res.ok) {
86 | text = await res.text();
87 | } else {
88 | if (res.status >= 500) {
89 | const text = await res.text();
90 | throw Error(text);
91 | }
92 | if (res.status >= 400) {
93 | const text = await res.text();
94 | console.error(resource, text);
95 | return null;
96 | }
97 | }
98 | } catch {
99 | // Ignored
100 | }
101 | apiCache[key] = {};
102 | apiCache[key].data = text;
103 | apiCache[key].expires = Date.now() + 1000 * 60 * 5;
104 | return text;
105 | }
106 |
--------------------------------------------------------------------------------
/src/ssg/hits.ts:
--------------------------------------------------------------------------------
1 | import { shuffle } from "@utils/shuffle";
2 |
3 | import hs from "./hitsounds.json";
4 |
5 | const seed = new Date().toLocaleDateString("en-US");
6 |
7 | export function getHitsounds(alpha?: boolean) {
8 | if (alpha) {
9 | return hs.hitsounds.sort((a, b) =>
10 | a.name.localeCompare(b.name, undefined, { ignorePunctuation: true }),
11 | );
12 | }
13 | return shuffle(hs.hitsounds, seed);
14 | }
15 |
16 | export function getKillsounds(alpha?: boolean) {
17 | if (alpha) {
18 | return hs.killsounds.sort((a, b) =>
19 | a.name.localeCompare(b.name, undefined, { ignorePunctuation: true }),
20 | );
21 | }
22 | return shuffle(hs.killsounds, seed);
23 | }
24 |
--------------------------------------------------------------------------------
/src/ssg/hudEditData.ts:
--------------------------------------------------------------------------------
1 | import { fetchCacheText } from "./fetchCache";
2 |
3 | const supportedHuds = [
4 | "berryhud",
5 | "budhud",
6 | "flawhud",
7 | "hexhud",
8 | "hud-fixes",
9 | "hypnotize-hud",
10 | "kbnhud",
11 | "m0rehud",
12 | "rayshud",
13 | "sunsethud",
14 | "zeeshud",
15 | ];
16 |
17 | export const sharedDataName = "shared-hud";
18 |
19 | const hudIdMap = {
20 | "hypnotize-hud": "hypnotizehud",
21 | };
22 |
23 | const baseDataUrl =
24 | "https://raw.githubusercontent.com/CriticalFlaw/TF2HUD.Editor/master/src/TF2HUD.Editor/JSON/";
25 |
26 | const hudDataUrl = (hud) => `${baseDataUrl}${hud}.json`;
27 |
28 | async function getEditData(hud) {
29 | const textData = await fetchCacheText(hudDataUrl(hud));
30 | // https://stackoverflow.com/a/62945875
31 | const data = JSON.parse(
32 | textData.replace(
33 | /\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g,
34 | (m, g) => (g ? "" : m),
35 | ),
36 | );
37 | return [hudIdMap[hud] ?? hud, data];
38 | }
39 |
40 | let hudEditData = null;
41 |
42 | export async function getHudEditData() {
43 | if (hudEditData) {
44 | return hudEditData;
45 | }
46 |
47 | const allDataPromises = supportedHuds.concat(sharedDataName).map(getEditData);
48 |
49 | const resolved = await Promise.all(allDataPromises);
50 | hudEditData = Object.fromEntries(resolved);
51 | return hudEditData;
52 | }
53 |
--------------------------------------------------------------------------------
/src/ssg/quickplayData.ts:
--------------------------------------------------------------------------------
1 |
2 | import { getImage } from "astro:assets";
3 |
4 | import { sha256 } from "./appData";
5 | import { fetchCache } from "./fetchCache";
6 |
7 |
8 | let quickplayData: any = null;
9 |
10 | export async function getQuickplayData() {
11 | if (!quickplayData) {
12 | const rawData = await fetchCache(
13 | `${import.meta.env.COMFIG_WORKER_URL ?? "https://worker.comfig.app/"}api/schema/get`,
14 | {
15 | method: "POST",
16 | },
17 | );
18 | const thumbnails = rawData.map_thumbnails;
19 | const newThumbnails = {};
20 | for (const [map, thumbnail] of Object.entries(thumbnails)) {
21 | if (!map || !thumbnail) {
22 | continue;
23 | }
24 | const optimizedImage = await getImage({
25 | src: thumbnail,
26 | inferSize: true,
27 | format: "webp",
28 | });
29 | newThumbnails[map] = optimizedImage.src;
30 | }
31 | quickplayData = {
32 | map_thumbnails: newThumbnails,
33 | };
34 | }
35 |
36 | const hash = await sha256(JSON.stringify(quickplayData));
37 |
38 | return {
39 | quickplayData,
40 | hash,
41 | };
42 | }
--------------------------------------------------------------------------------
/src/ssg/quickplayStaticData.ts:
--------------------------------------------------------------------------------
1 | import jumpImg from "@img/gamemodes/jump1.webp";
2 | import mvmImg from "@img/gamemodes/mvm.webp";
3 | import randomImg from "@img/gamemodes/random.webp";
4 | import workshopImg from "@img/gamemodes/workshop.webp";
5 |
6 | export function getDefaultMatchGroupSettings() {
7 | const availableSettings = {
8 | pvp: new Set([
9 | "maxplayers",
10 | "crits",
11 | "respawntimes",
12 | "rtd",
13 | "classres",
14 | "nocap",
15 | "pinglimit",
16 | "partysize",
17 | "mapbans",
18 | "gamemodes",
19 | ]),
20 | ws: new Set(["pinglimit", "partysize"]),
21 | pmvm: new Set(["pinglimit", "partysize"]),
22 | mge: new Set(["pinglimit", "partysize"]),
23 | jump: new Set(["pinglimit", "partysize"]),
24 | surf: new Set(["pinglimit", "partysize"]),
25 | };
26 | return availableSettings;
27 | }
28 |
29 | export function getDefaultMatchGroups() {
30 | const matchGroups = [
31 | {
32 | name: "Start Playing",
33 | code: "pvp",
34 | description: "We'll match you into the best casual game we can find.",
35 | skill: 0,
36 | img: randomImg.src,
37 | },
38 | {
39 | name: "Workshop Maps",
40 | code: "ws",
41 | description: "Test out and rate the latest maps from the community.",
42 | skill: 1,
43 | img: workshopImg.src,
44 | },
45 | {
46 | name: "Potato MvM",
47 | code: "pmvm",
48 | description:
49 | "Fight against murderous robots with custom upgrades and maps!",
50 | skill: 1,
51 | img: mvmImg.src,
52 | },
53 | {
54 | name: "MGE",
55 | code: "mge",
56 | description: "Settle who's best in this first-to-20, 1v1 arena format.",
57 | skill: 2,
58 | img: randomImg.src,
59 | },
60 | {
61 | name: "Jump",
62 | code: "jump",
63 | description:
64 | "Use your blast jumping skills to navigate through tutorials and courses.",
65 | skill: 2,
66 | img: jumpImg.src,
67 | },
68 | {
69 | name: "Surf",
70 | code: "surf",
71 | description:
72 | "Slide through a series of ramps and obstacles to complete each course.",
73 | skill: 2,
74 | img: randomImg.src,
75 | },
76 | ];
77 | return [matchGroups[0]];
78 | }
79 |
--------------------------------------------------------------------------------
/src/store/version.ts:
--------------------------------------------------------------------------------
1 | import { create } from "zustand";
2 |
3 | const useStore = create((set) => ({
4 | value: "latest",
5 | update: (v) => set({ value: v }),
6 | }));
7 |
8 | export default useStore;
9 |
--------------------------------------------------------------------------------
/src/styles/app.scss:
--------------------------------------------------------------------------------
1 | .download-progress {
2 | --bs-progress-height: 1px;
3 |
4 | margin-bottom: 1em;
5 | }
6 |
7 | #download-progress-status {
8 | margin-left: 1em;
9 | }
10 |
11 | .download-status-fill {
12 | margin-bottom: 1rem;
13 | }
14 |
15 | #preset-image {
16 | max-width: 100%;
17 | height: auto;
18 | max-height: 395px;
19 | }
20 |
21 | // Launch options
22 | #launch-options code {
23 | margin-top: 2px;
24 | margin-right: 0.5rem;
25 | }
26 |
27 | #launch-options > * {
28 | float: left;
29 | }
30 |
31 | #launch-options > .fas {
32 | margin-top: 5px;
33 | margin-right: 5px;
34 | }
35 |
36 | // Customize
37 | #customizations {
38 | background: rgb(255 255 255 / 10%);
39 | }
40 |
41 | // Modules
42 | .module-title {
43 | margin-top: 0.8rem !important;
44 | font-size: 1.3rem;
45 | }
46 |
47 | .module-category-title {
48 | margin-top: 1rem !important;
49 | font-size: 1.8rem;
50 | margin-left: 1rem;
51 | }
52 |
53 | .module-category {
54 | display: flow-root;
55 | }
56 |
57 | #modules-controls {
58 | height: 65vh;
59 | overflow: hidden scroll;
60 | position: relative;
61 | }
62 |
63 | #modules-controls.inset-box {
64 | padding: 0;
65 | }
66 |
67 | .module-row {
68 | padding: 0 0.5rem 0.5rem 1.5rem;
69 | transition:
70 | background 0.2s,
71 | box-shadow 0.2s;
72 | }
73 |
74 | .module-row:hover {
75 | background: mix(#000, #fff, 90%);
76 | box-shadow: 0 0 5px #000;
77 | }
78 |
79 | .inset-box {
80 | box-shadow: inset 0 0 5px #000;
81 | padding: 20px;
82 | }
83 |
84 | .fixed-inner {
85 | position: absolute;
86 | }
87 |
88 | #modules-sidebar {
89 | background: #fff1;
90 | padding-top: 0.2rem;
91 | }
92 |
93 | #modules-sidebar .nav {
94 | --bs-nav-link-color: #b2dfdb;
95 | }
96 |
97 | #modules-root .form-range {
98 | margin-bottom: -5px;
99 | }
100 |
101 | // Addon cards
102 | .addons-list-community-outer {
103 | margin-top: 1rem;
104 | }
105 |
106 | .addons-list-community > .row {
107 | display: flex;
108 | flex-wrap: nowrap;
109 | overflow-x: auto;
110 | min-height: 30vh;
111 | }
112 |
113 | .addons-list-community > .row > .col-4 {
114 | flex: 0 0 auto;
115 | }
116 |
117 | .addon-card {
118 | border: rgb(0 0 0 / 60%) 1px solid;
119 | }
120 |
121 | .addon-card.active {
122 | border: #009688 1px solid;
123 | }
124 |
125 | a.addon-card {
126 | color: #cbd3da !important;
127 | }
128 |
129 | a.addon-card:focus {
130 | color: #cbd3da !important;
131 | }
132 |
133 | a.addon-card.active,
134 | a.addon-card:hover {
135 | --bs-card-bg: #212529;
136 |
137 | color: #f8f9fa !important;
138 | }
139 |
140 | // Other downloads
141 | #blockMisc {
142 | margin-bottom: 2rem;
143 | }
144 |
145 | #collapseMiscButton {
146 | color: #a0a0a0;
147 | }
148 |
149 | // Collapse
150 | .collapse-wrapper {
151 | padding-bottom: 1px;
152 | }
153 |
154 | // Binds
155 | #binds-list {
156 | max-height: 30vh;
157 | width: 100%;
158 | overflow-y: auto;
159 | }
160 |
161 | // Item selection
162 | .crosshair-preview {
163 | aspect-ratio: 16 / 9;
164 | justify-content: center;
165 | align-items: center;
166 | }
167 |
168 | .crosshair-preview:hover {
169 | background: #fff !important;
170 | background-image: url('data:image/svg+xml;charset=utf-8,') !important;
171 | }
172 |
173 | .crosshair-preview-img {
174 | height: 64px;
175 | width: auto;
176 | }
177 |
178 | .explosion-preview-img {
179 | height: auto;
180 | width: 100%;
181 | }
182 |
183 | .preview-container {
184 | padding: 0;
185 | width: 100%;
186 | }
187 |
188 | .chrome-picker {
189 | font-family: var(--bs-body-font-family) !important;
190 | }
191 |
192 | .chrome-picker input {
193 | background-color: #f2f2f2;
194 | }
195 |
196 | .colorMask {
197 | mask-size: 100%; /* edges might get cut off if you use 100% */
198 | mask-repeat: no-repeat;
199 | mask-position: center;
200 | image-rendering: crisp-edges;
201 | image-rendering: -webkit-optimize-contrast;
202 | image-rendering: pixelated;
203 | }
204 |
205 | .colorMask > img {
206 | mix-blend-mode: multiply;
207 | }
208 |
209 | .MyDropdown__menu-list {
210 | scroll-behavior: auto;
211 | }
212 |
213 | .module-preview {
214 | width: 100%;
215 | }
216 |
--------------------------------------------------------------------------------
/src/styles/hits.scss:
--------------------------------------------------------------------------------
1 | .hs-dl {
2 | --bs-btn-padding-y: 1.1rem;
3 | }
4 |
5 | .hs-container {
6 | height: 64px;
7 | }
8 |
9 | .hs-container-mini {
10 | height: 32px;
11 | }
12 |
13 | .full-item .card-title {
14 | height: 36px;
15 | display: inline-block;
16 | white-space: nowrap;
17 | }
18 |
19 | .title-container {
20 | overflow: hidden;
21 | }
22 |
23 | .loading-bg {
24 | background: #999;
25 | }
26 |
--------------------------------------------------------------------------------
/src/styles/mde.scss:
--------------------------------------------------------------------------------
1 | .EasyMDEContainer .CodeMirror {
2 | color: var(--bs-body-color);
3 | border-color: var(--bs-border-color);
4 | background-color: var(--bs-backdrop);
5 | }
6 | .EasyMDEContainer .cm-s-easymde .CodeMirror-cursor {
7 | border-color: var(--bs-body-color);
8 | }
9 |
10 | .CodeMirror-cursor {
11 | border-left: 1px solid var(--bs-body-color);
12 | border-right: none;
13 | width: 0;
14 | }
15 |
16 | .EasyMDEContainer .editor-toolbar > * {
17 | border-color: var(--bs-body-bg);
18 | }
19 |
20 | .editor-toolbar {
21 | border-top: 1px solid var(--bs-border-color);
22 | border-left: 1px solid var(--bs-border-color);
23 | border-right: 1px solid var(--bs-border-color);
24 | }
25 |
26 | .editor-toolbar i.separator {
27 | border-left: 1px solid var(--bs-border-color);
28 | border-right: 1px solid var(--bs-border-color);
29 | }
30 |
31 | .EasyMDEContainer .editor-toolbar > .active,
32 | .editor-toolbar > button:hover,
33 | .editor-preview pre,
34 | .cm-s-easymde .cm-comment {
35 | background-color: var(--bs-body-bg);
36 | }
37 |
38 | .EasyMDEContainer .CodeMirror-fullscreen {
39 | background: var(--bs-body-bg);
40 | }
41 | .editor-toolbar.fullscreen {
42 | background: var(--bs-body-bg);
43 | }
44 |
45 | .editor-preview {
46 | background: var(--bs-body-bg);
47 | }
48 |
49 | .editor-preview-side {
50 | border-color: var(--bs-border-color);
51 | }
52 |
53 | .CodeMirror-selected {
54 | background: rgba(var(--bs-primary-rgb), 0.5);
55 | }
56 |
57 | .CodeMirror-focused .CodeMirror-selected {
58 | background: rgba(var(--bs-primary-rgb), 0.5);
59 | }
60 |
61 | .CodeMirror-line::selection,
62 | .CodeMirror-line > span::selection,
63 | .CodeMirror-line > span > span::selection {
64 | background: rgba(var(--bs-primary-rgb), 0.5);
65 | }
66 |
67 | .CodeMirror-line::-moz-selection,
68 | .CodeMirror-line > span::-moz-selection,
69 | .CodeMirror-line > span > span::-moz-selection {
70 | background: rgba(var(--bs-primary-rgb), 0.5);
71 | }
72 |
73 | .EasyMDEContainer .CodeMirror-focused .CodeMirror-selected {
74 | background: rgba(var(--bs-primary-rgb), 0.5);
75 | }
76 |
--------------------------------------------------------------------------------
/src/styles/quickplay.scss:
--------------------------------------------------------------------------------
1 | .quickplay-section {
2 | max-width: 100vw;
3 | }
4 |
5 | @media (min-width: 576px) {
6 | .carousel {
7 | height: calc(min(max(calc(95vh * 3 / 4), 33.75rem), calc(100vw * 3 / 4)) + 1rem);
8 | }
9 |
10 | .quickplay-container {
11 | min-width: min(85vh, 100vw);
12 | }
13 |
14 | .quickplay-section {
15 | width: max(95vh, 60rem);
16 | }
17 | }
18 |
19 | @media (min-width: 576px) {
20 | #gm-desc {
21 | margin-top: -3rem;
22 | }
23 | }
24 |
25 | .quickplay-carousel {
26 | background: #ece9d7
27 | }
28 |
29 | .carousel-item {
30 | transition: none !important;
31 | }
32 |
33 | .carousel-inner {
34 | height: 100%;
35 | }
--------------------------------------------------------------------------------
/src/utils/fastClone.ts:
--------------------------------------------------------------------------------
1 | import cloneDeep from "lodash/cloneDeep";
2 |
3 | export default function fastClone(obj) {
4 | return cloneDeep(obj);
5 | }
6 |
--------------------------------------------------------------------------------
/src/utils/globalStyles.ts:
--------------------------------------------------------------------------------
1 | const globalStyleSheetCache = {};
2 |
3 | export function getGlobalStyleSheets() {
4 | const page = window.location.toString();
5 | if (globalStyleSheetCache[page]) {
6 | return globalStyleSheetCache[page];
7 | }
8 | const globalSheets = Array.from(document.styleSheets).map((x) => {
9 | const sheet = new CSSStyleSheet();
10 | const css = Array.from(x.cssRules)
11 | .map((rule) => rule.cssText)
12 | .join(" ");
13 | sheet.replaceSync(css);
14 | return sheet;
15 | });
16 |
17 | globalStyleSheetCache[page] = globalSheets;
18 |
19 | return globalSheets;
20 | }
21 |
22 | export function addGlobalStylesToShadowRoot(shadowRoot: ShadowRoot) {
23 | shadowRoot.adoptedStyleSheets.push(...getGlobalStyleSheets());
24 | }
25 |
--------------------------------------------------------------------------------
/src/utils/idbstorage.ts:
--------------------------------------------------------------------------------
1 | import { del, get, set } from "idb-keyval";
2 |
3 | const idbStorage = (name, version, migrate, keys) => ({
4 | name: name,
5 | storage: {
6 | getItem: (key) => {
7 | const val = get(key);
8 | if (val === undefined) {
9 | return null;
10 | }
11 | return val;
12 | },
13 | setItem: set,
14 | removeItem: del,
15 | },
16 | version,
17 | migrate,
18 | partialize: (state) =>
19 | Object.fromEntries(
20 | Object.entries(state).filter(([key]) => keys.includes(key)),
21 | ),
22 | });
23 |
24 | export default idbStorage;
25 |
--------------------------------------------------------------------------------
/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | import hljs from "highlight.js/lib/core";
2 | import cpp from "highlight.js/lib/languages/cpp";
3 |
4 | export function homePage() {
5 | function updateBarWidth(id, width) {
6 | const el = document.getElementById(id);
7 | el.style.width = `${width}%`;
8 | el.style.willChange = "auto";
9 | }
10 |
11 | function updateBars(entries) {
12 | if (!entries[0].isIntersecting) {
13 | return;
14 | }
15 | updateBarWidth("mastercomfig-bar", 100);
16 | updateBarWidth("comanglia-bar", 91);
17 | updateBarWidth("m0re-bar", 90);
18 | updateBarWidth("chris-bar", 84);
19 | updateBarWidth("rhapsody-bar", 80);
20 | barsObserver.disconnect();
21 | }
22 |
23 | // If bars are visible, do an anim
24 | const barsObserver = new IntersectionObserver(updateBars, { threshold: 1.0 });
25 | barsObserver.observe(document.getElementById("mastercomfig-bar"));
26 |
27 | // Init customization example highlighting
28 | hljs.registerLanguage("cpp", cpp);
29 | hljs.highlightAll();
30 | }
31 |
--------------------------------------------------------------------------------
/src/utils/math.ts:
--------------------------------------------------------------------------------
1 | export function expOut(t: number) {
2 | if (t >= 1.0) return 1.0;
3 | return 1.0 - Math.pow(2.0, -10.0 * t);
4 | }
5 |
6 | export function easeIn(t: number) {
7 | return Math.pow(t, 1.1);
8 | }
9 |
10 | export function getGrad(t: number) {
11 | return 1.0 - expOut(t);
12 | }
13 |
--------------------------------------------------------------------------------
/src/utils/nonce.ts:
--------------------------------------------------------------------------------
1 | export function getNonce() {
2 | if (typeof document === "undefined") {
3 | return "";
4 | }
5 | const cspNonce =
6 | document.querySelector("meta[property=csp-nonce]")
7 | ?.nonce ?? "";
8 |
9 | return cspNonce;
10 | }
11 |
--------------------------------------------------------------------------------
/src/utils/quickplay.ts:
--------------------------------------------------------------------------------
1 | export const MIN_PLAYER_CAP = 18;
2 | export const MAX_PLAYER_OPTIONS = [
3 | [24, 24], // Default
4 | [24, 32], // 24-32
5 | [MIN_PLAYER_CAP, 32], // 18-32
6 | [64, 100], // Any large
7 | [MIN_PLAYER_CAP, 100], // Don't care
8 | ];
9 | export function getMaxPlayerIndex(setting) {
10 | let status = 0;
11 | for (const option of MAX_PLAYER_OPTIONS) {
12 | if (setting[0] === option[0] && setting[1] === option[1]) {
13 | break;
14 | }
15 | status++;
16 | }
17 | return status;
18 | }
19 |
--------------------------------------------------------------------------------
/src/utils/shuffle.ts:
--------------------------------------------------------------------------------
1 | import clone from "lodash/clone";
2 | import seedrandom from "seedrandom";
3 |
4 | export function shuffle(originalArray: Type[], seed: string): Type[] {
5 | const random = seedrandom(seed);
6 |
7 | const array = clone(originalArray);
8 |
9 | let index = -1;
10 | const length = array.length;
11 | const lastIndex = length - 1;
12 |
13 | while (++index < length) {
14 | const rand = index + Math.floor(random() * (lastIndex - index + 1));
15 | const old = array[index] as Type;
16 | const value = array[rand] as Type;
17 | array[rand] = old;
18 | array[index] = value;
19 | }
20 |
21 | return array;
22 | }
23 |
--------------------------------------------------------------------------------
/src/utils/tson.ts:
--------------------------------------------------------------------------------
1 | import { Typeson } from "typeson";
2 | import { set } from "typeson-registry";
3 |
4 | const TSON = new Typeson().register([set]);
5 |
6 | export function parse(text: string) {
7 | return TSON.parse(text);
8 | }
9 |
10 | export function stringify(obj: any) {
11 | return TSON.stringify(obj);
12 | }
13 |
14 | export default {
15 | parse,
16 | stringify,
17 | };
18 |
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | export default {
4 | content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
5 | theme: {
6 | extend: {},
7 | },
8 | plugins: [],
9 | } satisfies Config;
10 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "astro/tsconfigs/strictest",
3 | "compilerOptions": {
4 | "jsx": "react-jsx",
5 | "verbatimModuleSyntax": true,
6 | "noImplicitAny": false,
7 | "baseUrl": ".",
8 | "paths": {
9 | "@components/*": ["src/components/*"],
10 | "@layouts/*": ["src/layouts/*"],
11 | "@styles/*": ["src/styles/*"],
12 | "@utils/*": ["src/utils/*"],
13 | "@store/*": ["src/store/*"],
14 | "@ssg/*": ["src/ssg/*"],
15 | "@img/*": ["src/img/*"]
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------