koth gamemode - #2008

Open
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master
Open

koth gamemode#2008
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master

Conversation

@Mngdd

@MngddMngdd commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

This is playable reimplementation of the KOTH gamemode with a few temporary exceptions: you cant earn xp and the bots are not configured for this mode. As far as I remember, these features weren't supported in the original GM version either xD

You can now create such maps in Hammer without using scripts or special entity/brush/trigger names.

neo_koth_master — exactly one must be placed; it controls the rotation of zones
neo_info_koth_zone — the “brain” of the zone
neo_trigger_koth_zone — a trigger for the zone; it must be attached to a neo_info_koth_zone object. Multiple triggers can be used for a single zone
neo_func_koth_border — it is a child object of func_brush, it has some default settings and just changes its color depending on who controls the current zone

I've also added some textures but idk how to add them to this specific pr (maybe I can create another pr in the assets repository)
image
upd: NeotokyoRebuild/neoAssets#124

upd2:
ive made it like that:
you have N zones, each zone is simply a bunch of triggers that a player must stand in for points to count toward their team (unless players from two different teams are standing in the same zone, in which case no points are awarded to anyone). Out of all these N zones, only one random zone is active. Every X seconds, we deactivate the current zone and select a new one -> the selected zone is visible to players but blocked for Y seconds (just to make it more interesting), and after Y seconds, players can continue earning points for holding the zone.

Toolchain

  • Windows MSVC VS2022

Planned:
Redesign the score tracking interface (maybe, idk)
balance stuff (xp)
bot behaviour adaptation for this mode
add events (input/output) from neo_koth_zone_info (like when active/captured etc)
rename the legacy texture folder path (folder called "cp"which obviously stands for “control point,” but looks really weird :/ )

@MngddMngdd changed the title separate koth gamemodekoth gamemodeJul 12, 2026
@Mngdd
Mngdd marked this pull request as ready for review July 12, 2026 20:48
@Mngdd

Copy link
Copy Markdown
ContributorAuthor

textures: NeotokyoRebuild/neoAssets#124

@Mngdd

Mngdd commented Jul 13, 2026

Copy link
Copy Markdown
ContributorAuthor

also in-game logic

neo_koth_master (EXACTLY 1 per map, probably a dumb decision and i could have done it without creating a special entity, but I only realized this now)
│ m_Zones: CUtlVector<CHandle<CNEO_InfoKOTHZone>>
│ (zones register THEMSELVES in master via RegisterZone() in their own Activate())

neo_info_koth_zone (N of them, "points" a/b/c/...)
│ m_ChildTriggers: CUtlVector<CHandle<CNEO_TriggerKOTHZone>>
│ m_ChildBorders: CUtlVector<CHandle<CNEO_KOTHBorder>>
│ (triggers/borders register THEMSELVES in zone info via AddChildTrigger/AddChildBorder
│ in their own Activate(), resolving themselves by the "zone_name" keyfield)

neo_trigger_koth_zone (M per point) neo_func_koth_border (K per point)
pZone: CNEO_InfoKOTHZone* pZone: CNEO_InfoKOTHZone*
(both hold a back-reference to "their" zone, resolved by name in Activate())

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Mngdd@Agiel
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

koth gamemode - #2008

Open
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master
Open

koth gamemode#2008
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master

Conversation

@Mngdd

@MngddMngdd commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

This is playable reimplementation of the KOTH gamemode with a few temporary exceptions: you cant earn xp and the bots are not configured for this mode. As far as I remember, these features weren't supported in the original GM version either xD

You can now create such maps in Hammer without using scripts or special entity/brush/trigger names.

neo_koth_master — exactly one must be placed; it controls the rotation of zones
neo_info_koth_zone — the “brain” of the zone
neo_trigger_koth_zone — a trigger for the zone; it must be attached to a neo_info_koth_zone object. Multiple triggers can be used for a single zone
neo_func_koth_border — it is a child object of func_brush, it has some default settings and just changes its color depending on who controls the current zone

I've also added some textures but idk how to add them to this specific pr (maybe I can create another pr in the assets repository)
image
upd: NeotokyoRebuild/neoAssets#124

