Game Modding | Call of Duty: Black Ops 3 | Scripting
ModmeBot:
Thread By: DuaLVII
Hey Guys,
Saw numerous requests on zombie counters in BO3 already and a friend of mine wanted to see something a bit more spectacular although with no access to the majority of assets yet in mod tools to do something special with this, For now, I've made it as stylish as possible.
So, In remembering the good ol' days it's time to refer to the mapname gsc (Bring back memories?)
Black Ops 3 Directory -> Usermaps -> zm_yourmapname -> scripts -> zm -> zm_yourmapname.gsc (not .csc)
_INIT_ZCOUNTER();
function _INIT_ZCOUNTER()
{
ZombieCounterHuds = [];
ZombieCounterHuds["LastZombieText"] = "Zombie Left";
ZombieCounterHuds["ZombieText"] = "Zombie's Left";
ZombieCounterHuds["LastDogText"] = "Dog Left";
ZombieCounterHuds["DogText"] = "Dog's Left";
ZombieCounterHuds["DefaultColor"] = (1,1,1);
ZombieCounterHuds["HighlightColor"] = (1, 0.55, 0);
ZombieCounterHuds["FontScale"] = 1.5;
ZombieCounterHuds["DisplayType"] = 0; // 0 = Shows Total Zombies and Counts down, 1 = Shows Currently spawned zombie count
ZombieCounterHuds["counter"] = createNewHudElement("left", "top", 2, 10, 1, 1.5);
ZombieCounterHuds["text"] = createNewHudElement("left", "top", 2, 10, 1, 1.5);
ZombieCounterHuds["counter"] hudRGBA(ZombieCounterHuds["DefaultColor"], 0);
ZombieCounterHuds["text"] hudRGBA(ZombieCounterHuds["DefaultColor"], 0);
level thread _THINK_ZCOUNTER(ZombieCounterHuds);
}
function _THINK_ZCOUNTER(hudArray)
{
level endon("end_game");
for(;;)
{
level waittill("start_of_round");
level _ROUND_COUNTER(hudArray);
hudArray["counter"] SetValue(0);
hudArray["text"] thread hudMoveTo((2, 10, 0), 4);
hudArray["counter"] thread hudRGBA(hudArray["DefaultColor"], 0, 1);
hudArray["text"] SetText("End of round"); hudArray["text"] thread hudRGBA(hudArray["DefaultColor"], 0, 3);
}
}
function _ROUND_COUNTER(hudArray)
{
level endon("end_of_round");
lastCount = 0;
numberToString = "";
hudArray["counter"] thread hudRGBA(hudArray["DefaultColor"], 1.0, 1);
hudArray["text"] thread hudRGBA(hudArray["DefaultColor"], 1.0, 1);
hudArray["text"] SetText(hudArray["ZombieText"]);
if(level flag::get("dog_round"))
hudArray["text"] SetText(hudArray["DogText"]);
for(;;)
{
zm_count = (zombie_utility::get_current_zombie_count() + level.zombie_total);
if(hudArray["DisplayType"] == 1) zm_count = zombie_utility::get_current_zombie_count();
if(zm_count == 0) {wait(1); continue;}
hudArray["counter"] SetValue(zm_count);
if(lastCount != zm_count)
{
lastCount = zm_count;
numberToString = "" + zm_count;
hudArray["text"] thread hudMoveTo((10 + (4 * numberToString.Size), 10, 0), 4);
if(zm_count == 1 && !level flag::get("dog_round")) hudArray["text"] SetText(hudArray["LastZombieText"]);
else if(zm_count == 1 && level flag::get("dog_round")) hudArray["text"] SetText(hudArray["LastDogText"]);
hudArray["counter"].color = hudArray["HighlightColor"]; hudArray["counter"].fontscale = (hudArray["FontScale"] + 0.5);
hudArray["text"].color = hudArray["HighlightColor"]; hudArray["text"].fontscale = (hudArray["FontScale"] + 0.5);
hudArray["counter"] thread hudRGBA(hudArray["DefaultColor"], 1, 0.5); hudArray["counter"] thread hudFontScale(hudArray["FontScale"], 0.5);
hudArray["text"] thread hudRGBA(hudArray["DefaultColor"], 1, 0.5); hudArray["text"] thread hudFontScale(hudArray["FontScale"], 0.5);
}
wait(0.1);
}
}
function createNewHudElement(xAlign, yAlign, posX, posY, foreground, fontScale)
{
hud = newHudElem();
hud.horzAlign = xAlign; hud.alignX = xAlign;
hud.vertAlign = yAlign; hug.alignY = yAlign;
hud.x = posX; hud.y = posY;
hud.foreground = foreground;
hud.fontscale = fontScale;
return hud;
}
function hudRGBA(newColor, newAlpha, fadeTime)
{
if(isDefined(fadeTime))
self FadeOverTime(fadeTime);
self.color = newColor;
self.alpha = newAlpha;
}
function hudFontScale(newScale, fadeTime)
{
if(isDefined(fadeTime))
self ChangeFontScaleOverTime(fadeTime);
self.fontscale = newScale;
}
function hudMoveTo(posVector, fadeTime) // Just because MoveOverTime doesn't always work as wanted
{
initTime = GetTime();
hudX = self.x;
hudY = self.y;
hudVector = (hudX, hudY, 0);
while(hudVector != posVector)
{
time = GetTime();
hudVector = VectorLerp(hudVector, posVector, (time - initTime) / (fadeTime * 1000));
self.x = hudVector[0];
self.y = hudVector[1];
wait(0.0001);
}
}