void Game::serialize()

in procgen/src/game.cpp [170:229]


void Game::serialize(WriteBuffer *b) {
    b->write_int(SERIALIZE_VERSION);
    
    b->write_string(game_name);

    b->write_int(options.paint_vel_info);
    b->write_int(options.use_generated_assets);
    b->write_int(options.use_monochrome_assets);
    b->write_int(options.restrict_themes);
    b->write_int(options.use_backgrounds);
    b->write_int(options.center_agent);
    b->write_int(options.debug_mode);
    b->write_int(options.distribution_mode);
    b->write_int(options.use_sequential_levels);

    b->write_int(options.use_easy_jump);
    b->write_int(options.plain_assets);
    b->write_int(options.physics_mode);

    b->write_int(grid_step);
    b->write_int(level_seed_low);
    b->write_int(level_seed_high);
    b->write_int(game_type);
    b->write_int(game_n);

    level_seed_rand_gen.serialize(b);
    rand_gen.serialize(b);

    b->write_float(step_data.reward);
    b->write_int(step_data.done);
    b->write_int(step_data.level_complete);

    b->write_int(action);
    b->write_int(timeout);

    b->write_int(current_level_seed);
    b->write_int(prev_level_seed);
    b->write_int(episodes_remaining);
    b->write_int(episode_done);

    b->write_int(last_reward_timer);
    b->write_float(last_reward);
    b->write_int(default_action);

    b->write_int(fixed_asset_seed);

    // don't save render buf as we will just re-write it on next observation
    // uint32_t render_buf[RES_W * RES_H];

    b->write_int(cur_time);
    b->write_int(is_waiting_for_step);

    // don't serialize these, since they are pointers, and will likely have incorrect values
    // if deserialized into another game object
    // int32_t *action_ptr;
    // std::vector<void *> obs_bufs;
    // std::vector<void *> info_bufs;
    // float *reward_ptr = nullptr;
    // uint8_t *first_ptr = nullptr;
}