upd2:
ive made it like that:
you have N zones, each zone is simply a bunch of triggers that a player must stand in for points to count toward their team (unless players from two different teams are standing in the same zone, in which case no points are awarded to anyone). Out of all these N zones, only one random zone is active. Every X seconds, we deactivate the current zone and select a new one -> the selected zone is visible to players but blocked for Y seconds (just to make it more interesting), and after Y seconds, players can continue earning points for holding the zone.

Toolchain

  • Windows MSVC VS2022

Planned:
Redesign the score tracking interface (maybe, idk)
balance stuff (xp)
bot behaviour adaptation for this mode
add events (input/output) from neo_koth_zone_info (like when active/captured etc)
rename the legacy texture folder path (folder called "cp"which obviously stands for “control point,” but looks really weird :/ )

@MngddMngdd changed the title separate koth gamemodekoth gamemodeJul 12, 2026
@Mngdd
Mngdd marked this pull request as ready for review July 12, 2026 20:48
@Mngdd

Copy link
Copy Markdown
ContributorAuthor

textures: NeotokyoRebuild/neoAssets#124

@Mngdd

Mngdd commented Jul 13, 2026

Copy link
Copy Markdown
ContributorAuthor

also in-game logic

neo_koth_master (EXACTLY 1 per map, probably a dumb decision and i could have done it without creating a special entity, but I only realized this now)
│ m_Zones: CUtlVector<CHandle<CNEO_InfoKOTHZone>>
│ (zones register THEMSELVES in master via RegisterZone() in their own Activate())

neo_info_koth_zone (N of them, "points" a/b/c/...)
│ m_ChildTriggers: CUtlVector<CHandle<CNEO_TriggerKOTHZone>>
│ m_ChildBorders: CUtlVector<CHandle<CNEO_KOTHBorder>>
│ (triggers/borders register THEMSELVES in zone info via AddChildTrigger/AddChildBorder
│ in their own Activate(), resolving themselves by the "zone_name" keyfield)

neo_trigger_koth_zone (M per point) neo_func_koth_border (K per point)
pZone: CNEO_InfoKOTHZone* pZone: CNEO_InfoKOTHZone*
(both hold a back-reference to "their" zone, resolved by name in Activate())

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Mngdd@Agiel
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

koth gamemode - #2008

Open
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master
Open

koth gamemode#2008
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master

Conversation

@Mngdd

@MngddMngdd commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

This is playable reimplementation of the KOTH gamemode with a few temporary exceptions: you cant earn xp and the bots are not configured for this mode. As far as I remember, these features weren't supported in the original GM version either xD

You can now create such maps in Hammer without using scripts or special entity/brush/trigger names.

neo_koth_master — exactly one must be placed; it controls the rotation of zones
neo_info_koth_zone — the “brain” of the zone
neo_trigger_koth_zone — a trigger for the zone; it must be attached to a neo_info_koth_zone object. Multiple triggers can be used for a single zone
neo_func_koth_border — it is a child object of func_brush, it has some default settings and just changes its color depending on who controls the current zone

I've also added some textures but idk how to add them to this specific pr (maybe I can create another pr in the assets repository)
image
upd: NeotokyoRebuild/neoAssets#124

upd2:
ive made it like that:
you have N zones, each zone is simply a bunch of triggers that a player must stand in for points to count toward their team (unless players from two different teams are standing in the same zone, in which case no points are awarded to anyone). Out of all these N zones, only one random zone is active. Every X seconds, we deactivate the current zone and select a new one -> the selected zone is visible to players but blocked for Y seconds (just to make it more interesting), and after Y seconds, players can continue earning points for holding the zone.

Toolchain

  • Windows MSVC VS2022

Planned:
Redesign the score tracking interface (maybe, idk)
balance stuff (xp)
bot behaviour adaptation for this mode
add events (input/output) from neo_koth_zone_info (like when active/captured etc)
rename the legacy texture folder path (folder called "cp"which obviously stands for “control point,” but looks really weird :/ )

@MngddMngdd changed the title separate koth gamemodekoth gamemodeJul 12, 2026
@Mngdd
Mngdd marked this pull request as ready for review July 12, 2026 20:48
@Mngdd

Copy link
Copy Markdown
ContributorAuthor

textures: NeotokyoRebuild/neoAssets#124

@Mngdd

Mngdd commented Jul 13, 2026

Copy link
Copy Markdown
ContributorAuthor

