t8-atian-menu

Black ops 4 (T8) information…

Zombies step EEs

Quest logic

The main logic behind zombies’ step EEs is in the zm_sq.gsc in the register() and start() methods.

Register

A quest is registered first using this method, each step must be registered in the order they want to be executed, registering a step is the same as registering an EE.

zm_sq::register(
    hash name, 
    hash step_name, 
    hash step_flag_name, 
    func setup_func, 
    func cleanup_func, 
    bool record_stat = undefined, 
    func record_stat_func = undefined
);

This function will register 2 flags,

The structure of the functions are:

setup_func(bool skip_to_step);
cleanup_func(bool skip_to_step, bool ended_early);
<player> record_stat_func();

The skip_to_step is a debug value only available with the dev blocks, by default this value is false, to be true the step should have been skip to this one, it can be useful when reading the script to know how to skip to this step.

The ended_early is a utility value only set to false by default, it is set to true when the step is skipped notifying the level by the step_flag_name + "_ended_early" event. Not all the steps can be skipped so you can bypass all the steps.

An EE is stored in the level._ee[name] object and each EE step is stored in the level._ee[name].steps[step_id] (step_id is an integer) the structure is

struct ee {
    // name of the ee
    hash name = name;
    // (debug only) skip to a particular step
    int skip_to_step = -1;
    // current step
    uint current_step = 0;
    // list of the steps
    array<ee_step> steps = array();
    // is the ee started
    bool started = false;
    // is the ee completed
    bool completed = false;
    // do we need to record the stat
    bool record_stat = undefined;
    // after stat record callback
    func var_35ccab99 = undefined;
}
struct ee_step {
    // parent ee object
    ee ee = parent_ee;
    // name of the step ee
    hash name = step_name;
    // is the step ee cleanup
    bool cleaned_up = false;
    // is the step ee completed
    bool completed = false;
    // is the step started
    bool started = false;
    // step ee flag name
    hash var_e788cdd7 = step_flag_name;
    // step ee cleanup function
    func cleanup_func = cleanup_func;
    // step ee setup function
    func setup_func = setup_func;
    // the next step after this step
    ee_step next_step = undefined;
}

Life of a quest

Once a quest is registered, it needs to be started, it is done using this function

zm_sq::start(
    hash name,
    bool is_available_casual_offline = false
);

A quest can’t be started more than once, even after its completion, so you can start it by yourself safely (if nothing is required)

Setup

It’ll run the setup function in a new thread and wait for one of these 2 events on the level object:

In the new thread, the setup function will call the event step_flag_name + "_started", call the ee step setup function, once done set step.completed = true and call the event step_flag_name + "_setup_completed" on the level object.

This process is cancelled if the step object receive the event "end_early", it’ll set step.completed = true and call the event step_flag_name + "_ended_early" on the level object.

Cleanup

Once the setup is done, the cleanup function is started (unlike the setup function, it can’t be cancelled), it set step.cleaned_up = true and the flag step_flag_name + "_completed"

Next

If the step has a next step, it will do:

Dev mode only, check if the skip_to_step is above the current step id, wait 0.5s

It’ll increase the ee.current_step by 1 and call in a new thread the next step.

Record stats

If the step doesn’t have a next step, it will do:

set ee.completed = true

set the flag name + "_completed"

if the game is an online game and if ee.record_stat is true it’ll do for each player:

EE per map

Global

#"music_sq" (Music / Chaos storyline)

steps

Voyage (zm_zodt8)

#"main_quest" (Main quest)

steps

#"hash_634eee6c99fa32d6" (shield frost upgrade)

steps

#"sea_walkers"

steps

#"vomit_blade"

steps

#"fishy_offering" (free perk)

steps

#"portal_pass"

steps

#"hash_68677a02650cad00"

steps

#"ships_engineer"

steps

#"boss_fight" (eye boss fight)

steps

#"hash_1222a3e832bad772"

steps

IX (zm_towers)

TODO

#"main_quest" (Main quest)

steps

#"ww_quest" (ww quest)

steps

#"hash_7848e22b4305215c"

steps

#"hash_39d41ab4004ca686"

steps

#"hash_1da6434ce50c3713"

steps

Blood of the Dead (zm_escape)

TODO

#"paschal_quest" (Main quest)

steps

#"jump_scare" (catwalk sniper scope event)

steps

#"drawings" (drawing ee)

steps

#"narrative_room"

steps

#"hash_e1a54725ab6e00b"

steps

#"monkey_bomb" (free monkey_bomb)

steps

#"laundry_day" (free monkey_bomb)

steps

#"spoon_quest"

steps

Classifier (zm_office)

#"main_quest" (main quest)

steps

#"hash_5a9580406af2d773"

steps

#"hash_63dc1e557f49595f"

steps

#"hash_6039fc2dd130edf5"

steps

#"jump_scare" (Richtofen jumpscare)

steps

#"narrative_room"

steps

Dead of the Night (zm_mansion)

#"zm_mansion_impaler" (Impaler ww quest)

steps

#"zm_jordans_painting"

steps

#"zm_jordans_reward"

steps

#"zm_mansion_triad" (stones/pap)

steps

#"zm_mansion_pap_quest"

steps

#"zm_mansion_silver_bullet" (silver bullets)

steps

#"hash_331f9ba64e2c2478"

steps

#"hash_4c0e5e4b34877996"

steps

#"hash_65636bbec86da22c"

steps

#"zm_storage_billiards"

steps

#"hash_578d0d7709a00e6e"

steps

#"hash_559b7237b8acece2"

steps

Ancient Evil (zm_red)

#"boss_battle"

steps

#"main_quest"

steps

#"prophecy"

steps

#"light"

steps

#"narrative_room"

steps

Alpha Omega (zm_white)

#"zm_white_main_quest" (main quest)

steps

#"zm_white_mq_crawler" (Crawler step)

steps

#"zm_white_mq_canister" (Canister step)

steps

#"zm_white_mq_circuit" (Circuit step)

steps

#"zm_white_mq_server" (Server step)

steps

steps

#"mee_projectile"

steps

#"mee_melee"

steps

#"mee_mixed"

steps

#"mee_galvaknuckle"

steps

#"jump_scare"

steps

#"private_mannequin_program"

steps

#"boss_battle"

steps

#"hash_7b3ce20f6b2317db"

steps

#"insanity_mode"

steps

Tag (zm_orange)

#"main_quest" (Main quest)

steps

#"ww_quest" (Wunderwaffe quest)

steps

#"hash_12114abc7407913b"

steps

#"hash_5e38e846ce88405b"

steps

#"hash_729a1e4eb041be9b"

steps

#"edge_of_the_world"

steps

#"hash_3a6788f4daed8c33"

steps

#"ee_tundragun" (tundragun)

steps

#"yellow_snowballs" (yellow snowballs)

steps

#"pap_rock" (pap)

steps

#"freeze_mode"

steps

#"hash_3e4c279707a5abe5"

steps

steps

Unknown steps

Need triage

#"pernell_archive" (zm_white?)

steps

#"hash_22d9cdbaac99885" (zm_office?)

steps