<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[Release] [T6] [Zombies] ZPause - a synced co-op pause mod by Xep]]></title><description><![CDATA[<h1>ZPause</h1>
<p dir="auto"><strong>Synced co-op pause for Black Ops II Zombies (Plutonium T6)</strong></p>
<p dir="auto">by Xep</p>
<p dir="auto">Any player can pause. Any player can unpause. The state lives on <code>level</code>, so it's<br />
identical for everyone — there's no per-client state that can desync.</p>
<ul>
<li>Zombies stop where they are, and stop spawning</li>
<li>Players are locked and can't be hurt</li>
<li>The match clock, powerup timers, effect countdowns and bleedout all hold</li>
<li>Resumes on a 3‑2‑1 countdown with a short grace period</li>
</ul>
<hr />
<h2>Requirements</h2>
<p dir="auto">Plutonium T6 (Black Ops II), zombies. No other mods or dependencies.</p>
<hr />
<h2>Download &amp; Source</h2>
<h5>Latest Version Download:</h5>
<p dir="auto">github dot com/Xeptix/ZPause/releases/tag/public/latest</p>
<h5>GitHub Source Code:</h5>
<p dir="auto">github dot com/Xeptix/ZPause</p>
<hr />
<h2>Install</h2>
<p dir="auto">Two packagings of the <strong>same</strong> file are included. Plutonium only lets you enable one mod<br />
at a time, so the script version is usually the better choice — it coexists with whatever<br />
mod you're running.</p>
<h3>Script version (recommended)</h3>
<p dir="auto">Drop <code>zpause.gsc</code> into your T6 storage scripts folder:</p>
<pre><code>%localappdata%\Plutonium\storage\t6\scripts\zm\zpause.gsc
</code></pre>
<p dir="auto">On newer Plutonium builds the path is under <code>raw</code>:</p>
<pre><code>%localappdata%\Plutonium\storage\t6\raw\scripts\zm\zpause.gsc
</code></pre>
<p dir="auto">If you aren't sure which your build uses, put it in both — only the one that exists will<br />
be read.</p>
<h3>Mod version</h3>
<p dir="auto">Copy the <code>zm_pause</code> folder into your mods folder:</p>
<pre><code>%localappdata%\Plutonium\storage\t6\mods\zm_pause\scripts\zm\zpause.gsc
</code></pre>
<p dir="auto">Then pick <strong>zm_pause</strong> from the in-game Mods menu. The folder name must keep its <code>zm_</code><br />
prefix or it won't show up in the zombies mod list.</p>
<p dir="auto">You don't need to restart the game to reload a script — just end the current game and<br />
start a new one.</p>
<hr />
<h2>Usage</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Action</th>
<th>Input</th>
</tr>
</thead>
<tbody>
<tr>
<td>Pause / unpause</td>
<td>type <code>!pause</code> or <code>!p</code> in chat</td>
</tr>
<tr>
<td>Unpause only</td>
<td>type <code>!unpause</code>, <code>!resume</code> or <code>!u</code></td>
</tr>
<tr>
<td>Pause / unpause</td>
<td>hold <strong>crouch + melee</strong> together for ~0.3s</td>
</tr>
</tbody>
</table>
<p dir="auto">The button combo keeps working while you're frozen — <code>freezecontrols()</code> blocks movement<br />
and weapon use, but button state still reaches the server. That's what lets a frozen<br />
player resume without opening chat.</p>
<p dir="auto">Resuming runs a 3‑2‑1 countdown with <strong>everything still frozen</strong>, then releases the whole<br />
game at once and gives players 2 seconds of invulnerability so nobody eats a hit from a<br />
zombie that was mid‑swing.</p>
<hr />
<h2>Configuration</h2>
<p dir="auto">Every setting is at the top of the file under <code>zp_load_config()</code>, and each one is also a<br />
dvar of the same name. The script creates each dvar with its default on load, so you can<br />
set them straight from the console:</p>
<pre><code class="language-bash">zp_countdown 5
</code></pre>
<p dir="auto">The config is re-read at the start of every pause, so a change takes effect on the <strong>next<br />
pause</strong> — no map restart needed. Anything already set in your <code>config.cfg</code> before the map<br />
loads is left alone.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Dvar</th>
<th>Default</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>zp_allow_short_words</code></td>
<td><code>0</code></td>
<td>Also accept bare <code>p</code> / <code>u</code> / <code>pause</code> in chat. Off by default so normal conversation can't pause the game.</td>
</tr>
<tr>
<td><code>zp_button_combo</code></td>
<td><code>1</code></td>
<td>Enable the crouch + melee combo.</td>
</tr>
<tr>
<td><code>zp_button_hold_time</code></td>
<td><code>0.3</code></td>
<td>How long the combo must be held.</td>
</tr>
<tr>
<td><code>zp_countdown</code></td>
<td><code>3</code></td>
<td>Seconds of 3‑2‑1 before play resumes.</td>
</tr>
<tr>
<td><code>zp_grace</code></td>
<td><code>2</code></td>
<td>Seconds of invulnerability after resuming.</td>
</tr>
<tr>
<td><code>zp_cooldown</code></td>
<td><code>2</code></td>
<td>Minimum seconds between toggles.</td>
</tr>
<tr>
<td><code>zp_max_pause_time</code></td>
<td><code>0</code></td>
<td>Auto-resume after N seconds. <code>0</code> = unlimited.</td>
</tr>
<tr>
<td><code>zp_engine_freeze</code></td>
<td><code>1</code></td>
<td>Use <code>disablezombies()</code> / <code>enablezombies()</code>.</td>
</tr>
<tr>
<td><code>zp_drift_guard</code></td>
<td><code>1</code></td>
<td>Snap back any AI that still manages to move.</td>
</tr>
<tr>
<td><code>zp_freeze_anims</code></td>
<td><code>1</code></td>
<td>Put zombies in a standing idle pose instead of looping their last animation.</td>
</tr>
<tr>
<td><code>zp_godmode</code></td>
<td><code>1</code></td>
<td>Make players invulnerable while paused.</td>
</tr>
<tr>
<td><code>zp_freeze_clock</code></td>
<td><code>1</code></td>
<td>Hold the match timer.</td>
</tr>
<tr>
<td><code>zp_freeze_powerups</code></td>
<td><code>1</code></td>
<td>Stop ground powerups timing out.</td>
</tr>
<tr>
<td><code>zp_freeze_effects</code></td>
<td><code>1</code></td>
<td>Hold insta-kill / double-points countdowns.</td>
</tr>
<tr>
<td><code>zp_freeze_bleedout</code></td>
<td><code>1</code></td>
<td>Stop downed players bleeding out.</td>
</tr>
<tr>
<td><code>zp_blackout</code></td>
<td><code>0</code></td>
<td>Black out everyone's screen while paused (anti-scouting).</td>
</tr>
<tr>
<td><code>zp_show_hint</code></td>
<td><code>1</code></td>
<td>Tell players how to pause when they spawn.</td>
</tr>
<tr>
<td><code>zp_countdown_sound</code></td>
<td><code>""</code></td>
<td>Sound alias to play on each countdown tick. Empty = silent.</td>
</tr>
</tbody>
</table>
<hr />
<h2>How it works</h2>
<p dir="auto"><strong>Treyarch already shipped a working full-game pause in T6 zombies.</strong> It's what runs<br />
during a host migration. The stock script <code>maps\mp\gametypes_zm\_hostmigration.gsc</code> does<br />
exactly this:</p>
<pre><code class="language-gsc">disablezombies( 1 );            // engine-level AI freeze
flag_clear( "spawn_zombies" );  // the spawner's own gate
player freezecontrols( 1 );     // lock players
player enableinvulnerability(); // nobody can be hurt
locktimer();                    // hold level.discardtime so the clock stops
</code></pre>
<p dir="auto">…and the exact inverse to resume. ZPause uses that recipe rather than inventing one, so<br />
the spawner, the round counter and the match clock are all stopped the way the game<br />
expects:</p>
<ul>
<li><strong><code>disablezombies()</code> / <code>enablezombies()</code></strong> are engine builtins — the same calls host<br />
migration uses.</li>
<li><strong><code>flag_clear("spawn_zombies")</code></strong> is the flag <code>_zm.gsc</code>'s spawn loop actually blocks on,<br />
so spawning stops at the source instead of being fought.</li>
<li><strong><code>level.discardtime</code></strong> is subtracted from the match clock, so pushing it forward by the<br />
elapsed time holds the timer still.</li>
</ul>
<p dir="auto">On top of that, ZPause covers what host migration never has to because it only lasts a few<br />
seconds:</p>
<ul>
<li><strong>An AI enforcer</strong> that re-freezes anything appearing mid-pause, keeps <code>ignoreall</code><br />
pinned, and snaps back any AI that drifts. It's a safety net — if the engine freeze does<br />
its job it never fires, so there's no jitter.</li>
<li><strong>The stuck-zombie watchdog.</strong> <code>round_spawn_failsafe()</code> kills any zombie that hasn't<br />
moved 24 units in 30 seconds (15 on Origins and Mob of the Dead), assuming it's stuck<br />
outside the playspace. A paused zombie trips it every time, and the "put it back in the<br />
spawn queue" compensation is skipped for anything with <code>ignoreall</code> set — so those<br />
zombies are gone for good, counted as killed, and the round advances while everyone's<br />
away. ZPause keeps the barrier-chunk timestamp fresh, which all three variants honour,<br />
so the watchdog loops harmlessly instead of firing and still works normally afterwards.</li>
<li><strong>Ground powerups.</strong> <code>powerup_timeout()</code> is a plain <code>wait()</code> and can't be paused, so the<br />
thread is cut and restarted on resume.</li>
<li><strong>Insta-kill / double points.</strong> Their HUD countdowns are held still. The 30s <code>wait()</code><br />
driving the real effect keeps running underneath, so on resume a bounded thread holds<br />
the effect on until the frozen countdown genuinely runs out, then forces it off —<br />
without that, the effect would stick on for the rest of the game.</li>
<li><strong>Bleedout</strong> is pinned so a downed player doesn't bleed out.</li>
<li><strong>Late joiners and respawns</strong> are frozen on spawn, and everything is torn down on<br />
<code>end_game</code> so nobody is left frozen at the scoreboard.</li>
</ul>
<h3>Why not <code>timescale</code>?</h3>
<p dir="auto"><code>timescale 0</code> looks like the perfect pause — it would freeze everything, timers included.<br />
But GSC <code>wait</code> runs on server time, so the unpause loop freezes with it and the game can<br />
never be resumed. The server also only runs a frame once enough scaled time accumulates,<br />
so snapshots stop going out and clients drop with <em>Connection Interrupted</em>. Slow motion<br />
(<code>timescale 0.05</code>) avoids the disconnects but isn't a pause.</p>
<hr />
<h2>Notes</h2>
<ul>
<li><strong>Round transitions.</strong> Pausing between rounds doesn't stop the next round from<br />
<em>beginning</em> — its delay is a plain <code>wait()</code>. No zombies spawn until you resume.</li>
<li><strong>Ground powerups get a fresh timer on resume</strong> rather than their exact remaining time,<br />
so you'll never lose a Max Ammo to a pause.</li>
<li><strong>Zombies stand idle rather than freeze solid.</strong> <code>zp_freeze_anims</code> puts them in the<br />
game's dormant-zombie pose so they don't run on the spot, but it's an idle animation<br />
rather than a hard freeze. A true animation freeze isn't reachable from server-side GSC,<br />
and the same applies to player animations.</li>
<li><strong>Scripted boss sequences</strong> (Brutus spawn-ins, Panzers, ghosts, the Avogadro) are held<br />
in place, but a scripted move already underway can still finish.</li>
<li><strong>Not held:</strong> magic box close timer, teleporter cooldowns, trap durations, and Easter<br />
egg step timers.</li>
</ul>
<hr />
<h2>Testing</h2>
<p dir="auto">Tested in live co-op games, including on custom map ports.</p>
<p dir="auto">It's also compile-checked with <strong>gsc-tool 1.4.10</strong> targeting <code>t6</code>/<code>pc</code> against the stock<br />
script tree, and round-tripped through compile → decompile. Every external function it<br />
calls exists in the stock T6 script corpus.</p>
<hr />
<h2>Credits</h2>
<ul>
<li><strong>Xep</strong> — author</li>
<li><strong>Treyarch</strong> — <code>_hostmigration.gsc</code>, the pause recipe this is built on</li>
<li><strong>plutoniummod/t6-scripts</strong> — stock T6 script reference</li>
<li><strong>hima_simple</strong> — earliest BO2 zombies pause script</li>
<li><strong>DED2SIN</strong> — Plutonium pause script building on it</li>
<li><strong>MufaDOOM</strong> — BO2 co-op pause mod</li>
<li><strong>Resxt</strong> — Plutonium T6 chat command conventions</li>
</ul>
]]></description><link>https://forum.plutonium.pw/topic/46378/release-t6-zombies-zpause-a-synced-co-op-pause-mod-by-xep</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 05:11:44 GMT</lastBuildDate><atom:link href="https://forum.plutonium.pw/topic/46378.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Sep 2026 08:45:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Release] [T6] [Zombies] ZPause - a synced co-op pause mod by Xep on Thu, 03 Sep 2026 23:28:05 GMT]]></title><description><![CDATA[<h2>ZPause v1.1</h2>
<p dir="auto"><strong>Latest version is always live on GitHub:</strong> <a href="https://github.com/Xeptix/ZPause/releases" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/Xeptix/ZPause/releases</a></p>
<h3>Fixed — players unfreezing mid-pause</h3>
<p dir="auto">On Ascension, pausing while you're in the lander let you walk around the paused<br />
game once the lander came down and opened. Map scripts that carry you somewhere<br />
lock your controls for the ride and release them when it ends, and that release<br />
lands in the middle of the pause. <code>freezecontrols()</code> can't be read back, so the<br />
fix re-asserts the freeze on a tick rather than testing it, and re-pins godmode<br />
along the way. New <code>zp_control_guard</code>, on by default. It covers any ride script<br />
that does this, not just the lander.</p>
<h3>New — screen blur</h3>
<p dir="auto"><code>zp_blur</code> (on by default) blurs everyone's screen while paused, using the same<br />
post-process the game runs when you buy a perk. <code>zp_blur_amount</code> sets the<br />
strength — the perk buy uses <code>4</code>, the default here is a light <code>1.5</code>. It's the<br />
softer alternative to <code>zp_blackout</code>, which is still there and still off by<br />
default.</p>
<h3>New — pause and resume sounds</h3>
<p dir="auto">Three sound dvars now instead of one:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Dvar</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>zp_pause_sound</code></td>
<td><code>zmb_zombie_go_inert</code></td>
</tr>
<tr>
<td><code>zp_countdown_sound</code></td>
<td><code>zmb_tombstone_timer_count</code></td>
</tr>
<tr>
<td><code>zp_resume_sound</code></td>
<td><code>zmb_zombie_end_inert</code></td>
</tr>
</tbody>
</table>
<p dir="auto">All stock aliases played by core zombies scripts, so they work on every map. A<br />
custom sound would have to ship as a fastfile and be installed by every player<br />
rather than just the host, so ZPause uses the game's own audio instead. The<br />
defaults are what the game uses them for: <code>go_inert</code> and <code>end_inert</code> are what a<br />
zombie plays dropping dormant and waking back up, and <code>zmb_tombstone_timer_count</code><br />
is the once-a-second tick from the tombstone timer. Set any of them to <code>""</code> for<br />
silence — <code>zp_countdown_sound</code> was silent by default before, so set it back if<br />
you preferred that. The README lists other aliases worth trying.</p>
<h3>Install</h3>
<p dir="auto">Unchanged — overwrite your existing <code>zpause.gsc</code>:</p>
<p dir="auto"><code>%localappdata%\Plutonium\storage\t6\scripts\zm\zpause.gsc</code>, or on newer builds<br />
<code>%localappdata%\Plutonium\storage\t6\raw\scripts\zm\zpause.gsc</code></p>
<p dir="auto">Mod version goes in <code>mods\zm_pause\scripts\zm\</code>. You don't need to restart the<br />
game — end the current match and start a new one.</p>
<p dir="auto">Full dvar list and the how-it-works writeup are in the README on GitHub:<br />
<a href="https://github.com/Xeptix/ZPause" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/Xeptix/ZPause</a></p>
]]></description><link>https://forum.plutonium.pw/post/178403</link><guid isPermaLink="true">https://forum.plutonium.pw/post/178403</guid><dc:creator><![CDATA[Xeptix]]></dc:creator><pubDate>Thu, 03 Sep 2026 23:28:05 GMT</pubDate></item><item><title><![CDATA[Reply to [Release] [T6] [Zombies] ZPause - a synced co-op pause mod by Xep on Thu, 03 Sep 2026 18:30:39 GMT]]></title><description><![CDATA[<p dir="auto">thank you so much for this gift were gonna use it forever <img src="https://forum.plutonium.pw/assets/plugins/nodebb-plugin-emoji/emoji/android/1f44c.png?v=917ad6727af" class="not-responsive emoji emoji-android emoji--ok_hand" style="height:23px;width:auto;vertical-align:middle" title="👌" alt="👌" />XD</p>
]]></description><link>https://forum.plutonium.pw/post/178379</link><guid isPermaLink="true">https://forum.plutonium.pw/post/178379</guid><dc:creator><![CDATA[GhostRider01250]]></dc:creator><pubDate>Thu, 03 Sep 2026 18:30:39 GMT</pubDate></item></channel></rss>