also in-game logic

neo_koth_master (EXACTLY 1 per map, probably a dumb decision and i could have done it without creating a special entity, but I only realized this now)
│ m_Zones: CUtlVector<CHandle<CNEO_InfoKOTHZone>>
│ (zones register THEMSELVES in master via RegisterZone() in their own Activate())

neo_info_koth_zone (N of them, "points" a/b/c/...)
│ m_ChildTriggers: CUtlVector<CHandle<CNEO_TriggerKOTHZone>>
│ m_ChildBorders: CUtlVector<CHandle<CNEO_KOTHBorder>>
│ (triggers/borders register THEMSELVES in zone info via AddChildTrigger/AddChildBorder
│ in their own Activate(), resolving themselves by the "zone_name" keyfield)

neo_trigger_koth_zone (M per point) neo_func_koth_border (K per point)
pZone: CNEO_InfoKOTHZone* pZone: CNEO_InfoKOTHZone*
(both hold a back-reference to "their" zone, resolved by name in Activate())

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Mngdd@Agiel
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

koth gamemode - #2008

Open
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master
Open

koth gamemode#2008
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master

Conversation

@Mngdd

@MngddMngdd commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

This is playable reimplementation of the KOTH gamemode with a few temporary exceptions: you cant earn xp and the bots are not configured for this mode. As far as I remember, these features weren't supported in the original GM version either xD

You can now create such maps in Hammer without using scripts or special entity/brush/trigger names.

neo_koth_master — exactly one must be placed; it controls the rotation of zones
neo_info_koth_zone — the “brain” of the zone
neo_trigger_koth_zone — a trigger for the zone; it must be attached to a neo_info_koth_zone object. Multiple triggers can be used for a single zone
neo_func_koth_border — it is a child object of func_brush, it has some default settings and just changes its color depending on who controls the current zone

I've also added some textures but idk how to add them to this specific pr (maybe I can create another pr in the assets repository)
image
upd: NeotokyoRebuild/neoAssets#124

upd2:
ive made it like that:
you have N zones, each zone is simply a bunch of triggers that a player must stand in for points to count toward their team (unless players from two different teams are standing in the same zone, in which case no points are awarded to anyone). Out of all these N zones, only one random zone is active. Every X seconds, we deactivate the current zone and select a new one -> the selected zone is visible to players but blocked for Y seconds (just to make it more interesting), and after Y seconds, players can continue earning points for holding the zone.

Toolchain

  • Windows MSVC VS2022

Planned:
Redesign the score tracking interface (maybe, idk)
balance stuff (xp)
bot behaviour adaptation for this mode
add events (input/output) from neo_koth_zone_info (like when active/captured etc)
rename the legacy texture folder path (folder called "cp"which obviously stands for “control point,” but looks really weird :/ )

@MngddMngdd changed the title separate koth gamemodekoth gamemodeJul 12, 2026
@Mngdd
Mngdd marked this pull request as ready for review July 12, 2026 20:48
@Mngdd

Copy link
Copy Markdown
ContributorAuthor

textures: NeotokyoRebuild/neoAssets#124

@Mngdd

Mngdd commented Jul 13, 2026

Copy link
Copy Markdown
ContributorAuthor

also in-game logic

neo_koth_master (EXACTLY 1 per map, probably a dumb decision and i could have done it without creating a special entity, but I only realized this now)
│ m_Zones: CUtlVector<CHandle<CNEO_InfoKOTHZone>>
│ (zones register THEMSELVES in master via RegisterZone() in their own Activate())

neo_info_koth_zone (N of them, "points" a/b/c/...)
│ m_ChildTriggers: CUtlVector<CHandle<CNEO_TriggerKOTHZone>>
│ m_ChildBorders: CUtlVector<CHandle<CNEO_KOTHBorder>>
│ (triggers/borders register THEMSELVES in zone info via AddChildTrigger/AddChildBorder
│ in their own Activate(), resolving themselves by the "zone_name" keyfield)

neo_trigger_koth_zone (M per point) neo_func_koth_border (K per point)
pZone: CNEO_InfoKOTHZone* pZone: CNEO_InfoKOTHZone*
(both hold a back-reference to "their" zone, resolved by name in Activate())

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Mngdd@Agiel
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

koth gamemode - #2008

Open
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master
Open

