From 14ebc49717022ab8714d2f5c050cf4c0513c2aa9 Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Thu, 20 Feb 2025 18:48:22 +0100 Subject: [PATCH 01/10] Complete overhaul The original docs were written over a year ago and were out of date in a few places. --- .vitepress/config.mts | 106 ++++++++++++++++++------------------ docs/gokz/index.md | 17 ++++++ docs/index.md | 47 ++++++++++++---- docs/mapping/approval.md | 113 ++++++++++++++++++++++++++++++++++----- docs/mapping/index.md | 50 +++++++++++++++++ docs/modes/index.md | 24 +++++++++ docs/ranking/index.md | 43 +++++++++++++++ docs/servers/approval.md | 38 +++++++++++++ docs/servers/index.md | 5 ++ docs/styles/index.md | 15 ++++++ docs/systems/maps.md | 81 ---------------------------- docs/systems/modes.md | 41 -------------- docs/systems/points.md | 44 --------------- docs/systems/styles.md | 16 ------ 14 files changed, 383 insertions(+), 257 deletions(-) create mode 100644 docs/gokz/index.md create mode 100644 docs/mapping/index.md create mode 100644 docs/modes/index.md create mode 100644 docs/ranking/index.md create mode 100644 docs/servers/approval.md create mode 100644 docs/servers/index.md create mode 100644 docs/styles/index.md delete mode 100644 docs/systems/maps.md delete mode 100644 docs/systems/modes.md delete mode 100644 docs/systems/points.md delete mode 100644 docs/systems/styles.md diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 55e05d5..9ae4419 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -15,23 +15,68 @@ export default defineConfig({ metaChunk: true, themeConfig: { - nav: nav(), + nav: [ + { + text: "Stats", + link: "https://cs2kz.org", + }, + { + text: "Dashboard", + link: "https://dashboard.cs2kz.org", + }, + { + text: "API", + link: "/api/", + }, + ], + sidebar: { - "/": sidebar(), - "/api/": [ + "/": [ + { + items: [ + { text: "Modes", link: "/modes" }, + { text: "Styles", link: "/styles" }, + { text: "Mapping", link: "/mapping" }, + { text: "Servers", link: "/servers" }, + { text: "Ranking", link: "/ranking" }, + ], + }, { - text: "Introduction", - link: "/api/", + text: "Mapping", + items: [ + { text: "Approval Process", link: "/mapping/approval" }, + { text: "Discord", link: "https://discord.gg/R593VhE" }, + ], }, { - text: "Problems", - link: "/api/problems", + text: "Servers", + items: [ + { text: "Approval Process", link: "/servers/approval" }, + { text: "LAN Setup", link: "/servers/lan" }, + ], }, { - text: "Explorer", - link: "/api/explorer", + text: "Resources", + items: [ + { text: "Differences from GOKZ", link: "/gokz" }, + { text: "GlobalAPI Documentation", link: "/api" }, + ], }, ], + "/mapping/": [ + { text: "Terminology", link: "/mapping/" }, + { text: "Approval Process", link: "/mapping/approval" }, + { text: "Discord", link: "https://discord.gg/R593VhE" }, + ], + "/servers/": [ + { text: "Approval Process", link: "/servers/approval" }, + { text: "LAN Setup", link: "/servers/lan" }, + ], + "/api/": [ + { text: "Introduction", link: "/api/" }, + { text: "Explorer", link: "/api/explorer" }, + { text: "Problems", link: "/api/problems" }, + ], }, socialLinks: [ @@ -45,46 +90,3 @@ export default defineConfig({ }, }, }); - -function nav(): DefaultTheme.NavItem[] { - return [ - { - text: "API", - link: "/api/", - }, - { - text: "Dashboard", - link: "https://dashboard.cs2kz.org", - }, - { - text: "Stats", - link: "https://cs2kz.org", - }, - ]; -}; - -function sidebar(): DefaultTheme.SidebarItem[] { - return [ - { - text: "Systems", - items: [ - { text: "Modes", link: "/systems/modes" }, - { text: "Maps", link: "/systems/maps" }, - { text: "Points", link: "/systems/points" }, - { text: "Styles", link: "/systems/styles" }, - ], - }, - { - text: "Servers", - items: [ - { text: "LAN Server Setup", link: "/servers/lan" }, - ], - }, - { - text: "Creator resources", - items: [ - { text: "Map Approval Process", link: "/mapping/approval" }, - ], - }, - ]; -}; diff --git a/docs/gokz/index.md b/docs/gokz/index.md new file mode 100644 index 0000000..6205e23 --- /dev/null +++ b/docs/gokz/index.md @@ -0,0 +1,17 @@ +# Differences from GOKZ + +As CS2 has replaced CS:GO, CS2KZ is now supposed to (more or less) replace +[GOKZ](https://github.com/KZGlobalTeam/gokz). + +While CS:GO, and therefore GOKZ, is still playable, actually playing requires +work-arounds and it is unclear for how long this house of cards will hold up +going into the future. The people working on CS2KZ have spent a considerable +amount of time in the CS:GO KZ community both as players and developers, and as +such we are taking previous experiences into account when it comes to working +on CS2KZ. What it does **not** mean is that we intend to replicate GOKZ 1:1 in +CS2. A lot of things are *different*, and whether you like that is up to you. + +Below you can find a list of important differences that you might want to know +about if you are a CS:GO KZ player discovering CS2KZ: + +- TODO diff --git a/docs/index.md b/docs/index.md index daeaac9..dfb1cc8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,22 +1,49 @@ --- title: Home -description: Home page --- # Welcome to CS2KZ -CS2KZ is a skill-based mod for Counter-Strike 2 where players complete challenging obstacle courses that test their precision, speed, and movement skills. Compete against yourself or others, improve your abilities, and climb the ranks as you master each course. +CS2KZ is a skill-based mod for Counter-Strike 2 where players complete +challenging obstacle courses that test their precision, speed, and movement +skills. Compete against yourself or others, improve your abilities, and climb +the ranks as you master each course. -## Systems +## 2 Modes -- [Modes](/systems/modes) -- [Maps](/systems/maps) -- [Points](/systems/points) -- [Styles](/systems/styles) +CS2KZ features two different game modes: +[Vanilla](/modes#vanilla) and [Classic](/modes#classic) -## Servers +[Vanilla](/modes#vanilla) resembles the default movement experience you would +also get in regular matchmaking, while [Classic](/modes#classic) is closer to +what most people would expect when they think of KZ. -- [LAN Server Setup](/servers/lan) +## Styles + +Different [styles](/styles) allow you to customize gameplay independent of +modes. + +## The Global Map Pool + +An [official list of maps](https://cs2kz.org/maps) for you to play and +contribute to! + +See [the guidelines](/mapping/approval) for how to submit your own maps. + +## Global Servers -## Creator resources +An [offical list of servers](https://cs2kz.org/servers) for you to play on! +See [the guidelines](/servers/approval) for how to get your own server. + +## Player Ratings + +Competing will award you [points](ranking#points) on each leaderboard and +contributes to your overall [player rating](ranking#rating). + +## Resources + +- [LAN Server Setup](/servers/lan) +- [Server Approval Process](/servers/approval) - [Map Approval Process](/mapping/approval) +- [GlobalAPI Documentation](/api) +- [Differences from GOKZ](/gokz) diff --git a/docs/mapping/approval.md b/docs/mapping/approval.md index 7b3f66b..162fbc6 100644 --- a/docs/mapping/approval.md +++ b/docs/mapping/approval.md @@ -1,20 +1,107 @@ -# Map approval process +# Map Approval -The map approval process structure will closely resemble GOKZ, with a few key details still to be finalized: +If you want your own map to become part of +[the official map pool](https://cs2kz.org/maps), you need +[permission](#acquiring-permission) to do so, +[submit it for approval](#creating-a-map), and make sure it follows +[the rules](#rules). -## 1. Submission +## Acquiring Permission -- **Uploading:** Mappers submit their maps via the [CS2 Steam Workshop](https://steamcommunity.com/app/730/workshop). -- **Course Requirements:** Each map must contain at least one course with a filter of tier 8 or lower, to be considered for ranking. +>[!NOTE] +> This step only has to be performed *once*; not for every map. -## 2. Review +Visit [the forum](https://forum.cs2kz.org) and create a new post in the "Map +Approval" category with the "Approval Permission" tag. The post should include +a link to your Steam profile and a short introduction about who you are, your +connection to KZ, and whether you have any existing maps (ideally on your +workshop). -- **Approval Team:** A group of experienced KZ community members will review the map. They are responsible for evaluating the course -difficulty, ranking potential, and adherence to community standards. -- **Objective Evaluation:** Maps will be assessed on objective metrics such as difficulty, design, and gameplay quality. -- **Subjective Evaluation:** The team will also consider whether the course is "reasonable to compete on," allowing for some flexibility and creative expression in map design. +>[!NOTE] +> This post will be private between you and the map approval team. -## 3. Publication +Once you have been accepted, you can log into +[the dashboard](https://dashboard.cs2kz.org) and submit maps. Please keep in +mind that this is a **privilege** and that if you break any rules or otherwise +abuse your power, it will be taken away from you. -- Once approved, the map is added to the global KZ pool. It will then be available for players to compete on in ranked or unranked settings, - depending on the course's filter. +## Creating a Map + +Once you have created a map (in Hammer), you may also create it on +[the dashboard](https://dashboard.cs2kz.org). Maps will transition between +[different states](#map-states) over time, and newly created maps start out in +the "WIP" state. + +### Map States + +Newly submitted maps will start out in the "WIP" state. In this state you can +gather player feedback, for example by making a forum post and/or joining +[the Mapping Discord](https://discord.gg/R593VhE). While players _can_ submit +records during this phase, leaderboards will be reset whenever the map is +updated. + +>[!NOTE] +> In order to update a map you have to update it both on the workshop and the +> dashboard. + +If a map remains without updates for ~2 months it will transition into the +"Graveyard" state where it will remain until you update it again. + +Once you are happy with your creation you may submit it for approval. You do +this by updating its state to "Submitted" on the dashboard and then creating +another forum post in the "Map Approval" category with the "Submission" tag. + +>[!NOTE] +> This post will be publicly visible, but only you and the map approval team +> will be able to comment on it. + +>[!WARNING] +> Once your map is in the "Submitted" state, you will no longer be able to +> update it. + +If your map is accepted it will transition into the "Approved" state where it +will remain frozen. + +If your map is rejected it will transition back into the "WIP" state and you +can choose to either continue your work on it and re-submit for approval, or +leave it as is. If you decide that your map is complete, and you don't want it +to disappear into the sea of "Graveyard" maps, you can update its state on the +dashboard to "Complete". This will, just like "Approved", freeze your map from +further updates, but it will be more visible to players searching for new maps +to play. + +## Rules + +- At least one course must be present on the map. +- At least one filter must have the goal of being ranked. +- A display of effort and quality + - fully textured + - good lighting and visibility + - performance optimizations + - reasonable file size +- A "jumpstats" area featuring LJ blocks from 210-280, in increments of 10 +- Discriminatory, obscene, or sexually explicit content are **strictly + prohibited**. +- Any course with filters intended to be ranked must be completed at least once + on said filter while the map is in the WIP state. +- Avoid inconsistent mechanics like moving platforms or time-based events. +- Avoid "pre-run setups" like breakable objects or doors which do not open + automatically. + +In addition, the *name* of your maps must start with `kz_` and can only contain +ASCII alphanumeric characters (and underscores). It should be easily +distinguishable from other maps. + +Course names follow the same rules except that they should **not** have the +`kz_` prefix. + +## Porting + +Map "porting" refers to the process of taking an existing map, for example from +CS:GO, and updating it to CS2. There are extra rules for these maps: + +- Either you are the original mapper, or the original mapper must give you + explicit permission to port their map. + - If you are not the original mapper, the original mapper has been inactive + for 2+ years, and you have made honest attempts to conatact them (but + failed) you may also be allowed to port their maps. diff --git a/docs/mapping/index.md b/docs/mapping/index.md new file mode 100644 index 0000000..b06e364 --- /dev/null +++ b/docs/mapping/index.md @@ -0,0 +1,50 @@ +# Mapping + +A KZ "map" refers to a CS2 map that contains one or more ["courses"](#courses). +Every map is uploaded to the +[Steam Workshop](https://steamcommunity.com/app/730/workshop) and registered to +the [GlobalAPI](/api/explorer#tag/maps). You can find the official map list on +[our website](https://cs2kz.org/maps). + +## Courses + +A "course" is a section of the map that has a start and end zone. For each +course there are two ["filters"](#course-filters) that determine its +difficulty. + +### Course Filters + +A "course filter" is a set of attributes that are applied to courses on +a per-mode basis. More specifically: + +- a [Tier](#tiers) +- whether it is ranked + - "unranked" means the filter is not ranked and never will be (e.g. because + the mapper requested so). + - "pending" means the filter is not currently ranked, for example because it + was determined too difficult for the given mode. It may however *become* + ranked later if a player manages to beat it. + - "ranked" means the filter is ranked and will award points for competing. + +### Tiers + +We judge the difficulty of a course in a given mode by placing it into one of +ten different **tiers**: + +1. "Very Easy" - an average CS2 player who has never touched KZ before is able + to complete the course +2. "Easy" - a new KZ player who has just learned movement basics like air + strafing and bunny hopping is able to complete the course +3. "Medium" - more difficult than T2 but without introducing new concepts +4. "Advanced" - more advanced concepts like surf and ladders but still on + a basic level +5. "Hard" - even more advanced concepts and more niche mechanics like box-tech, + tightly timed sections, wall strafing, prekeep, etc. +6. "Very Hard" - more difficult than T5 but without introducing new concepts +7. "Extreme" - features the most advanced mechanics +8. "Death" - T7 but harder +9. "Unfeasible" - special tier for courses that are *technically* possible, but + unlikely to be done by humans without TAS (Tool-Assisted Speedrun) tools +10. "Impossible" - special tier for courses that are *literally* impossible; + even with perfect inputs (generally reserved for VNL filters on courses + intended for CKZ) diff --git a/docs/modes/index.md b/docs/modes/index.md new file mode 100644 index 0000000..7d367d5 --- /dev/null +++ b/docs/modes/index.md @@ -0,0 +1,24 @@ +# CS2KZ Modes + +CS2KZ features two *official* modes (you can make your own!). You can switch +your mode using the `!vnl` and `!ckz` commands. + +## Vanilla + +The "Vanilla" (or "VNL") mode is supposed to resemble the default CS2 gameplay, +as you would experience it in matchmaking. This means you can play VNL to +practice your movement on the side, even if you're not mainly a KZ player. Any +oddities or inconsistencies with this mode that are also found in the regular +game will **not** be "fixed" or removed; the intention is to be as close as +possible to the real™️ CS2 experience. + +## Classic + +The "Classic" (or "CKZ") mode is supposed to have heavily modified gameplay, +which means higher air acceleration, consistent bunny hopping, pre-strafing, +and more. If you've played a previous iteration of KZ, this is probably the +mode you want to play! + +A list of detailed changes can be found below: + +- TODO diff --git a/docs/ranking/index.md b/docs/ranking/index.md new file mode 100644 index 0000000..bfbc3ab --- /dev/null +++ b/docs/ranking/index.md @@ -0,0 +1,43 @@ +# Ranking + +You can compare yourself to other players on two scales: per leaderboard and +overall + +Within each leaderboard every record is awarded an amount of [points](#points). +All points you gain from all ranked leaderboards will culminate in your [player +rating](#rating). + +## Points + +Every record on a ranked filter is awarded a value between `0` and `10,000`. +The fastest record will always be worth `10,000` points. Depending on the tier +of the filter, every record will also have a minimum amount of points. + +| Tier | Minimum Points (NUB) | Minimum Points (PRO) | +|------|----------------------|----------------------| +| 1 | 0 | 1,000 | +| 2 | 500 | 1,450 | +| 3 | 2,000 | 2,800 | +| 4 | 3,500 | 4,150 | +| 5 | 5,000 | 5,500 | +| 6 | 6,500 | 6,850 | +| 7 | 8,000 | 8,200 | +| 8 | 9,500 | 9,550 | + +The final value depends on how well you do compared to everyone else. + +## Rating + +All points you achieve on ranked filters are sorted and summed up with +a modifier applied to each value. + +The following python code illustrates the algorithm: + +```python +# `records` are sorted by points in descending order +def calculate_rating(records): + rating = 0 + for n, record in enumerate(records): + rating += record["points"] * (0.975 ** n) + return rating +``` diff --git a/docs/servers/approval.md b/docs/servers/approval.md new file mode 100644 index 0000000..adad4ed --- /dev/null +++ b/docs/servers/approval.md @@ -0,0 +1,38 @@ +# Server Approval + +You can create new servers on [the dashboard](https://dashboard.cs2kz.org). +Each user has a "server budget", or in other words: an amount of servers they +can create. + +Everyone starts out with a budget of 0, and the budget is managed +manually. This may change in the future, but for now, you have to explicitly +ask either on [the forum](https://forum.cs2kz.org) or +[our Discord server](https://discord.gg/csgokz) if you want your own CS2KZ +server. + +Once you have created a server, it will be assigned its own API Key. This key +can be placed into your server's configuration file to active the connection to +the GlobalAPI. + +## Rules + +If you are a server owner, there are certain rules you will have to follow. If +you fail to do so, servers may be taken away from you, and we will be more +critical when it comes to increasing your server budget. + +- Your server must run + [an official release](https://github.com/KZGlobalTeam/cs2kz-metamod/releases) + of [`cs2kz-metamod`](https://github.com/KZGlobalTeam/cs2kz-metamod). +- Your server must **not** run *any other* plugins that modify movement in + *any* way. +- You must **not** use your server's API Key for anything but that server. This + includes but is not limited to: + - using the key for multiple servers + - using the key for authenticating with the API manually + - sharing the key with someone else +- Your server must have consistent uptime. If your server is offline too much, + its API Key will be taken away. +- Your server must be accessible to the administration of CS2KZ at all times, + should manual inspection be necessary. +- Your server's name or branding must **not** include any discriminating, + obscene, or sexually explicit terms. diff --git a/docs/servers/index.md b/docs/servers/index.md new file mode 100644 index 0000000..76ef859 --- /dev/null +++ b/docs/servers/index.md @@ -0,0 +1,5 @@ +# Servers + +KZ servers are community servers running the +[`cs2kz-metamod`](https://github.com/KZGlobalTeam/cs2kz-metamod) plugin. There +is a list of approved servers on . diff --git a/docs/styles/index.md b/docs/styles/index.md new file mode 100644 index 0000000..57fe638 --- /dev/null +++ b/docs/styles/index.md @@ -0,0 +1,15 @@ +# Styles + +"styles" are modifications to gameplay that are applied on top of your +[mode](/modes). They are also additive, which means you can apply as many as +you want at the same time. Runs with styles do not award +[points](/ranking#points) or contribute to your +[player rating](/ranking#rating). Currently CS2KZ only features a single style, +but just like with modes, you can make your own! + +Below you can find a detailed list of all official styles. + +## AutoBhop + +The "AutoBhop" (or "ABH") style will allow you to hold your `+jump` key (the +space key by default) and get perfect bunny hops 100% of the time. diff --git a/docs/systems/maps.md b/docs/systems/maps.md deleted file mode 100644 index 762820a..0000000 --- a/docs/systems/maps.md +++ /dev/null @@ -1,81 +0,0 @@ -# Maps - -Maps and everything surrounding them will be quite different in CS2KZ compared -to GOKZ. The most important changes include: - -- Instead of the original 7 difficulty tiers we now have 10. -- Instead of a "main" course and 0 or more "bonus" courses we will just have "courses". -- Each course will have 4 "filters" applied to it. Each filter consists of a - [mode](/systems/modes), whether teleports are allowed, a tier, and "ranked" status. -- Every submitted record will be stored, independent of filters, but only - records that correspond to a "ranked" filter will contribute to a player's overall rank. - -## Tiers - -The new tiering system consists of 10 different tiers: - -> [!NOTE] -> These are best-effort descriptions, not hard rules. They are meant to illustrate the key ideas, -> not to be interpreted literally. - -1. Very Easy - for the average player who has never touched KZ before -2. Easy - you grasp the basics of CS2 movement, like airstrafing and bhopping -3. Medium - you have some KZ experience and are comfortable with the basics -4. Advanced - you are comfortable with strafing, bhopping, surfing, and ladder - movement -5. Hard - you have played quite a bit of KZ now and are comfortable combining - the above techniques -6. Very Hard - tier 5 but harder -7. Extreme - you can KZ in your sleep and are competing for World Records -8. Death - you have mastered KZ and can complete the most difficult of maps -9. Unfeasible - technically possible, but probably not by humans; reserved for - TAS runs -10. Impossible - literally and technically impossible, even with perfect inputs - -Unlike in GOKZ, tiers will not be applied to maps anymore, but rather to -[Filters](#filters). - -## Courses - -Each map in CS2KZ consists of one or more "courses." A course is a segment of gameplay - defined by a start and an end zone. Unlike GOKZ, CS2KZ eliminates the distinction between - "main" and "bonus" courses—there are simply courses. - -To have a [map approved](/mapping/approval), mappers must meet a minimum quality standard (not yet defined). To balance creativity with fair competition, CS2KZ introduces the concept - of "ranked" filters. This allows for diverse course types: - -- High-quality, high-effort courses (formerly "main" courses in GOKZ) designed for competitive play. -- Fun or experimental courses (previously "bonus" courses) that offer more creative gameplay. - -For a filter to be ranked, it must: - -- Be a tier of 8 or lower. -- Be "reasonable to compete on" (a subjective standard to be further clarified later in development). - -## Filters - -In CS2KZ, each course has a filter which represents a unique combination of mode, - teleport settings, difficulty tier, and "ranked" status. Filters create different variations of a course, providing players with distinct challenges and aligning the course with the appropriate difficulty level. - -### Key Components of a Filter - -1. **Mode** - This defines how the course is played (either [CKZ](/systems/modes#Classic) or [VNL](/systems/modes#Vanilla)) -2. **Teleport Settings** - Whether or not teleports are allowed in the course -3. **Tier** - Each Filter will have a [tier](#tiers), which indicates the difficulty level of the filter, determined - by the course’s complexity and challenge. Filters can range from Tier 1 (Very East) to Tier 10 (Impossible). -4. **Ranked Status** - This indicates whether the filter is ranked or unranked. - -#### Example Filter - -- **Map:** kz_example_map, course 3 -- **Mode:** CKZ -- **Teleport Setting:** No teleports -- **Tier:** 4 -- **Ranked Status:** Ranked - - -Filters will evolve over time as the skill ceiling of KZ grows and new boundaries are reached. We aim to create a system that allows the community to have input in making changes when needed, while ensuring **no data is lost.** -So go and play what you enjoy! - -> [!NOTE] -> Only records from ranked filters will contribute to a player's overall rank and award points. This ensures a fair competitive environment while giving mappers the freedom to create diverse courses. diff --git a/docs/systems/modes.md b/docs/systems/modes.md deleted file mode 100644 index 3939419..0000000 --- a/docs/systems/modes.md +++ /dev/null @@ -1,41 +0,0 @@ -# Modes - -Similar to [GOKZ](https://github.com/KZGlobalTeam/gokz) there are two modes you -can choose to play. - -## Vanilla - -The "Vanilla" (VNL) mode is the standard CS2 experience. - -The goal is to preserve as much of the default movement mechanics as possible -while only providing quality of life adjustments. - -This means no movement related settings are changed and the gameplay should feel -exactly like standard matchmaking. - -## Classic - -> [!NOTE] -> The name "Classic" is not final and is still under discussion, but it -> has gained popularity in the community and may become the official name. - -The "Classic" (CKZ) mode is the spiritual successor of SKZ. - -The goal is to make KZ more skill-based than RNG-based. - -- Bhopping is consistent with good scroll-timing. -- Bhop speed depends on landing speed. - -Players found that SKZ felt slow (~270 speed while bhopping), while consistently reaching -380u/s was difficult and annoying on most maps. CKZ addresses this with a **logarithmic speed formula**: - -- Higher initial speed gains compared to SKZ. -- Diminishing returns as speed increases, preventing absurd speeds but allowing fast-paced gameplay (~300 pre). -- No hard cap on speed, but building infinite speed isn’t possible. - -We also want to keep popular mechanics such as pre-keep and "WAD" / "our father tech" -in the new mode, which are not part of SKZ. - -KZT and SKZ were very similar, yet so different. We want to keep a single -heavily modified mode that everyone can enjoy and compete in. - diff --git a/docs/systems/points.md b/docs/systems/points.md deleted file mode 100644 index 52ac116..0000000 --- a/docs/systems/points.md +++ /dev/null @@ -1,44 +0,0 @@ -# Points & Rank - -In CS2KZ, players earn points by completing courses and achieving faster times across different modes and filters. -As players accumulate points, they advance through different ranks which reflect greater KZ skill. - -## Types of Points - -There are two types of points that are awarded in CS2KZ: - -### 1. Filter Points - -These points are tied to a specific [Filter](/systems/maps#filters) applied to a course and measure a player’s performance on that particular combination of map, mode, and settings. - -- **Max Points Per Filter:** The world record (WR) holder for a filter earns the maximum of 10,000 points. Players with slower times earn fewer points based on their performance -relative to the WR and the rest of the player base that has completed the filter - -- **Purpose:** Filter points indicate how skilled a player is at a specific map, mode, and filter combination. - -### 2. Player Points - -A player’s overall rating, or **Player Points**, is determined by a weighted sum of the points they’ve earned across **all** ranked filters. - -- **Rank Contributions:** Points from harder filters and better performances have more influence on the player’s rating, ensuring rankings reflect skill rather than sheer volume of completed maps. -- **Purpose:** Player points indicate general KZ proficiency and are used to determine rank tiers. - -## How Points are Calculated - -The amount of points rewarded after completing a map is based on the following: - -- **Course Difficulty:** More difficult courses yield higher point rewards. The difficulty of a course is tied to its filter's tier. -- **Performance:** Faster completion times and improved performance on a course will result in more points. -- **Filter Type:** Refers to the overall characteristics of the filter, such as teleport settings and other conditions. The more challenging the filter type, the more points are awarded. - -## Rank - -In CS2KZ, a player’s rank is determined by the total points accumulated through their performances in ranked filters. As players complete - courses and improve their times, they will earn points, which contribute to their overall rank. - -### Rank Tiers -Players progress through ranks based on their total points, with each rank representing a skill milestone. For example: - -- Noob: 0 - 999 Points -- Intermediate: 1,000 - 4,999 Points -- Pro: 5,000 - 14,999 Points \ No newline at end of file diff --git a/docs/systems/styles.md b/docs/systems/styles.md deleted file mode 100644 index 2a88568..0000000 --- a/docs/systems/styles.md +++ /dev/null @@ -1,16 +0,0 @@ -# Styles - -Styles in CS2KZ are optional modifiers that alter gameplay, offering creative and fun ways to explore maps beyond ranked competition. They don’t affect leaderboards or ranks but let players experiment, practice, or take on new challenges. - -## Examples of styles - -- Auto Bhop -- W/S-Only -- Low Gravity -- A/D-Only -- Ice - -
- -> [!NOTE] -> Currently only Auto Bhop is implemented, however, other styles are planned to be relesaed further in development \ No newline at end of file From 106a0536a86be592a32c049660ec1a57605cd2dd Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Thu, 20 Feb 2025 19:21:43 +0100 Subject: [PATCH 02/10] Make wording on map rules more clear --- docs/mapping/approval.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/mapping/approval.md b/docs/mapping/approval.md index 162fbc6..c50cb63 100644 --- a/docs/mapping/approval.md +++ b/docs/mapping/approval.md @@ -72,6 +72,8 @@ to play. ## Rules +Rules that apply to every map: + - At least one course must be present on the map. - At least one filter must have the goal of being ranked. - A display of effort and quality @@ -84,6 +86,9 @@ to play. prohibited**. - Any course with filters intended to be ranked must be completed at least once on said filter while the map is in the WIP state. + +Rules that apply to courses with ranked filters specifically: + - Avoid inconsistent mechanics like moving platforms or time-based events. - Avoid "pre-run setups" like breakable objects or doors which do not open automatically. @@ -98,10 +103,8 @@ Course names follow the same rules except that they should **not** have the ## Porting Map "porting" refers to the process of taking an existing map, for example from -CS:GO, and updating it to CS2. There are extra rules for these maps: - -- Either you are the original mapper, or the original mapper must give you - explicit permission to port their map. - - If you are not the original mapper, the original mapper has been inactive - for 2+ years, and you have made honest attempts to conatact them (but - failed) you may also be allowed to port their maps. +CS:GO, and updating it to CS2. If you plan on porting a map and submitting it, +and you are not the original mapper, you must get permission from the original +mapper to port their map. If the original mapper has been inactive for 2 years +or longer, and you have made honest (but unsuccessful) attempts to contact +them, you may submit your port anyway. From 37509aece4aaebe41fb15ea79e727a9931f8e627 Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Thu, 20 Feb 2025 20:18:36 +0100 Subject: [PATCH 03/10] Be even more clear on wording --- docs/mapping/approval.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/mapping/approval.md b/docs/mapping/approval.md index c50cb63..1fe7d08 100644 --- a/docs/mapping/approval.md +++ b/docs/mapping/approval.md @@ -82,6 +82,8 @@ Rules that apply to every map: - performance optimizations - reasonable file size - A "jumpstats" area featuring LJ blocks from 210-280, in increments of 10 + - There must be a trigger that allows for teleporting to this area via + `!lj`. - Discriminatory, obscene, or sexually explicit content are **strictly prohibited**. - Any course with filters intended to be ranked must be completed at least once @@ -89,9 +91,13 @@ Rules that apply to every map: Rules that apply to courses with ranked filters specifically: +- Avoid using clips, non-solid blocks, triggers, or moving blocks in + unintuitive or exploitable ways. - Avoid inconsistent mechanics like moving platforms or time-based events. - Avoid "pre-run setups" like breakable objects or doors which do not open automatically. +- There must be no way to skip from the start of a course straight to the end, + resulting in ridiculously short times. In addition, the *name* of your maps must start with `kz_` and can only contain ASCII alphanumeric characters (and underscores). It should be easily From 1128e7d38524394b0234e84b0fabe86de7712dbb Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Fri, 21 Feb 2025 01:09:00 +0100 Subject: [PATCH 04/10] Fix formatting --- docs/mapping/approval.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/mapping/approval.md b/docs/mapping/approval.md index 1fe7d08..e582334 100644 --- a/docs/mapping/approval.md +++ b/docs/mapping/approval.md @@ -4,7 +4,7 @@ If you want your own map to become part of [the official map pool](https://cs2kz.org/maps), you need [permission](#acquiring-permission) to do so, [submit it for approval](#creating-a-map), and make sure it follows -[the rules](#rules). +[the rules](#rules). If you plan on porting a map, see ## Acquiring Permission @@ -99,8 +99,8 @@ Rules that apply to courses with ranked filters specifically: - There must be no way to skip from the start of a course straight to the end, resulting in ridiculously short times. -In addition, the *name* of your maps must start with `kz_` and can only contain -ASCII alphanumeric characters (and underscores). It should be easily +In addition, the *names* of your maps must start with `kz_` and can only +contain ASCII alphanumeric characters (and underscores). It should be easily distinguishable from other maps. Course names follow the same rules except that they should **not** have the From 330b275522b9fd0b21cb58f70e2b055ab04a36ba Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Fri, 21 Feb 2025 01:09:09 +0100 Subject: [PATCH 05/10] Add detailed list of CKZ changes from vanilla --- docs/modes/index.md | 62 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/docs/modes/index.md b/docs/modes/index.md index 7d367d5..60aab20 100644 --- a/docs/modes/index.md +++ b/docs/modes/index.md @@ -21,4 +21,64 @@ mode you want to play! A list of detailed changes can be found below: -- TODO +- Player movement is always processed at least twice per tick. +- View angles are interpolated to emulate 128 tick movement. +- Inputs are semi-desubticked server-side to the closest half tick for + increased consistency and synergy with the emulated 128 tick movement. +- Player eye level is consistent on slopes so players can better estimate block + heights. +- Default player running speed is `250` regardless of weapons. +- Ground acceleration (`sv_accelerate`) is increased to `6.5`. +- Acceleration speed does not depend on weapon speed. +- Air acceleration (`sv_airaccelerate`) is increased to `100`. +- Player jumps ever so slightly higher for more consistency on `57`/`66` unit + blocks (`+0.0025` height). +- Jump height quantization is disabled (Z coordinates and velocity will no + longer only be in intervals of `0.03125`). +- Ladder movement at view angles near perpendicular to the ladder will no + longer have clamped speed (no more 30 pre LAJs). +- Ladder movement speed is increased by ~28.2% (`sv_ladder_scale_speed 1`) +- Removed stamina system, player will not have reduced acceleration/movement + speed/jump height from jumping or landing. +- Penalty on repeated ducking is removed. +- **Rampbugfix**: Player will be pushed out of the collision spot to avoid + rampbugs if they collide with two surfaces at the same time. +- **Slopefix**: Landing on a downward slope will always give speed to the + player. +- **New prestrafe mechanics**: + - Accelerating in a different direction compared to the current movement + speed will increase player's speed cap, up to `276`. This means running + slightly into a wall will make the player run faster, similar to CSS or + CS 1.6 prestrafe mechanics. + - The difference in acceleration and velocity direction is computed as an + average over `0.02` seconds. + - The bigger the angle difference, the faster the gain speed will be. + - The maximum gain is achieved by keeping acceleration `16` or more degrees + away from the current velocity's direction. + - The minimum gain starts at `7` degrees. + - The maximum gain can be achived in `0.55` seconds. + - Prestrafe speed modifier depends on the player's current speed. + - Losing all speed on the ground means losing all prestrafe gain. + - Prestrafe speed modifier will start decreasing at `3x` the maximum gain + speed if the player stops prestrafing for over `0.2` seconds. + - However, there is a `0.25` second grace period after landing where + prestrafe gain will not be affected. This helps with prekeeping after + landing. + - Player must not be running on the ground if they want to preserve + prestrafe gain while changing direction. For example, player can + prestrafe to the right, then jump. After landing, the player can either + perform a left or right prestrafe while still preserving the gain. + - Prestrafe speed modifier persists in the air and will not decay, however + airstrafing will not benefit from the increased maximum speed (this is + relevant in high speed scenarios). + - Water movement speed is not increased by prestrafe. +- **Bunnyhop related changes**: + - The limit on scroll speed is lifted. + - Jump height is always the same as a normal jump. + - The window for a perfect bunnyhop window is increased to `0.02` seconds + (~2.5 ticks for 128 tick) instead of 0 to 1 tick (with subtick). + - The prespeed formula is + `MAX(250 + prestrafeGain, MIN(speed, (51.5 timeOnGround * 75) log(speed) - 13.4506445844))`. + In short, the bhop prespeed will be linear until the landing speed is + greater than the ground speed, after which the speed gain is + reduced. Typical bhops will have `286-296` prespeed. From 50c205b1e651536138508ad22a5fc8026b12eaa5 Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Sat, 22 Feb 2025 16:04:26 +0100 Subject: [PATCH 06/10] Add Mapping API docs --- .vitepress/config.mts | 2 + docs/mapping/api.md | 282 +++++++++++++++++++++++ docs/public/images/anti-bhop-trigger.png | Bin 0 -> 28943 bytes docs/public/images/course-descriptor.png | Bin 0 -> 32568 bytes docs/public/images/teleport-triggers.png | Bin 0 -> 34591 bytes docs/public/images/zones.png | Bin 0 -> 34874 bytes 6 files changed, 284 insertions(+) create mode 100644 docs/mapping/api.md create mode 100644 docs/public/images/anti-bhop-trigger.png create mode 100644 docs/public/images/course-descriptor.png create mode 100644 docs/public/images/teleport-triggers.png create mode 100644 docs/public/images/zones.png diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 9ae4419..cd3fd11 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -44,6 +44,7 @@ export default defineConfig({ { text: "Mapping", items: [ + { text: "API", link: "/mapping/api" }, { text: "Approval Process", link: "/mapping/approval" }, { text: "Discord", link: "https://discord.gg/R593VhE" }, ], @@ -65,6 +66,7 @@ export default defineConfig({ ], "/mapping/": [ { text: "Terminology", link: "/mapping/" }, + { text: "API", link: "/mapping/api" }, { text: "Approval Process", link: "/mapping/approval" }, { text: "Discord", link: "https://discord.gg/R593VhE" }, ], diff --git a/docs/mapping/api.md b/docs/mapping/api.md new file mode 100644 index 0000000..90d3d8d --- /dev/null +++ b/docs/mapping/api.md @@ -0,0 +1,282 @@ +# Mapping API + +The Mapping API was designed with using the [Mapping API FGD][fdg] in +mind. Some features are available without the FGD, like a basic start and end +zone (only 1 course without the FGD), course start position, and jumpstat area +location. + +## Features available without the FDG + +### Timer Zones + +The timer starts when the player leaves the start zone and ends when the player +enters the end zone. You can create these zones like so: + +1. Create a [`trigger_multiple`](https://developer.valvesoftware.com/wiki/Trigger_multiple) entity. +2. Name the start zone entity `timer_startzone`. +3. Name the end zone entity `timer_endzone`. + +It is recommended that you use triggers that are 4 units thick and on the +ground for more consistent timing. + +Some things to keep in mind: + +- When using the FDG this method will not work! +- You can only create this one course without the FDG. +- Start zones can be left mid-air as long as a perfect bunnyhop is not hit. + +### Course Starts + +Course starts mark where players will be teleported when using the `!restart` +/ `!r` commands. The priority is ordered as below: + +- `!r ` - teleport to the mapper defined start position of the + course. +- `!r` will prefer your custom start position (`!ssp`), or the mapper defined + start position of the current active course, or the mapper defined start + position of the only course of the map (if there is only one course). + +To implement course starts, the following are required: + +1. Create an [`info_teleport_destination`](https://developer.valvesoftware.com/wiki/Info_teleport_destination) entity. +2. Name the entity `timer_start`. +3. Set Pitch Yaw Roll (Y Z X) to the angles you wish to teleport the player + into. + +For mappers using the FGD: + +You should create a course start for every course you've made. Put the +targetname of your course descriptor entity in `KZ | Course Descriptor`. + +### Jumpstat Area Location + +There can only be one of these in a map. This works with or without the FGD. + +To implement the jumpstat area location, the following are required: + +1. Create an [`info_teleport_destination`](https://developer.valvesoftware.com/wiki/Info_teleport_destination) entity. +2. Name the entity `timer_jumpstat_area`. +3. Set Pitch Yaw Roll (Y Z X) to the angles you wish to teleport the player + into. + +## Features available only with the FDG + +For the following features you will need the +[Mapping API FGD (`csgo_internal.fgd`) file][fdg]. + +After opening the above link for the `.fgd`, right click on the page and click +"Save As" and save it to somewhere safe. Make sure to change the file extension +to `.fgd` if it's `.fgd.txt` or something else, otherwise hammer won't be able +to open it. + +Put `csgo_internal.fgd` in the +`/steamapps/common/Counter-Strike Global Offensive/game/csgo_core/` folder. + +>[!NOTE] +> If you previously weren't using the Mapping API FGD, you will have to remake +> your course's start and end zone. See below for how to make start and end +> zone triggers with the FGD. + +### Updating + +When the fgd changes with a Mapping API update you'll need to repeat the steps +above. When that's done, check what the new Mapping API version is: it's in the +first line in the `kz_mapping_api.fgd` file, something like this: + +``` +// KZ Mapping API Version 2 +``` + +After that you'll have to change the `KZ | Mapping API Version` parameter in +`Map Properties` on every map you've used it on to the new version! + +### Course Descriptors + +In CS2KZ [there is no "main" course or track on a map](/mapping#courses). A map +can have multiple equally "important" courses. A **course descriptor** defines +attributes of a course, currently only the name. + +To make a course descriptor: + +1. Create an `info_target_server_only` entity. +2. Enable the `KZ | Is Course Descriptor` checkbox. +3. Name the entity so other entities can find it (e.g. `binguscourse`). +4. Give the course a nice `Course Name` under the `KZ | Course Descriptor` + tree, for example `Best Bingus Bever`. This will be shown in-game to + players, so pick a good one! If your map has only one course you should name + it `Main`, people will usually refer to the only course with the map's name. +5. If you're creating multiple courses, make sure the Course Numbers are + unique. +6. Enable or disable any attributes you want. + +![course_descriptor](/public/images/course-descriptor.png) + +### Start and End zones + +The timer will start when the player leaves the start zone and end when the +player enters the end zone (and has touched every "stage" and "checkpoint" zone +assigned to the course). + +1. Create a [`trigger_multiple`](https://developer.valvesoftware.com/wiki/Trigger_multiple) entity. +2. For the start zone, select `Start Zone` from the `KZ | Trigger Type` + dropdown. +3. For the end zone, select `End Zone` from the `KZ | Trigger Type` + dropdown. +4. Expaned the `KZ | Zone` tree and put the `targetname` of your course + descriptor entity in `Course Descriptor` (e.g. `binguscourse`). + +![zones](/public/images/zones.png) + +Some things to keep in mind: + +>[!WARNING] +> UNFINISHED: Timer zones can act as Course starts. Entering a **start** timer +> zone will stop the player's current timer. Entering a **start** timer zone +> will set the player's start position to the zone. + +- Start zones can be left midair as long as a perfect bunnyhop is not hit. +- Multiple start timer zones should not be possible to be activated at once to + avoid usability issues. + +### Split / Checkpoint / Stage zones + +#### Split zones + +The player doesn't need to touch any of these zones for them to finish the map, +nor do they have to touch them in numerical order. Split zones are purely for +comparing times from run to run as the name implies. + +#### Checkpoint zones + +These are the same as split zones, except the player has to touch every single +checkpoint zone that's assigned to the course. The order the player has to +touch checkpoint zones doesn't matter. + +#### Stage zones + +These are the same as checkpoint zones, except the player has to touch every +single stage zone in order. + +#### Creating the zones + +1. Create a [`trigger_multiple`](https://developer.valvesoftware.com/wiki/Trigger_multiple) entity. +2. Select `Split Zone` / `Checkpoint Zone` / `Stage Zone` from the + `KZ | Trigger Type` dropdown. +3. Expand the `KZ | Zone` tree and put the `targetname` of your course + descriptor entity in `Course Descriptor` (e.g. `binguscourse`). +4. Then, if this isn't the first split / checkpoint / stage zone you're making, + increment the `Split/Checkpoint/Stage Number` by 1. + +>[!INFO] +> `Split/Stage/Checkpoint Number`s must be consecutive and start from 1! For +> example: if you have 4 stage zones and 3 checkpoint zones on your course, +> then all 4 stage zones' `Stage Number`s must be 1, 2, 3 and 4. Same with the +> 3 checkpoint zones: `Checkpoint Number` on all 3 checkpoint zones, must be 1, +> 2 and 3, not 1, 2, 4 or 1, 4, 10! The same applies to split zones. + +### Teleport Triggers + +1. Create a [`trigger_multiple`](https://developer.valvesoftware.com/wiki/Trigger_multiple) entity. +2. Select `General Teleport` from the `KZ | Trigger Type` dropdown. +3. Set `Destination` in the `KZ | Teleport` section to the entity you want to + teleport the player to. +4. Optionally change `Delay`. This makes it so the player gets teleported to + the destination only after they've been in the trigger this long. +5. Optionally change `Use Destination Angles` from the default `Yes` if you + don't want players to get their angles changed to the destination entity's. +6. Optionally change `Reset Speed` from the default `Yes` if you want players + to keep their speed when you get teleported. +7. Optionally change `Reorient Player`. When teleported, it rotates the + player's velocity and yaw by the teleport destination's yaw angle. The pitch + angle will remain unchanged. This overrides the value of 'Use Destination + Angles'. +8. Optionally change `Relative To Trigger Origin`. Gets the offset of the + player to this trigger, then teleports the player to the destination with + that offset added. If `Reorient Player` is enabled, then the offset is + rotated by the destination entity's yaw. Changing the destination yaw will + cause visible lag when moving your mouse. + +All the parameters are also well explained inside hammer. + +![teleport-triggers](/public/images/teleport-triggers.png) + +### Bhop triggers + +These share a similar setup with teleport triggers just above, with a few extra +steps. To implement bhop triggers, the following are required: + +1. Change the `KZ | Trigger Type` parameter to one of the following: + - `Multi Bhop` + - `Single Bhop` + - `Sequential Bhop` +2. Change `KZ | Teleport | Delay`. + +>[!WARNING] +> The teleport delay for bhops starts when you touch the ground inside the +> trigger, instead of when you touch the trigger. `0.1` is a very common +> value. The minimum delay is `0.1` for bhop triggers. Read more below. + +Important information: + +The reason that the minimum delay is so high is that a very small delay will +greatly increase the chances of getting a false bhop hack ban. For single +bhops, you get teleported if you bhop on the same single bhop trigger +twice. For sequential bhops, you get teleported if you bhop on any of the +sequential bhop triggers that you've already bhopped on. Single and sequential +bhops get automatically reset if you touch the ground or a ladder without +touching any single/sequential bhop triggers (touching multibhop triggers will +automatically reset as well). Single bhops also get reset when you touch a bhop +trigger that isn't a single bhop. + +If you need to reset bhop triggers manually, you can use the `Single bhop +reset` trigger type. + +>[!INFO] +> You will almost never need to use `Single bhop reset` because resetting +> happens automatically. + +### Other triggers + +#### `KZ | Trigger Type`: `Reset Checkpoints` + +Resets the player's checkpoints when they enter this trigger. + +>[!INFO] +> This does not work when the timer is not running. + +#### `KZ | Trigger Type`: `Modifiers` + +Activates multiple different modifiers for the player. + +- Disable Pausing: Disables pausing while inside this trigger. +- Disable Checkpoints: Disables creating checkpoints inside this trigger. +- Disable Teleports: Disables teleporting to checkpoints inside this trigger. +- Disable Jumpstats: Disables registering jumpstats inside this trigger. +- Enable Slide: Makes every surface surfable, even floors. +- Player Gravity: Change the player's gravity while inside the trigger. Can be + negative (TODO: check what happens if it's 0). Multiple gravity modifier + triggers can be inside each other, the one most recently entered takes + priority. + +#### `KZ | Trigger Type`: `Anti Bhop` + +Optionally change Time in the `KZ | Anti Bhop` section: a delay of `0` means +that jumping is always disabled in this trigger. The delay timer starts when +you're on the ground inside the trigger. + +Disables jumping while on the ground and in the trigger. + +>[!WARNING] +> This trigger can be bypassed by a jumpbug and lag. You have to make this +> trigger at least `16` units thick to prevent that. + +>[!WARNING] +> It can also be bypassed by jumping into a teleport trigger and bhopping when +> you get teleported (also called "trigger hopping"). This happens if the +> teleport destination is inside an antibhop trigger and the destination is `2` +> units or less above the ground. To fix this, make sure that the teleport +> destination is `4` units or more above the ground! + +![anti-bhop-trigger](/public/images/anti-bhop-trigger.png) + +[fdg]: https://github.com/KZGlobalTeam/cs2kz-metamod/blob/master/mapping_api/game/csgo_core/csgo_internal.fgd diff --git a/docs/public/images/anti-bhop-trigger.png b/docs/public/images/anti-bhop-trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..4e00894714e372c68bf904ec506792e261a8005c GIT binary patch literal 28943 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 VgG9@*A_@@jBP*#SQ6Xj&_+NP{Ex!N& literal 0 HcmV?d00001 diff --git a/docs/public/images/course-descriptor.png b/docs/public/images/course-descriptor.png new file mode 100644 index 0000000000000000000000000000000000000000..58db84c78eed89f80923aae97e5e39a20ea1b99d GIT binary patch literal 32568 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 literal 0 HcmV?d00001 diff --git a/docs/public/images/teleport-triggers.png b/docs/public/images/teleport-triggers.png new file mode 100644 index 0000000000000000000000000000000000000000..1cc89f268ba082b2a19aad44cdbb02f0e2b66986 GIT binary patch literal 34591 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 Date: Sat, 22 Feb 2025 16:36:37 +0100 Subject: [PATCH 07/10] FDG -> FGD --- docs/mapping/api.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/mapping/api.md b/docs/mapping/api.md index 90d3d8d..25c5968 100644 --- a/docs/mapping/api.md +++ b/docs/mapping/api.md @@ -1,11 +1,11 @@ # Mapping API -The Mapping API was designed with using the [Mapping API FGD][fdg] in +The Mapping API was designed with using the [Mapping API FGD][fgd] in mind. Some features are available without the FGD, like a basic start and end zone (only 1 course without the FGD), course start position, and jumpstat area location. -## Features available without the FDG +## Features available without the FGD ### Timer Zones @@ -21,8 +21,8 @@ ground for more consistent timing. Some things to keep in mind: -- When using the FDG this method will not work! -- You can only create this one course without the FDG. +- When using the FGD this method will not work! +- You can only create this one course without the FGD. - Start zones can be left mid-air as long as a perfect bunnyhop is not hit. ### Course Starts @@ -59,10 +59,10 @@ To implement the jumpstat area location, the following are required: 3. Set Pitch Yaw Roll (Y Z X) to the angles you wish to teleport the player into. -## Features available only with the FDG +## Features available only with the FGD For the following features you will need the -[Mapping API FGD (`csgo_internal.fgd`) file][fdg]. +[Mapping API FGD (`csgo_internal.fgd`) file][fgd]. After opening the above link for the `.fgd`, right click on the page and click "Save As" and save it to somewhere safe. Make sure to change the file extension @@ -279,4 +279,4 @@ Disables jumping while on the ground and in the trigger. ![anti-bhop-trigger](/public/images/anti-bhop-trigger.png) -[fdg]: https://github.com/KZGlobalTeam/cs2kz-metamod/blob/master/mapping_api/game/csgo_core/csgo_internal.fgd +[fgd]: https://github.com/KZGlobalTeam/cs2kz-metamod/blob/master/mapping_api/game/csgo_core/csgo_internal.fgd From 36fa48dd1afc7ab625d5bcf346840d0d99a8faaf Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Sat, 22 Feb 2025 16:49:59 +0100 Subject: [PATCH 08/10] Make Mapping API wording more clear --- docs/mapping/api.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/docs/mapping/api.md b/docs/mapping/api.md index 25c5968..362090f 100644 --- a/docs/mapping/api.md +++ b/docs/mapping/api.md @@ -13,8 +13,8 @@ The timer starts when the player leaves the start zone and ends when the player enters the end zone. You can create these zones like so: 1. Create a [`trigger_multiple`](https://developer.valvesoftware.com/wiki/Trigger_multiple) entity. -2. Name the start zone entity `timer_startzone`. -3. Name the end zone entity `timer_endzone`. +2. Set the start zone entity's `Name` (targetname) to `timer_startzone`. +3. Set the end zone entity's `Name` (targetname) to `timer_endzone`. It is recommended that you use triggers that are 4 units thick and on the ground for more consistent timing. @@ -39,7 +39,7 @@ Course starts mark where players will be teleported when using the `!restart` To implement course starts, the following are required: 1. Create an [`info_teleport_destination`](https://developer.valvesoftware.com/wiki/Info_teleport_destination) entity. -2. Name the entity `timer_start`. +2. Set the entity's `Name` (targetname) to `timer_start`. 3. Set Pitch Yaw Roll (Y Z X) to the angles you wish to teleport the player into. @@ -55,7 +55,7 @@ There can only be one of these in a map. This works with or without the FGD. To implement the jumpstat area location, the following are required: 1. Create an [`info_teleport_destination`](https://developer.valvesoftware.com/wiki/Info_teleport_destination) entity. -2. Name the entity `timer_jumpstat_area`. +2. Set the entity's `Name` (targetname) to `timer_jumpstat_area`. 3. Set Pitch Yaw Roll (Y Z X) to the angles you wish to teleport the player into. @@ -100,7 +100,8 @@ To make a course descriptor: 1. Create an `info_target_server_only` entity. 2. Enable the `KZ | Is Course Descriptor` checkbox. -3. Name the entity so other entities can find it (e.g. `binguscourse`). +3. Set the entity's `Name` (targetname) to something other entities can find + (e.g. `binguscourse`). 4. Give the course a nice `Course Name` under the `KZ | Course Descriptor` tree, for example `Best Bingus Bever`. This will be shown in-game to players, so pick a good one! If your map has only one course you should name @@ -118,11 +119,9 @@ player enters the end zone (and has touched every "stage" and "checkpoint" zone assigned to the course). 1. Create a [`trigger_multiple`](https://developer.valvesoftware.com/wiki/Trigger_multiple) entity. -2. For the start zone, select `Start Zone` from the `KZ | Trigger Type` - dropdown. -3. For the end zone, select `End Zone` from the `KZ | Trigger Type` - dropdown. -4. Expaned the `KZ | Zone` tree and put the `targetname` of your course +2. For start zones, select `Start Zone` from the `KZ | Trigger Type` dropdown. +3. For end zones, select `End Zone` from the `KZ | Trigger Type` dropdown. +4. Expand the `KZ | Zone` tree and put the targetname of your course descriptor entity in `Course Descriptor` (e.g. `binguscourse`). ![zones](/public/images/zones.png) @@ -162,7 +161,7 @@ single stage zone in order. 1. Create a [`trigger_multiple`](https://developer.valvesoftware.com/wiki/Trigger_multiple) entity. 2. Select `Split Zone` / `Checkpoint Zone` / `Stage Zone` from the `KZ | Trigger Type` dropdown. -3. Expand the `KZ | Zone` tree and put the `targetname` of your course +3. Expand the `KZ | Zone` tree and put the targetname of your course descriptor entity in `Course Descriptor` (e.g. `binguscourse`). 4. Then, if this isn't the first split / checkpoint / stage zone you're making, increment the `Split/Checkpoint/Stage Number` by 1. From 1b87aef4ac347f00e755489cc6efb83f3cbc34f6 Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Sat, 22 Feb 2025 16:51:24 +0100 Subject: [PATCH 09/10] Add missing backticks --- docs/mapping/api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mapping/api.md b/docs/mapping/api.md index 362090f..b65e67b 100644 --- a/docs/mapping/api.md +++ b/docs/mapping/api.md @@ -259,7 +259,7 @@ Activates multiple different modifiers for the player. #### `KZ | Trigger Type`: `Anti Bhop` -Optionally change Time in the `KZ | Anti Bhop` section: a delay of `0` means +Optionally change `Time` in the `KZ | Anti Bhop` section: a delay of `0` means that jumping is always disabled in this trigger. The delay timer starts when you're on the ground inside the trigger. From 82fee5228d553a88db72d47ab7a6adb3941374ea Mon Sep 17 00:00:00 2001 From: AlphaKeks Date: Mon, 17 Mar 2025 14:05:04 +0100 Subject: [PATCH 10/10] Clarify on the 27 character limit for map names --- docs/mapping/approval.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/mapping/approval.md b/docs/mapping/approval.md index e582334..51cf271 100644 --- a/docs/mapping/approval.md +++ b/docs/mapping/approval.md @@ -99,12 +99,24 @@ Rules that apply to courses with ranked filters specifically: - There must be no way to skip from the start of a course straight to the end, resulting in ridiculously short times. -In addition, the *names* of your maps must start with `kz_` and can only -contain ASCII alphanumeric characters (and underscores). It should be easily +In addition, the *names* of your maps must start with `kz_`, can only contain +ASCII alphanumeric characters (and underscores), and must not exceed 27 +characters in length (including the `kz_` prefix). It should be easily distinguishable from other maps. -Course names follow the same rules except that they should **not** have the -`kz_` prefix. +>[!NOTE] +> The 27 character limit exists because of how command parsing is implemented +> in the game engine. Any command must fit into 63 characters (the buffer is 64 +> characters, but the last character is a `\0` terminator). The two available +> commands to change map are `map` and `changelevel`. The argument to these +> commands is the path to the map file, which usually looks like this: +> `workshop/.bsp`, with `` being an unsigned 32-bit integer. Therefore, +> the longest possible command, without an actual map name, is `changelevel +> workshop/4294967295/.bsp`. This is 36 characters long, leaving 27 characters +> for the map name, to reach the limit of 63. + +Course names can only contain ASCII characters (including spaces, punctuation, +quotes, etc.) and must be unique across all courses **on your map**. ## Porting