This mod for Black Ops 2 Zombies that will allow people to test strategies more efficiently.
Discord - YouTube - Twitch - Twitter
- Download and install BO2 Redacted Redacted Download
- Download the latest version of Strat Tester
- Open "BO2-Strat_Tester.zip" and copy the "zm" folder into
Call of Duty Black Ops II Redacted\data\scripts
- Launch the game and enjoy!
- Download and install BO2 Plutonium Plutonium Download
- Download the latest version of Strat Tester
- Open "BO2-Strat_Tester.zip" and copy the "zm" folder into
%localappdata%\Plutonium\storage\t6\scripts
- Launch the game and enjoy!
- Start round is set to 70 by default
- Start delay is set to 15 by default
- Weapons for high round setup are given
- Perks are given on spawn
- Perks are given after being revived
- Power is turned on
- Buildable parts are given on spawn
- Boards are removed from windows
- Timer
- Round timer
- Trap timer
- SPH - appears at the end of rounds
- Zombies remaining counter
- Current player zone
strat_tester 0
Disables strat testerstart_round 100
Changes the start round to 100start_delay 0
Changes start delay to 0 secondshud_timer 1
Enables total timer hudhud_round_timer 0
Disables round timer hudhud_remaining 0
Disables zombie counter hudhud_zone 0
Disables zone name hudst_perks 0
Disables perks being givenst_weapons 0
Disables weapons being givenst_remove_boards 0
Disables boards being removedst_power_on 0
Disables power being turned on
- Cheats can be used by typing their key word(s) into the console
- To open the console press the tilda key (key under ESC)
- Cheats can also be bound to keys using the key word "bind" (this will active the cheat when you press the bounded key)
god
godmodenoclip
flyinggive ammo
refills ammogive m1911_upgraded_zm
gives weapon (this gives upgraded m1911)timescale 10
changes the speed of the game (10 is max)ai_disableSpawn 1
stops zombies from spawning
- Enter these into the console then press the corresponding key to activate them
bind F1 god
binds godmode to F1bind F2 noclip
binds noclip to F2bind F3 "give ammo"
binds max ammo to F3bind F4 "toggle timescale 5 1"
binds 5x timescale toggle to F4
If you encounter any bugs, have a feature request, something isn't clear, etc. you may open a new issue
To contribute, all you have to do is clone the repo. To clone it, open a terminal with git installed and type
git clone https://github.com/5and5/BO2-Strat_Tester
then, open the BO2-Strat_Tester
folder with your favorite editor and get to work!
You will also want to get a hold of the decompiled source code for Black Ops 2. There is a repo containing the decompiled source and a lot of useful information here.
There are a couple of tricks we can use with Plutonium's toolset in order to change logic within the base game. The easiest way is through simple reassignment. Let's take a look at an example with the box weight function.
level.special_weapon_magicbox_check = ::nuked_special_weapon_check;
Within GSC, there are level
variables that are attached the the level instance and work as a 'global' variable. Accessing and assigning variables like this are very easy and can be done from anywhere. In this case,
there is a global variable that stores the function to check if you are able to obtain a special weapon from the Mystery Box (think Ray Gun Mark 2, Time Bombs, etc.). Every map during bootup that has a custom
magicbox check function will store that function in level.special_weapon_magicbox_check
. The ::
operator
during assignment is used to indicate that the function should be stored there. Later, the game can call that function by doing
[[ level.speical_weapon_magicbox_check ]]();
This allows the game to dynamically call functions that may have custom logic between maps. The parenthesis outside of the [[ ]]
would be the way to pass parameters into the function if it is required. We can take advantage of this by easily reassigning it to our custom function like so.
level.special_weapon_magicbox_check = ::our_custom_weight_func
Now we can define whatever custom logic we please in our_custom_weight_func()
It is highly recommended to do this in the main()
of a custom script (It can be in a nested function within a main()
if this tidies things up).
Not all functions are this easy to replace however, but there is another method we can use.
Built into Plutonium by the Plutonium team is the ability to replace function pointers by using the ReplaceFunc()
function. This function takes 2 parameters, the pointer to the old function, and a pointer to the new function. An example call would be like so:
replaceFunc( maps/mp/zombies/_zm_ai_leaper::leaper_round_tracker, ::leaper_round_tracker_override );
Here, we are replacing the round tracking function of the leapers (frogs, crawlers, jumping jacks, whatever you prefer to call them) with our own. Now, any call to leaper_round_tracker()
will instead go to leaper_round_tracker_override()
. It is important to make sure all parameters are the same in order to prevent argument/parameter mistatch errors. It is also important to make sure you add all the necessary #includes
within your files.
There are a handful of niche scenarios where ReplaceFunc()
doesn't work. There is a brief overview of those scenarios here. If you encounter once while working on this project, we can try and assist you in finding a work around. Workarounds typically involve calling replaceFunc()
on the function above it and copying most of the logic, but changing our desired call to our custom one.
In order to (try to) keep things organized, this project will likely split across multiple files. It will be important to make sure your includes are in order. All GSC files will typically have lots of includes. If you need to include from the base game because you have logic that depends on vanilla logic, you can simply do the following
#include maps/mp/zombies/script;
where script
is the name (without the extension) of the script. An easy trick would be to include everything the the script you overrode a function in within the new gsc containing all our custom logic. If you need to include from a file within this project, you can do so like this
#include scripts/zm/.../.../script;
where .../.../
denotes any directories you need to traverse in order to include the script.
Using VSCode is the easiest way to build. ALl you have to do is press F1
, select "Run Build Tasks", select "build all testing", and everything automatically builds and install in %localappdata%\Plutonium\storage\t6\scripts
, press F1
and run "Build all testing"
5and5 - Coding TTS - Readme JBleezy - Some code