koth gamemode#2008
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master

Conversation

@Mngdd

@MngddMngdd commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

This is playable reimplementation of the KOTH gamemode with a few temporary exceptions: you cant earn xp and the bots are not configured for this mode. As far as I remember, these features weren't supported in the original GM version either xD

You can now create such maps in Hammer without using scripts or special entity/brush/trigger names.

neo_koth_master — exactly one must be placed; it controls the rotation of zones
neo_info_koth_zone — the “brain” of the zone
neo_trigger_koth_zone — a trigger for the zone; it must be attached to a neo_info_koth_zone object. Multiple triggers can be used for a single zone
neo_func_koth_border — it is a child object of func_brush, it has some default settings and just changes its color depending on who controls the current zone

I've also added some textures but idk how to add them to this specific pr (maybe I can create another pr in the assets repository)
image
upd: NeotokyoRebuild/neoAssets#124

upd2:
ive made it like that:
you have N zones, each zone is simply a bunch of triggers that a player must stand in for points to count toward their team (unless players from two different teams are standing in the same zone, in which case no points are awarded to anyone). Out of all these N zones, only one random zone is active. Every X seconds, we deactivate the current zone and select a new one -> the selected zone is visible to players but blocked for Y seconds (just to make it more interesting), and after Y seconds, players can continue earning points for holding the zone.

Toolchain

  • Windows MSVC VS2022

Planned:
Redesign the score tracking interface (maybe, idk)
balance stuff (xp)
bot behaviour adaptation for this mode
add events (input/output) from neo_koth_zone_info (like when active/captured etc)
rename the legacy texture folder path (folder called "cp"which obviously stands for “control point,” but looks really weird :/ )

@MngddMngdd changed the title separate koth gamemodekoth gamemodeJul 12, 2026
@Mngdd
Mngdd marked this pull request as ready for review July 12, 2026 20:48
@Mngdd

Copy link
Copy Markdown
ContributorAuthor

textures: NeotokyoRebuild/neoAssets#124

@Mngdd

Mngdd commented Jul 13, 2026

Copy link
Copy Markdown
ContributorAuthor

also in-game logic

neo_koth_master (EXACTLY 1 per map, probably a dumb decision and i could have done it without creating a special entity, but I only realized this now)
│ m_Zones: CUtlVector<CHandle<CNEO_InfoKOTHZone>>
│ (zones register THEMSELVES in master via RegisterZone() in their own Activate())

neo_info_koth_zone (N of them, "points" a/b/c/...)
│ m_ChildTriggers: CUtlVector<CHandle<CNEO_TriggerKOTHZone>>
│ m_ChildBorders: CUtlVector<CHandle<CNEO_KOTHBorder>>
│ (triggers/borders register THEMSELVES in zone info via AddChildTrigger/AddChildBorder
│ in their own Activate(), resolving themselves by the "zone_name" keyfield)

neo_trigger_koth_zone (M per point) neo_func_koth_border (K per point)
pZone: CNEO_InfoKOTHZone* pZone: CNEO_InfoKOTHZone*
(both hold a back-reference to "their" zone, resolved by name in Activate())

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Mngdd@Agiel
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

koth gamemode - #2008

Open
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master
Open

koth gamemode#2008
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master

Conversation

@Mngdd

@MngddMngdd commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

This is playable reimplementation of the KOTH gamemode with a few temporary exceptions: you cant earn xp and the bots are not configured for this mode. As far as I remember, these features weren't supported in the original GM version either xD

You can now create such maps in Hammer without using scripts or special entity/brush/trigger names.

neo_koth_master — exactly one must be placed; it controls the rotation of zones
neo_info_koth_zone — the “brain” of the zone
neo_trigger_koth_zone — a trigger for the zone; it must be attached to a neo_info_koth_zone object. Multiple triggers can be used for a single zone
neo_func_koth_border — it is a child object of func_brush, it has some default settings and just changes its color depending on who controls the current zone

I've also added some textures but idk how to add them to this specific pr (maybe I can create another pr in the assets repository)
image
upd: NeotokyoRebuild/neoAssets#124

upd2:
ive made it like that:
you have N zones, each zone is simply a bunch of triggers that a player must stand in for points to count toward their team (unless players from two different teams are standing in the same zone, in which case no points are awarded to anyone). Out of all these N zones, only one random zone is active. Every X seconds, we deactivate the current zone and select a new one -> the selected zone is visible to players but blocked for Y seconds (just to make it more interesting), and after Y seconds, players can continue earning points for holding the zone.

Toolchain

  • Windows MSVC VS2022

Planned:
Redesign the score tracking interface (maybe, idk)
balance stuff (xp)
bot behaviour adaptation for this mode
add events (input/output) from neo_koth_zone_info (like when active/captured etc)
rename the legacy texture folder path (folder called "cp"which obviously stands for “control point,” but looks really weird :/ )

@MngddMngdd changed the title separate koth gamemodekoth gamemodeJul 12, 2026
@Mngdd
Mngdd marked this pull request as ready for review July 12, 2026 20:48
@Mngdd

Copy link
Copy Markdown
ContributorAuthor

textures: NeotokyoRebuild/neoAssets#124

@Mngdd

Mngdd commented Jul 13, 2026

Copy link
Copy Markdown
ContributorAuthor

also in-game logic

neo_koth_master (EXACTLY 1 per map, probably a dumb decision and i could have done it without creating a special entity, but I only realized this now)
│ m_Zones: CUtlVector<CHandle<CNEO_InfoKOTHZone>>
│ (zones register THEMSELVES in master via RegisterZone() in their own Activate())

neo_info_koth_zone (N of them, "points" a/b/c/...)
│ m_ChildTriggers: CUtlVector<CHandle<CNEO_TriggerKOTHZone>>
│ m_ChildBorders: CUtlVector<CHandle<CNEO_KOTHBorder>>
│ (triggers/borders register THEMSELVES in zone info via AddChildTrigger/AddChildBorder
│ in their own Activate(), resolving themselves by the "zone_name" keyfield)

neo_trigger_koth_zone (M per point) neo_func_koth_border (K per point)
pZone: CNEO_InfoKOTHZone* pZone: CNEO_InfoKOTHZone*
(both hold a back-reference to "their" zone, resolved by name in Activate())

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Mngdd@Agiel
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

koth gamemode - #2008

Open
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master
Open

koth gamemode#2008
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master

Conversation

@Mngdd

@MngddMngdd commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

This is playable reimplementation of the KOTH gamemode with a few temporary exceptions: you cant earn xp and the bots are not configured for this mode. As far as I remember, these features weren't supported in the original GM version either xD

You can now create such maps in Hammer without using scripts or special entity/brush/trigger names.

neo_koth_master — exactly one must be placed; it controls the rotation of zones
neo_info_koth_zone — the “brain” of the zone
neo_trigger_koth_zone — a trigger for the zone; it must be attached to a neo_info_koth_zone object. Multiple triggers can be used for a single zone
neo_func_koth_border — it is a child object of func_brush, it has some default settings and just changes its color depending on who controls the current zone

I've also added some textures but idk how to add them to this specific pr (maybe I can create another pr in the assets repository)
image
upd: NeotokyoRebuild/neoAssets#124

upd2:
ive made it like that:
you have N zones, each zone is simply a bunch of triggers that a player must stand in for points to count toward their team (unless players from two different teams are standing in the same zone, in which case no points are awarded to anyone). Out of all these N zones, only one random zone is active. Every X seconds, we deactivate the current zone and select a new one -> the selected zone is visible to players but blocked for Y seconds (just to make it more interesting), and after Y seconds, players can continue earning points for holding the zone.

Toolchain

  • Windows MSVC VS2022

Planned:
Redesign the score tracking interface (maybe, idk)
balance stuff (xp)
bot behaviour adaptation for this mode
add events (input/output) from neo_koth_zone_info (like when active/captured etc)
rename the legacy texture folder path (folder called "cp"which obviously stands for “control point,” but looks really weird :/ )

@MngddMngdd changed the title separate koth gamemodekoth gamemodeJul 12, 2026
@Mngdd
Mngdd marked this pull request as ready for review July 12, 2026 20:48
@Mngdd

Copy link
Copy Markdown
ContributorAuthor

textures: NeotokyoRebuild/neoAssets#124

@Mngdd

Mngdd commented Jul 13, 2026

Copy link
Copy Markdown
ContributorAuthor

also in-game logic

neo_koth_master (EXACTLY 1 per map, probably a dumb decision and i could have done it without creating a special entity, but I only realized this now)
│ m_Zones: CUtlVector<CHandle<CNEO_InfoKOTHZone>>
│ (zones register THEMSELVES in master via RegisterZone() in their own Activate())

neo_info_koth_zone (N of them, "points" a/b/c/...)
│ m_ChildTriggers: CUtlVector<CHandle<CNEO_TriggerKOTHZone>>
│ m_ChildBorders: CUtlVector<CHandle<CNEO_KOTHBorder>>
│ (triggers/borders register THEMSELVES in zone info via AddChildTrigger/AddChildBorder
│ in their own Activate(), resolving themselves by the "zone_name" keyfield)

neo_trigger_koth_zone (M per point) neo_func_koth_border (K per point)
pZone: CNEO_InfoKOTHZone* pZone: CNEO_InfoKOTHZone*
(both hold a back-reference to "their" zone, resolved by name in Activate())

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Mngdd@Agiel
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

koth gamemode - #2008

Open
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master
Open

koth gamemode#2008
Mngdd wants to merge 31 commits into
NeotokyoRebuild:masterfrom
Mngdd:master

Conversation

@Mngdd

@MngddMngdd commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Description

This is playable reimplementation of the KOTH gamemode with a few temporary exceptions: you cant earn xp and the bots are not configured for this mode. As far as I remember, these features weren't supported in the original GM version either xD

You can now create such maps in Hammer without using scripts or special entity/brush/trigger names.

neo_koth_master — exactly one must be placed; it controls the rotation of zones
neo_info_koth_zone — the “brain” of the zone
neo_trigger_koth_zone — a trigger for the zone; it must be attached to a neo_info_koth_zone object. Multiple triggers can be used for a single zone
neo_func_koth_border — it is a child object of func_brush, it has some default settings and just changes its color depending on who controls the current zone

I've also added some textures but idk how to add them to this specific pr (maybe I can create another pr in the assets repository)
image
upd: NeotokyoRebuild/neoAssets#124

upd2:
ive made it like that:
you have N zones, each zone is simply a bunch of triggers that a player must stand in for points to count toward their team (unless players from two different teams are standing in the same zone, in which case no points are awarded to anyone). Out of all these N zones, only one random zone is active. Every X seconds, we deactivate the current zone and select a new one -> the selected zone is visible to players but blocked for Y seconds (just to make it more interesting), and after Y seconds, players can continue earning points for holding the zone.

Toolchain

  • Windows MSVC VS2022

Planned:
Redesign the score tracking interface (maybe, idk)
balance stuff (xp)
bot behaviour adaptation for this mode
add events (input/output) from neo_koth_zone_info (like when active/captured etc)
rename the legacy texture folder path (folder called "cp"which obviously stands for “control point,” but looks really weird :/ )

@MngddMngdd changed the title separate koth gamemodekoth gamemodeJul 12, 2026
@Mngdd
Mngdd marked this pull request as ready for review July 12, 2026 20:48
@Mngdd

Copy link
Copy Markdown
ContributorAuthor

textures: NeotokyoRebuild/neoAssets#124

@Mngdd

Mngdd commented Jul 13, 2026

Copy link
Copy Markdown
ContributorAuthor

also in-game logic

neo_koth_master (EXACTLY 1 per map, probably a dumb decision and i could have done it without creating a special entity, but I only realized this now)
│ m_Zones: CUtlVector<CHandle<CNEO_InfoKOTHZone>>
│ (zones register THEMSELVES in master via RegisterZone() in their own Activate())

neo_info_koth_zone (N of them, "points" a/b/c/...)
│ m_ChildTriggers: CUtlVector<CHandle<CNEO_TriggerKOTHZone>>
│ m_ChildBorders: CUtlVector<CHandle<CNEO_KOTHBorder>>
│ (triggers/borders register THEMSELVES in zone info via AddChildTrigger/AddChildBorder
│ in their own Activate(), resolving themselves by the "zone_name" keyfield)

neo_trigger_koth_zone (M per point) neo_func_koth_border (K per point)
pZone: CNEO_InfoKOTHZone* pZone: CNEO_InfoKOTHZone*
(both hold a back-reference to "their" zone, resolved by name in Activate())

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Mngdd@Agiel