|
|
@ -216,13 +216,13 @@ command_result dump_bp_mods(color_ostream &out, vector <string> & parameters)
|
|
|
|
|
|
|
|
|
|
|
|
output << "Race Index;Race;Caste;Bodypart Token;Bodypart Name;Tissue Layer;Modifier Type;Range\n";
|
|
|
|
output << "Race Index;Race;Caste;Bodypart Token;Bodypart Name;Tissue Layer;Modifier Type;Range\n";
|
|
|
|
|
|
|
|
|
|
|
|
for (int creatureIndex = 0; creatureIndex < world->raws.creatures.all.size(); creatureIndex++)
|
|
|
|
for (size_t creatureIndex = 0; creatureIndex < world->raws.creatures.all.size(); creatureIndex++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto creatureRaw = world->raws.creatures.all[creatureIndex];
|
|
|
|
auto creatureRaw = world->raws.creatures.all[creatureIndex];
|
|
|
|
for (int casteIndex = 0; casteIndex < creatureRaw->caste.size(); casteIndex++)
|
|
|
|
for (size_t casteIndex = 0; casteIndex < creatureRaw->caste.size(); casteIndex++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::caste_raw *casteRaw = creatureRaw->caste[casteIndex];
|
|
|
|
df::caste_raw *casteRaw = creatureRaw->caste[casteIndex];
|
|
|
|
for (int partIndex = 0; partIndex < casteRaw->bp_appearance.part_idx.size(); partIndex++)
|
|
|
|
for (size_t partIndex = 0; partIndex < casteRaw->bp_appearance.part_idx.size(); partIndex++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
output << creatureIndex << ";";
|
|
|
|
output << creatureIndex << ";";
|
|
|
|
output << creatureRaw->creature_id << ";";
|
|
|
|
output << creatureRaw->creature_id << ";";
|
|
|
@ -665,7 +665,7 @@ RemoteFortressReader::TiletypeVariant TranslateVariant(df::tiletype_variant vari
|
|
|
|
static command_result CheckHashes(color_ostream &stream, const EmptyMessage *in)
|
|
|
|
static command_result CheckHashes(color_ostream &stream, const EmptyMessage *in)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
clock_t start = clock();
|
|
|
|
clock_t start = clock();
|
|
|
|
for (int i = 0; i < world->map.map_blocks.size(); i++)
|
|
|
|
for (size_t i = 0; i < world->map.map_blocks.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::map_block * block = world->map.map_blocks[i];
|
|
|
|
df::map_block * block = world->map.map_blocks[i];
|
|
|
|
fletcher16((uint8_t*)(block->tiletype), 16 * 16 * sizeof(df::enums::tiletype::tiletype));
|
|
|
|
fletcher16((uint8_t*)(block->tiletype), 16 * 16 * sizeof(df::enums::tiletype::tiletype));
|
|
|
@ -737,7 +737,6 @@ bool IsBuildingChanged(DFCoord pos)
|
|
|
|
for (int x = 0; x < 16; x++)
|
|
|
|
for (int x = 0; x < 16; x++)
|
|
|
|
for (int y = 0; y < 16; y++)
|
|
|
|
for (int y = 0; y < 16; y++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DFCoord localPos = DFCoord(pos.x * 16 + x, pos.y * 16 + y, pos.z);
|
|
|
|
|
|
|
|
auto bld = block->occupancy[x][y].bits.building;
|
|
|
|
auto bld = block->occupancy[x][y].bits.building;
|
|
|
|
if (buildingHashes[pos] != bld)
|
|
|
|
if (buildingHashes[pos] != bld)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -766,13 +765,13 @@ bool IsspatterChanged(DFCoord pos)
|
|
|
|
|
|
|
|
|
|
|
|
uint16_t hash = 0;
|
|
|
|
uint16_t hash = 0;
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < materials.size(); i++)
|
|
|
|
for (size_t i = 0; i < materials.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto mat = materials[i];
|
|
|
|
auto mat = materials[i];
|
|
|
|
hash ^= fletcher16((uint8_t*)mat, sizeof(df::block_square_event_material_spatterst));
|
|
|
|
hash ^= fletcher16((uint8_t*)mat, sizeof(df::block_square_event_material_spatterst));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
for (int i = 0; i < items.size(); i++)
|
|
|
|
for (size_t i = 0; i < items.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto item = items[i];
|
|
|
|
auto item = items[i];
|
|
|
|
hash ^= fletcher16((uint8_t*)item, sizeof(df::block_square_event_item_spatterst));
|
|
|
|
hash ^= fletcher16((uint8_t*)item, sizeof(df::block_square_event_item_spatterst));
|
|
|
@ -807,7 +806,7 @@ bool isItemChanged(int i)
|
|
|
|
bool areItemsChanged(vector<int> * items)
|
|
|
|
bool areItemsChanged(vector<int> * items)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
bool result = false;
|
|
|
|
bool result = false;
|
|
|
|
for (int i = 0; i < items->size(); i++)
|
|
|
|
for (size_t i = 0; i < items->size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (isItemChanged(items->at(i)))
|
|
|
|
if (isItemChanged(items->at(i)))
|
|
|
|
result = true;
|
|
|
|
result = true;
|
|
|
@ -863,7 +862,7 @@ static command_result GetMaterialList(color_ostream &stream, const EmptyMessage
|
|
|
|
df::world_raws *raws = &world->raws;
|
|
|
|
df::world_raws *raws = &world->raws;
|
|
|
|
df::world_history *history = &world->history;
|
|
|
|
df::world_history *history = &world->history;
|
|
|
|
MaterialInfo mat;
|
|
|
|
MaterialInfo mat;
|
|
|
|
for (int i = 0; i < raws->inorganics.size(); i++)
|
|
|
|
for (size_t i = 0; i < raws->inorganics.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mat.decode(0, i);
|
|
|
|
mat.decode(0, i);
|
|
|
|
MaterialDefinition *mat_def = out->add_material_list();
|
|
|
|
MaterialDefinition *mat_def = out->add_material_list();
|
|
|
@ -871,7 +870,7 @@ static command_result GetMaterialList(color_ostream &stream, const EmptyMessage
|
|
|
|
mat_def->mutable_mat_pair()->set_mat_index(i);
|
|
|
|
mat_def->mutable_mat_pair()->set_mat_index(i);
|
|
|
|
mat_def->set_id(mat.getToken());
|
|
|
|
mat_def->set_id(mat.getToken());
|
|
|
|
mat_def->set_name(mat.toString()); //find the name at cave temperature;
|
|
|
|
mat_def->set_name(mat.toString()); //find the name at cave temperature;
|
|
|
|
if (raws->inorganics[i]->material.state_color[GetState(&raws->inorganics[i]->material)] < raws->descriptors.colors.size())
|
|
|
|
if (size_t(raws->inorganics[i]->material.state_color[GetState(&raws->inorganics[i]->material)]) < raws->descriptors.colors.size())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ConvertDFColorDescriptor(raws->inorganics[i]->material.state_color[GetState(&raws->inorganics[i]->material)], mat_def->mutable_state_color());
|
|
|
|
ConvertDFColorDescriptor(raws->inorganics[i]->material.state_color[GetState(&raws->inorganics[i]->material)], mat_def->mutable_state_color());
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -889,16 +888,16 @@ static command_result GetMaterialList(color_ostream &stream, const EmptyMessage
|
|
|
|
mat_def->mutable_mat_pair()->set_mat_index(j);
|
|
|
|
mat_def->mutable_mat_pair()->set_mat_index(j);
|
|
|
|
mat_def->set_id(mat.getToken());
|
|
|
|
mat_def->set_id(mat.getToken());
|
|
|
|
mat_def->set_name(mat.toString()); //find the name at cave temperature;
|
|
|
|
mat_def->set_name(mat.toString()); //find the name at cave temperature;
|
|
|
|
if (raws->mat_table.builtin[i]->state_color[GetState(raws->mat_table.builtin[i])] < raws->descriptors.colors.size())
|
|
|
|
if (size_t(raws->mat_table.builtin[i]->state_color[GetState(raws->mat_table.builtin[i])]) < raws->descriptors.colors.size())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ConvertDFColorDescriptor(raws->mat_table.builtin[i]->state_color[GetState(raws->mat_table.builtin[i])], mat_def->mutable_state_color());
|
|
|
|
ConvertDFColorDescriptor(raws->mat_table.builtin[i]->state_color[GetState(raws->mat_table.builtin[i])], mat_def->mutable_state_color());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int i = 0; i < raws->creatures.all.size(); i++)
|
|
|
|
for (size_t i = 0; i < raws->creatures.all.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::creature_raw * creature = raws->creatures.all[i];
|
|
|
|
df::creature_raw * creature = raws->creatures.all[i];
|
|
|
|
for (int j = 0; j < creature->material.size(); j++)
|
|
|
|
for (size_t j = 0; j < creature->material.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mat.decode(j + MaterialInfo::CREATURE_BASE, i);
|
|
|
|
mat.decode(j + MaterialInfo::CREATURE_BASE, i);
|
|
|
|
MaterialDefinition *mat_def = out->add_material_list();
|
|
|
|
MaterialDefinition *mat_def = out->add_material_list();
|
|
|
@ -906,13 +905,13 @@ static command_result GetMaterialList(color_ostream &stream, const EmptyMessage
|
|
|
|
mat_def->mutable_mat_pair()->set_mat_index(i);
|
|
|
|
mat_def->mutable_mat_pair()->set_mat_index(i);
|
|
|
|
mat_def->set_id(mat.getToken());
|
|
|
|
mat_def->set_id(mat.getToken());
|
|
|
|
mat_def->set_name(mat.toString()); //find the name at cave temperature;
|
|
|
|
mat_def->set_name(mat.toString()); //find the name at cave temperature;
|
|
|
|
if (creature->material[j]->state_color[GetState(creature->material[j])] < raws->descriptors.colors.size())
|
|
|
|
if (size_t(creature->material[j]->state_color[GetState(creature->material[j])]) < raws->descriptors.colors.size())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ConvertDFColorDescriptor(creature->material[j]->state_color[GetState(creature->material[j])], mat_def->mutable_state_color());
|
|
|
|
ConvertDFColorDescriptor(creature->material[j]->state_color[GetState(creature->material[j])], mat_def->mutable_state_color());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//for (int i = 0; i < history->figures.size(); i++)
|
|
|
|
//for (size_t i = 0; i < history->figures.size(); i++)
|
|
|
|
//{
|
|
|
|
//{
|
|
|
|
// df::historical_figure * figure = history->figures[i];
|
|
|
|
// df::historical_figure * figure = history->figures[i];
|
|
|
|
// if (figure->race < 0)
|
|
|
|
// if (figure->race < 0)
|
|
|
@ -937,10 +936,10 @@ static command_result GetMaterialList(color_ostream &stream, const EmptyMessage
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
//}
|
|
|
|
for (int i = 0; i < raws->plants.all.size(); i++)
|
|
|
|
for (size_t i = 0; i < raws->plants.all.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::plant_raw * plant = raws->plants.all[i];
|
|
|
|
df::plant_raw * plant = raws->plants.all[i];
|
|
|
|
for (int j = 0; j < plant->material.size(); j++)
|
|
|
|
for (size_t j = 0; j < plant->material.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mat.decode(j + 419, i);
|
|
|
|
mat.decode(j + 419, i);
|
|
|
|
MaterialDefinition *mat_def = out->add_material_list();
|
|
|
|
MaterialDefinition *mat_def = out->add_material_list();
|
|
|
@ -948,7 +947,7 @@ static command_result GetMaterialList(color_ostream &stream, const EmptyMessage
|
|
|
|
mat_def->mutable_mat_pair()->set_mat_index(i);
|
|
|
|
mat_def->mutable_mat_pair()->set_mat_index(i);
|
|
|
|
mat_def->set_id(mat.getToken());
|
|
|
|
mat_def->set_id(mat.getToken());
|
|
|
|
mat_def->set_name(mat.toString()); //find the name at cave temperature;
|
|
|
|
mat_def->set_name(mat.toString()); //find the name at cave temperature;
|
|
|
|
if (plant->material[j]->state_color[GetState(plant->material[j])] < raws->descriptors.colors.size())
|
|
|
|
if (size_t(plant->material[j]->state_color[GetState(plant->material[j])]) < raws->descriptors.colors.size())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ConvertDFColorDescriptor(plant->material[j]->state_color[GetState(plant->material[j])], mat_def->mutable_state_color());
|
|
|
|
ConvertDFColorDescriptor(plant->material[j]->state_color[GetState(plant->material[j])], mat_def->mutable_state_color());
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -971,7 +970,7 @@ static command_result GetGrowthList(color_ostream &stream, const EmptyMessage *i
|
|
|
|
return CR_OK;//'.
|
|
|
|
return CR_OK;//'.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < raws->plants.all.size(); i++)
|
|
|
|
for (size_t i = 0; i < raws->plants.all.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::plant_raw * pp = raws->plants.all[i];
|
|
|
|
df::plant_raw * pp = raws->plants.all[i];
|
|
|
|
if (!pp)
|
|
|
|
if (!pp)
|
|
|
@ -982,7 +981,7 @@ static command_result GetGrowthList(color_ostream &stream, const EmptyMessage *i
|
|
|
|
basePlant->mutable_mat_pair()->set_mat_type(-1);
|
|
|
|
basePlant->mutable_mat_pair()->set_mat_type(-1);
|
|
|
|
basePlant->mutable_mat_pair()->set_mat_index(i);
|
|
|
|
basePlant->mutable_mat_pair()->set_mat_index(i);
|
|
|
|
#if DF_VERSION_INT > 40001
|
|
|
|
#if DF_VERSION_INT > 40001
|
|
|
|
for (int g = 0; g < pp->growths.size(); g++)
|
|
|
|
for (size_t g = 0; g < pp->growths.size(); g++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::plant_growth* growth = pp->growths[g];
|
|
|
|
df::plant_growth* growth = pp->growths[g];
|
|
|
|
if (!growth)
|
|
|
|
if (!growth)
|
|
|
@ -1024,7 +1023,7 @@ void CopyBlock(df::map_block * DfBlock, RemoteFortressReader::MapBlock * NetBloc
|
|
|
|
|
|
|
|
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
df::map_block_column * column = df::global::world->map.column_index[(DfBlock->map_pos.x / 48) * 3][(DfBlock->map_pos.y / 48) * 3];
|
|
|
|
df::map_block_column * column = df::global::world->map.column_index[(DfBlock->map_pos.x / 48) * 3][(DfBlock->map_pos.y / 48) * 3];
|
|
|
|
for (int i = 0; i < column->plants.size(); i++)
|
|
|
|
for (size_t i = 0; i < column->plants.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::plant* plant = column->plants[i];
|
|
|
|
df::plant* plant = column->plants[i];
|
|
|
|
if (plant->tree_info == NULL)
|
|
|
|
if (plant->tree_info == NULL)
|
|
|
@ -1180,7 +1179,7 @@ void CopyDesignation(df::map_block * DfBlock, RemoteFortressReader::MapBlock * N
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
for (int i = 0; i < world->jobs.postings.size(); i++)
|
|
|
|
for (size_t i = 0; i < world->jobs.postings.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto job = world->jobs.postings[i]->job;
|
|
|
|
auto job = world->jobs.postings[i]->job;
|
|
|
|
if (job == nullptr)
|
|
|
|
if (job == nullptr)
|
|
|
@ -1261,7 +1260,7 @@ void CopyProjectiles(RemoteFortressReader::MapBlock * NetBlock)
|
|
|
|
NetItem->set_velocity_z(diff.z / max_dist);
|
|
|
|
NetItem->set_velocity_z(diff.z / max_dist);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int i = 0; i < world->vehicles.active.size(); i++)
|
|
|
|
for (size_t i = 0; i < world->vehicles.active.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
bool isProj = false;
|
|
|
|
bool isProj = false;
|
|
|
|
auto vehicle = world->vehicles.active[i];
|
|
|
|
auto vehicle = world->vehicles.active[i];
|
|
|
@ -1297,7 +1296,7 @@ void CopyProjectiles(RemoteFortressReader::MapBlock * NetBlock)
|
|
|
|
void CopyBuildings(DFCoord min, DFCoord max, RemoteFortressReader::MapBlock * NetBlock, MapExtras::MapCache * MC)
|
|
|
|
void CopyBuildings(DFCoord min, DFCoord max, RemoteFortressReader::MapBlock * NetBlock, MapExtras::MapCache * MC)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < df::global::world->buildings.all.size(); i++)
|
|
|
|
for (size_t i = 0; i < df::global::world->buildings.all.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::building * bld = df::global::world->buildings.all[i];
|
|
|
|
df::building * bld = df::global::world->buildings.all[i];
|
|
|
|
if (bld->x1 >= max.x || bld->y1 >= max.y || bld->x2 < min.x || bld->y2 < min.y)
|
|
|
|
if (bld->x1 >= max.x || bld->y1 >= max.y || bld->x2 < min.x || bld->y2 < min.y)
|
|
|
@ -1328,7 +1327,7 @@ void CopyBuildings(DFCoord min, DFCoord max, RemoteFortressReader::MapBlock * Ne
|
|
|
|
df::building_actual* actualBuilding = virtual_cast<df::building_actual>(bld);
|
|
|
|
df::building_actual* actualBuilding = virtual_cast<df::building_actual>(bld);
|
|
|
|
if (actualBuilding)
|
|
|
|
if (actualBuilding)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for (int i = 0; i < actualBuilding->contained_items.size(); i++)
|
|
|
|
for (size_t i = 0; i < actualBuilding->contained_items.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto buildingItem = out_bld->add_items();
|
|
|
|
auto buildingItem = out_bld->add_items();
|
|
|
|
buildingItem->set_mode(actualBuilding->contained_items[i]->use_mode);
|
|
|
|
buildingItem->set_mode(actualBuilding->contained_items[i]->use_mode);
|
|
|
@ -1357,7 +1356,7 @@ void Copyspatters(df::map_block * DfBlock, RemoteFortressReader::MapBlock * NetB
|
|
|
|
for (int xx = 0; xx < 16; xx++)
|
|
|
|
for (int xx = 0; xx < 16; xx++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto send_pile = NetBlock->add_spatterpile();
|
|
|
|
auto send_pile = NetBlock->add_spatterpile();
|
|
|
|
for (int i = 0; i < materials.size(); i++)
|
|
|
|
for (size_t i = 0; i < materials.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto mat = materials[i];
|
|
|
|
auto mat = materials[i];
|
|
|
|
if (mat->amount[xx][yy] == 0)
|
|
|
|
if (mat->amount[xx][yy] == 0)
|
|
|
@ -1368,7 +1367,7 @@ void Copyspatters(df::map_block * DfBlock, RemoteFortressReader::MapBlock * NetB
|
|
|
|
send_spat->set_amount(mat->amount[xx][yy]);
|
|
|
|
send_spat->set_amount(mat->amount[xx][yy]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
for (int i = 0; i < items.size(); i++)
|
|
|
|
for (size_t i = 0; i < items.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto item = items[i];
|
|
|
|
auto item = items[i];
|
|
|
|
if (item->amount[xx][yy] == 0)
|
|
|
|
if (item->amount[xx][yy] == 0)
|
|
|
@ -1381,7 +1380,7 @@ void Copyspatters(df::map_block * DfBlock, RemoteFortressReader::MapBlock * NetB
|
|
|
|
send_item->set_mat_index(item->item_subtype);
|
|
|
|
send_item->set_mat_index(item->item_subtype);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
int grassPercent = 0;
|
|
|
|
int grassPercent = 0;
|
|
|
|
for (int i = 0; i < grasses.size(); i++)
|
|
|
|
for (size_t i = 0; i < grasses.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto grass = grasses[i];
|
|
|
|
auto grass = grasses[i];
|
|
|
|
if (grass->amount[xx][yy] > grassPercent)
|
|
|
|
if (grass->amount[xx][yy] > grassPercent)
|
|
|
@ -1397,7 +1396,7 @@ void CopyItems(df::map_block * DfBlock, RemoteFortressReader::MapBlock * NetBloc
|
|
|
|
NetBlock->set_map_x(DfBlock->map_pos.x);
|
|
|
|
NetBlock->set_map_x(DfBlock->map_pos.x);
|
|
|
|
NetBlock->set_map_y(DfBlock->map_pos.y);
|
|
|
|
NetBlock->set_map_y(DfBlock->map_pos.y);
|
|
|
|
NetBlock->set_map_z(DfBlock->map_pos.z);
|
|
|
|
NetBlock->set_map_z(DfBlock->map_pos.z);
|
|
|
|
for (int i = 0; i < DfBlock->items.size(); i++)
|
|
|
|
for (size_t i = 0; i < DfBlock->items.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int id = DfBlock->items[i];
|
|
|
|
int id = DfBlock->items[i];
|
|
|
|
|
|
|
|
|
|
|
@ -1442,7 +1441,7 @@ void CopyFlows(df::map_block * DfBlock, RemoteFortressReader::MapBlock * NetBloc
|
|
|
|
NetBlock->set_map_x(DfBlock->map_pos.x);
|
|
|
|
NetBlock->set_map_x(DfBlock->map_pos.x);
|
|
|
|
NetBlock->set_map_y(DfBlock->map_pos.y);
|
|
|
|
NetBlock->set_map_y(DfBlock->map_pos.y);
|
|
|
|
NetBlock->set_map_z(DfBlock->map_pos.z);
|
|
|
|
NetBlock->set_map_z(DfBlock->map_pos.z);
|
|
|
|
for (int i = 0; i < DfBlock->flows.size(); i++)
|
|
|
|
for (size_t i = 0; i < DfBlock->flows.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
CopyFlow(DfBlock->flows[i], NetBlock->add_flows(), i);
|
|
|
|
CopyFlow(DfBlock->flows[i], NetBlock->add_flows(), i);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1517,7 +1516,7 @@ static command_result GetBlockList(color_ostream &stream, const BlockRequest *in
|
|
|
|
bool spatterChanged = IsspatterChanged(pos);
|
|
|
|
bool spatterChanged = IsspatterChanged(pos);
|
|
|
|
bool itemsChanged = block->items.size() > 0;
|
|
|
|
bool itemsChanged = block->items.size() > 0;
|
|
|
|
bool flows = block->flows.size() > 0;
|
|
|
|
bool flows = block->flows.size() > 0;
|
|
|
|
RemoteFortressReader::MapBlock *net_block;
|
|
|
|
RemoteFortressReader::MapBlock *net_block = nullptr;
|
|
|
|
if (tileChanged || desChanged || spatterChanged || firstBlock || itemsChanged || flows)
|
|
|
|
if (tileChanged || desChanged || spatterChanged || firstBlock || itemsChanged || flows)
|
|
|
|
net_block = out->add_map_blocks();
|
|
|
|
net_block = out->add_map_blocks();
|
|
|
|
if (tileChanged)
|
|
|
|
if (tileChanged)
|
|
|
@ -1569,7 +1568,7 @@ static command_result GetBlockList(color_ostream &stream, const BlockRequest *in
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < world->engravings.size(); i++)
|
|
|
|
for (size_t i = 0; i < world->engravings.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto engraving = world->engravings[i];
|
|
|
|
auto engraving = world->engravings[i];
|
|
|
|
if (engraving->pos.x < (min_x * 16) || engraving->pos.x >(max_x * 16))
|
|
|
|
if (engraving->pos.x < (min_x * 16) || engraving->pos.x >(max_x * 16))
|
|
|
@ -1589,7 +1588,7 @@ static command_result GetBlockList(color_ostream &stream, const BlockRequest *in
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for (int i = 0; i < world->art_image_chunks.size(); i++)
|
|
|
|
for (size_t i = 0; i < world->art_image_chunks.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (world->art_image_chunks[i]->id == engraving->art_id)
|
|
|
|
if (world->art_image_chunks[i]->id == engraving->art_id)
|
|
|
|
chunk = world->art_image_chunks[i];
|
|
|
|
chunk = world->art_image_chunks[i];
|
|
|
@ -1616,7 +1615,7 @@ static command_result GetBlockList(color_ostream &stream, const BlockRequest *in
|
|
|
|
netEngraving->set_southwest(engraving->flags.bits.southwest);
|
|
|
|
netEngraving->set_southwest(engraving->flags.bits.southwest);
|
|
|
|
netEngraving->set_southeast(engraving->flags.bits.southeast);
|
|
|
|
netEngraving->set_southeast(engraving->flags.bits.southeast);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int i = 0; i < world->ocean_waves.size(); i++)
|
|
|
|
for (size_t i = 0; i < world->ocean_waves.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto wave = world->ocean_waves[i];
|
|
|
|
auto wave = world->ocean_waves[i];
|
|
|
|
auto netWave = out->add_ocean_waves();
|
|
|
|
auto netWave = out->add_ocean_waves();
|
|
|
@ -1666,7 +1665,7 @@ static command_result GetPlantList(color_ostream &stream, const BlockRequest *in
|
|
|
|
if (xx < 0 || yy < 0 || xx >= world->map.x_count_block || yy >= world->map.y_count_block)
|
|
|
|
if (xx < 0 || yy < 0 || xx >= world->map.x_count_block || yy >= world->map.y_count_block)
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
df::map_block_column * column = world->map.column_index[xx][yy];
|
|
|
|
df::map_block_column * column = world->map.column_index[xx][yy];
|
|
|
|
for (int i = 0; i < column->plants.size(); i++)
|
|
|
|
for (size_t i = 0; i < column->plants.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::plant * plant = column->plants[i];
|
|
|
|
df::plant * plant = column->plants[i];
|
|
|
|
if (!plant->tree_info)
|
|
|
|
if (!plant->tree_info)
|
|
|
@ -1706,7 +1705,7 @@ static command_result GetUnitList(color_ostream &stream, const EmptyMessage *in,
|
|
|
|
static command_result GetUnitListInside(color_ostream &stream, const BlockRequest *in, UnitList *out)
|
|
|
|
static command_result GetUnitListInside(color_ostream &stream, const BlockRequest *in, UnitList *out)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto world = df::global::world;
|
|
|
|
auto world = df::global::world;
|
|
|
|
for (int i = 0; i < world->units.all.size(); i++)
|
|
|
|
for (size_t i = 0; i < world->units.all.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::unit * unit = world->units.all[i];
|
|
|
|
df::unit * unit = world->units.all[i];
|
|
|
|
auto send_unit = out->add_creature_list();
|
|
|
|
auto send_unit = out->add_creature_list();
|
|
|
@ -1743,11 +1742,11 @@ static command_result GetUnitListInside(color_ostream &stream, const BlockReques
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
auto appearance = send_unit->mutable_appearance();
|
|
|
|
auto appearance = send_unit->mutable_appearance();
|
|
|
|
for (int j = 0; j < unit->appearance.body_modifiers.size(); j++)
|
|
|
|
for (size_t j = 0; j < unit->appearance.body_modifiers.size(); j++)
|
|
|
|
appearance->add_body_modifiers(unit->appearance.body_modifiers[j]);
|
|
|
|
appearance->add_body_modifiers(unit->appearance.body_modifiers[j]);
|
|
|
|
for (int j = 0; j < unit->appearance.bp_modifiers.size(); j++)
|
|
|
|
for (size_t j = 0; j < unit->appearance.bp_modifiers.size(); j++)
|
|
|
|
appearance->add_bp_modifiers(unit->appearance.bp_modifiers[j]);
|
|
|
|
appearance->add_bp_modifiers(unit->appearance.bp_modifiers[j]);
|
|
|
|
for (int j = 0; j < unit->appearance.colors.size(); j++)
|
|
|
|
for (size_t j = 0; j < unit->appearance.colors.size(); j++)
|
|
|
|
appearance->add_colors(unit->appearance.colors[j]);
|
|
|
|
appearance->add_colors(unit->appearance.colors[j]);
|
|
|
|
appearance->set_size_modifier(unit->appearance.size_modifier);
|
|
|
|
appearance->set_size_modifier(unit->appearance.size_modifier);
|
|
|
|
|
|
|
|
|
|
|
@ -1757,7 +1756,7 @@ static command_result GetUnitListInside(color_ostream &stream, const BlockReques
|
|
|
|
|
|
|
|
|
|
|
|
if (Units::getNoblePositions(&pvec, unit))
|
|
|
|
if (Units::getNoblePositions(&pvec, unit))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for (int j = 0; j < pvec.size(); j++)
|
|
|
|
for (size_t j = 0; j < pvec.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto noble_positon = pvec[j];
|
|
|
|
auto noble_positon = pvec[j];
|
|
|
|
send_unit->add_noble_positions(noble_positon.position->code);
|
|
|
|
send_unit->add_noble_positions(noble_positon.position->code);
|
|
|
@ -1769,7 +1768,7 @@ static command_result GetUnitListInside(color_ostream &stream, const BlockReques
|
|
|
|
auto creatureRaw = world->raws.creatures.all[unit->race];
|
|
|
|
auto creatureRaw = world->raws.creatures.all[unit->race];
|
|
|
|
auto casteRaw = creatureRaw->caste[unit->caste];
|
|
|
|
auto casteRaw = creatureRaw->caste[unit->caste];
|
|
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < unit->appearance.tissue_style_type.size(); j++)
|
|
|
|
for (size_t j = 0; j < unit->appearance.tissue_style_type.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto type = unit->appearance.tissue_style_type[j];
|
|
|
|
auto type = unit->appearance.tissue_style_type[j];
|
|
|
|
if (type < 0)
|
|
|
|
if (type < 0)
|
|
|
@ -1802,7 +1801,7 @@ static command_result GetUnitListInside(color_ostream &stream, const BlockReques
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < unit->inventory.size(); j++)
|
|
|
|
for (size_t j = 0; j < unit->inventory.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto inventory_item = unit->inventory[j];
|
|
|
|
auto inventory_item = unit->inventory[j];
|
|
|
|
auto sent_item = send_unit->add_inventory();
|
|
|
|
auto sent_item = send_unit->add_inventory();
|
|
|
@ -1912,7 +1911,7 @@ DFCoord GetMapCenter()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
else
|
|
|
|
else
|
|
|
|
for (int i = 0; i < df::global::world->armies.all.size(); i++)
|
|
|
|
for (size_t i = 0; i < df::global::world->armies.all.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::army * thisArmy = df::global::world->armies.all[i];
|
|
|
|
df::army * thisArmy = df::global::world->armies.all[i];
|
|
|
|
if (thisArmy->flags.is_set(df::enums::army_flags::player))
|
|
|
|
if (thisArmy->flags.is_set(df::enums::army_flags::player))
|
|
|
@ -2056,7 +2055,7 @@ static void SetRegionTile(RegionTile * out, df::region_map_entry * e1)
|
|
|
|
out->set_water_elevation(99);
|
|
|
|
out->set_water_elevation(99);
|
|
|
|
|
|
|
|
|
|
|
|
int topLayer = 0;
|
|
|
|
int topLayer = 0;
|
|
|
|
for (int i = 0; i < geoBiome->layers.size(); i++)
|
|
|
|
for (size_t i = 0; i < geoBiome->layers.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto layer = geoBiome->layers[i];
|
|
|
|
auto layer = geoBiome->layers[i];
|
|
|
|
if (layer->top_height == 0)
|
|
|
|
if (layer->top_height == 0)
|
|
|
@ -2076,7 +2075,7 @@ static void SetRegionTile(RegionTile * out, df::region_map_entry * e1)
|
|
|
|
surfaceMat->set_mat_index(topLayer);
|
|
|
|
surfaceMat->set_mat_index(topLayer);
|
|
|
|
surfaceMat->set_mat_type(0);
|
|
|
|
surfaceMat->set_mat_type(0);
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < region->population.size(); i++)
|
|
|
|
for (size_t i = 0; i < region->population.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto pop = region->population[i];
|
|
|
|
auto pop = region->population[i];
|
|
|
|
if (pop->type == world_population_type::Grass)
|
|
|
|
if (pop->type == world_population_type::Grass)
|
|
|
@ -2286,7 +2285,7 @@ static void CopyLocalMap(df::world_data * worldData, df::world_region_details* w
|
|
|
|
df::world_region_details * east = NULL;
|
|
|
|
df::world_region_details * east = NULL;
|
|
|
|
df::world_region_details * southEast = NULL;
|
|
|
|
df::world_region_details * southEast = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < worldData->region_details.size(); i++)
|
|
|
|
for (size_t i = 0; i < worldData->region_details.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto region = worldData->region_details[i];
|
|
|
|
auto region = worldData->region_details[i];
|
|
|
|
if (region->pos.x == pos_x + 1 && region->pos.y == pos_y + 1)
|
|
|
|
if (region->pos.x == pos_x + 1 && region->pos.y == pos_y + 1)
|
|
|
@ -2373,7 +2372,7 @@ static void CopyLocalMap(df::world_data * worldData, df::world_region_details* w
|
|
|
|
df::world_region_details * east = NULL;
|
|
|
|
df::world_region_details * east = NULL;
|
|
|
|
df::world_region_details * southEast = NULL;
|
|
|
|
df::world_region_details * southEast = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < worldData->region_details.size(); i++)
|
|
|
|
for (size_t i = 0; i < worldData->region_details.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto region = worldData->region_details[i];
|
|
|
|
auto region = worldData->region_details[i];
|
|
|
|
if (region->pos.x == pos_x + 1 && region->pos.y == pos_y + 1)
|
|
|
|
if (region->pos.x == pos_x + 1 && region->pos.y == pos_y + 1)
|
|
|
@ -2482,7 +2481,7 @@ static void CopyLocalMap(df::world_data * worldData, df::world_region_details* w
|
|
|
|
|
|
|
|
|
|
|
|
auto regionMap = worldData->region_map[pos_x][pos_y];
|
|
|
|
auto regionMap = worldData->region_map[pos_x][pos_y];
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < worldData->sites.size(); i++)
|
|
|
|
for (size_t i = 0; i < worldData->sites.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::world_site* site = worldData->sites[i];
|
|
|
|
df::world_site* site = worldData->sites[i];
|
|
|
|
if (!site)
|
|
|
|
if (!site)
|
|
|
@ -2510,7 +2509,7 @@ static void CopyLocalMap(df::world_data * worldData, df::world_region_details* w
|
|
|
|
if (region_x < 0 || region_y < 0 || region_x >= 16 || region_y >= 16)
|
|
|
|
if (region_x < 0 || region_y < 0 || region_x >= 16 || region_y >= 16)
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < realization->building_map[site_x][site_y].buildings.size(); j++)
|
|
|
|
for (size_t j = 0; j < realization->building_map[site_x][site_y].buildings.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto in_building = realization->building_map[site_x][site_y].buildings[j];
|
|
|
|
auto in_building = realization->building_map[site_x][site_y].buildings[j];
|
|
|
|
auto out_building = outputTiles[region_x][region_y]->add_buildings();
|
|
|
|
auto out_building = outputTiles[region_x][region_y]->add_buildings();
|
|
|
@ -2565,7 +2564,7 @@ static command_result GetRegionMaps(color_ostream &stream, const EmptyMessage *i
|
|
|
|
return CR_FAILURE;
|
|
|
|
return CR_FAILURE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
df::world_data * data = df::global::world->world_data;
|
|
|
|
df::world_data * data = df::global::world->world_data;
|
|
|
|
for (int i = 0; i < data->region_details.size(); i++)
|
|
|
|
for (size_t i = 0; i < data->region_details.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::world_region_details * region = data->region_details[i];
|
|
|
|
df::world_region_details * region = data->region_details[i];
|
|
|
|
if (!region)
|
|
|
|
if (!region)
|
|
|
@ -2583,7 +2582,7 @@ static command_result GetRegionMapsNew(color_ostream &stream, const EmptyMessage
|
|
|
|
return CR_FAILURE;
|
|
|
|
return CR_FAILURE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
df::world_data * data = df::global::world->world_data;
|
|
|
|
df::world_data * data = df::global::world->world_data;
|
|
|
|
for (int i = 0; i < data->region_details.size(); i++)
|
|
|
|
for (size_t i = 0; i < data->region_details.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::world_region_details * region = data->region_details[i];
|
|
|
|
df::world_region_details * region = data->region_details[i];
|
|
|
|
if (!region)
|
|
|
|
if (!region)
|
|
|
@ -2641,7 +2640,7 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
|
|
|
|
|
|
|
|
send_creature->set_adultsize(orig_creature->adultsize);
|
|
|
|
send_creature->set_adultsize(orig_creature->adultsize);
|
|
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < orig_creature->caste.size(); j++)
|
|
|
|
for (size_t j = 0; j < orig_creature->caste.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto orig_caste = orig_creature->caste[j];
|
|
|
|
auto orig_caste = orig_creature->caste[j];
|
|
|
|
if (!orig_caste)
|
|
|
|
if (!orig_caste)
|
|
|
@ -2663,7 +2662,7 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
send_caste->add_child_name(orig_caste->child_name[1]);
|
|
|
|
send_caste->add_child_name(orig_caste->child_name[1]);
|
|
|
|
send_caste->set_gender(orig_caste->gender);
|
|
|
|
send_caste->set_gender(orig_caste->gender);
|
|
|
|
|
|
|
|
|
|
|
|
for (int partIndex = 0; partIndex < orig_caste->body_info.body_parts.size(); partIndex++)
|
|
|
|
for (size_t partIndex = 0; partIndex < orig_caste->body_info.body_parts.size(); partIndex++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto orig_part = orig_caste->body_info.body_parts[partIndex];
|
|
|
|
auto orig_part = orig_caste->body_info.body_parts[partIndex];
|
|
|
|
if (!orig_part)
|
|
|
|
if (!orig_part)
|
|
|
@ -2679,7 +2678,7 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
send_part->add_flags(orig_part->flags.is_set((body_part_raw_flags::body_part_raw_flags)partFlagIndex));
|
|
|
|
send_part->add_flags(orig_part->flags.is_set((body_part_raw_flags::body_part_raw_flags)partFlagIndex));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int layerIndex = 0; layerIndex < orig_part->layers.size(); layerIndex++)
|
|
|
|
for (size_t layerIndex = 0; layerIndex < orig_part->layers.size(); layerIndex++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto orig_layer = orig_part->layers[layerIndex];
|
|
|
|
auto orig_layer = orig_part->layers[layerIndex];
|
|
|
|
if (!orig_layer)
|
|
|
|
if (!orig_layer)
|
|
|
@ -2689,7 +2688,7 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
send_layer->set_layer_name(orig_layer->layer_name);
|
|
|
|
send_layer->set_layer_name(orig_layer->layer_name);
|
|
|
|
send_layer->set_tissue_id(orig_layer->tissue_id);
|
|
|
|
send_layer->set_tissue_id(orig_layer->tissue_id);
|
|
|
|
send_layer->set_layer_depth(orig_layer->layer_depth);
|
|
|
|
send_layer->set_layer_depth(orig_layer->layer_depth);
|
|
|
|
for (int layerModIndex = 0; layerModIndex < orig_layer->bp_modifiers.size(); layerModIndex++)
|
|
|
|
for (size_t layerModIndex = 0; layerModIndex < orig_layer->bp_modifiers.size(); layerModIndex++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
send_layer->add_bp_modifiers(orig_layer->bp_modifiers[layerModIndex]);
|
|
|
|
send_layer->add_bp_modifiers(orig_layer->bp_modifiers[layerModIndex]);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2700,7 +2699,7 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
|
|
|
|
|
|
|
|
send_caste->set_total_relsize(orig_caste->body_info.total_relsize);
|
|
|
|
send_caste->set_total_relsize(orig_caste->body_info.total_relsize);
|
|
|
|
|
|
|
|
|
|
|
|
for (int k = 0; k < orig_caste->bp_appearance.modifiers.size(); k++)
|
|
|
|
for (size_t k = 0; k < orig_caste->bp_appearance.modifiers.size(); k++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto send_mod = send_caste->add_modifiers();
|
|
|
|
auto send_mod = send_caste->add_modifiers();
|
|
|
|
auto orig_mod = orig_caste->bp_appearance.modifiers[k];
|
|
|
|
auto orig_mod = orig_caste->bp_appearance.modifiers[k];
|
|
|
@ -2720,13 +2719,13 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int k = 0; k < orig_caste->bp_appearance.modifier_idx.size(); k++)
|
|
|
|
for (size_t k = 0; k < orig_caste->bp_appearance.modifier_idx.size(); k++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
send_caste->add_modifier_idx(orig_caste->bp_appearance.modifier_idx[k]);
|
|
|
|
send_caste->add_modifier_idx(orig_caste->bp_appearance.modifier_idx[k]);
|
|
|
|
send_caste->add_part_idx(orig_caste->bp_appearance.part_idx[k]);
|
|
|
|
send_caste->add_part_idx(orig_caste->bp_appearance.part_idx[k]);
|
|
|
|
send_caste->add_layer_idx(orig_caste->bp_appearance.layer_idx[k]);
|
|
|
|
send_caste->add_layer_idx(orig_caste->bp_appearance.layer_idx[k]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int k = 0; k < orig_caste->body_appearance_modifiers.size(); k++)
|
|
|
|
for (size_t k = 0; k < orig_caste->body_appearance_modifiers.size(); k++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto send_mod = send_caste->add_body_appearance_modifiers();
|
|
|
|
auto send_mod = send_caste->add_body_appearance_modifiers();
|
|
|
|
auto orig_mod = orig_caste->body_appearance_modifiers[k];
|
|
|
|
auto orig_mod = orig_caste->body_appearance_modifiers[k];
|
|
|
@ -2746,17 +2745,17 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
send_mod->set_mod_max(orig_mod->ranges[6]);
|
|
|
|
send_mod->set_mod_max(orig_mod->ranges[6]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int k = 0; k < orig_caste->color_modifiers.size(); k++)
|
|
|
|
for (size_t k = 0; k < orig_caste->color_modifiers.size(); k++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto send_mod = send_caste->add_color_modifiers();
|
|
|
|
auto send_mod = send_caste->add_color_modifiers();
|
|
|
|
auto orig_mod = orig_caste->color_modifiers[k];
|
|
|
|
auto orig_mod = orig_caste->color_modifiers[k];
|
|
|
|
|
|
|
|
|
|
|
|
for (int l = 0; l < orig_mod->pattern_index.size(); l++)
|
|
|
|
for (size_t l = 0; l < orig_mod->pattern_index.size(); l++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto orig_pattern = world->raws.descriptors.patterns[orig_mod->pattern_index[l]];
|
|
|
|
auto orig_pattern = world->raws.descriptors.patterns[orig_mod->pattern_index[l]];
|
|
|
|
auto send_pattern = send_mod->add_patterns();
|
|
|
|
auto send_pattern = send_mod->add_patterns();
|
|
|
|
|
|
|
|
|
|
|
|
for (int m = 0; m < orig_pattern->colors.size(); m++)
|
|
|
|
for (size_t m = 0; m < orig_pattern->colors.size(); m++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto send_color = send_pattern->add_colors();
|
|
|
|
auto send_color = send_pattern->add_colors();
|
|
|
|
auto orig_color = world->raws.descriptors.colors[orig_pattern->colors[m]];
|
|
|
|
auto orig_color = world->raws.descriptors.colors[orig_pattern->colors[m]];
|
|
|
@ -2769,7 +2768,7 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
send_pattern->set_pattern((PatternType)orig_pattern->pattern);
|
|
|
|
send_pattern->set_pattern((PatternType)orig_pattern->pattern);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int l = 0; l < orig_mod->body_part_id.size(); l++)
|
|
|
|
for (size_t l = 0; l < orig_mod->body_part_id.size(); l++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
send_mod->add_body_part_id(orig_mod->body_part_id[l]);
|
|
|
|
send_mod->add_body_part_id(orig_mod->body_part_id[l]);
|
|
|
|
send_mod->add_tissue_layer_id(orig_mod->tissue_layer_id[l]);
|
|
|
|
send_mod->add_tissue_layer_id(orig_mod->tissue_layer_id[l]);
|
|
|
@ -2783,7 +2782,7 @@ static command_result GetPartialCreatureRaws(color_ostream &stream, const ListRe
|
|
|
|
send_caste->set_adult_size(orig_caste->misc.adult_size);
|
|
|
|
send_caste->set_adult_size(orig_caste->misc.adult_size);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < orig_creature->tissue.size(); j++)
|
|
|
|
for (size_t j = 0; j < orig_creature->tissue.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto orig_tissue = orig_creature->tissue[j];
|
|
|
|
auto orig_tissue = orig_creature->tissue[j];
|
|
|
|
auto send_tissue = send_creature->add_tissues();
|
|
|
|
auto send_tissue = send_creature->add_tissues();
|
|
|
@ -2812,17 +2811,7 @@ static command_result GetPartialPlantRaws(color_ostream &stream, const ListReque
|
|
|
|
|
|
|
|
|
|
|
|
df::world * world = df::global::world;
|
|
|
|
df::world * world = df::global::world;
|
|
|
|
|
|
|
|
|
|
|
|
int list_start = 0;
|
|
|
|
for (size_t i = 0; i < world->raws.plants.all.size(); i++)
|
|
|
|
int list_end = world->raws.plants.all.size();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (in != nullptr)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
list_start = in->list_start();
|
|
|
|
|
|
|
|
if (in->list_end() < list_end)
|
|
|
|
|
|
|
|
list_end = in->list_end();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < world->raws.plants.all.size(); i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::plant_raw* plant_local = world->raws.plants.all[i];
|
|
|
|
df::plant_raw* plant_local = world->raws.plants.all[i];
|
|
|
|
PlantRaw* plant_remote = out->add_plant_raws();
|
|
|
|
PlantRaw* plant_remote = out->add_plant_raws();
|
|
|
@ -2835,14 +2824,14 @@ static command_result GetPartialPlantRaws(color_ostream &stream, const ListReque
|
|
|
|
else
|
|
|
|
else
|
|
|
|
plant_remote->set_tile(plant_local->tiles.tree_tile);
|
|
|
|
plant_remote->set_tile(plant_local->tiles.tree_tile);
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
#if DF_VERSION_INT > 34011
|
|
|
|
for (int j = 0; j < plant_local->growths.size(); j++)
|
|
|
|
for (size_t j = 0; j < plant_local->growths.size(); j++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::plant_growth* growth_local = plant_local->growths[j];
|
|
|
|
df::plant_growth* growth_local = plant_local->growths[j];
|
|
|
|
TreeGrowth * growth_remote = plant_remote->add_growths();
|
|
|
|
TreeGrowth * growth_remote = plant_remote->add_growths();
|
|
|
|
growth_remote->set_index(j);
|
|
|
|
growth_remote->set_index(j);
|
|
|
|
growth_remote->set_id(growth_local->id);
|
|
|
|
growth_remote->set_id(growth_local->id);
|
|
|
|
growth_remote->set_name(growth_local->name);
|
|
|
|
growth_remote->set_name(growth_local->name);
|
|
|
|
for (int k = 0; k < growth_local->prints.size(); k++)
|
|
|
|
for (size_t k = 0; k < growth_local->prints.size(); k++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
df::plant_growth_print* print_local = growth_local->prints[k];
|
|
|
|
df::plant_growth_print* print_local = growth_local->prints[k];
|
|
|
|
GrowthPrint* print_remote = growth_remote->add_prints();
|
|
|
|
GrowthPrint* print_remote = growth_remote->add_prints();
|
|
|
@ -3022,7 +3011,7 @@ static command_result GetReports(color_ostream & stream, const EmptyMessage * in
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int i = lastSentIndex + 1; i < world->status.reports.size(); i++)
|
|
|
|
for (size_t i = lastSentIndex + 1; i < world->status.reports.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto local_rep = world->status.reports[i];
|
|
|
|
auto local_rep = world->status.reports[i];
|
|
|
|
if (!local_rep)
|
|
|
|
if (!local_rep)
|
|
|
@ -3050,7 +3039,7 @@ static command_result GetLanguage(color_ostream & stream, const EmptyMessage * i
|
|
|
|
if (!world)
|
|
|
|
if (!world)
|
|
|
|
return CR_FAILURE;
|
|
|
|
return CR_FAILURE;
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < world->raws.descriptors.shapes.size(); i++)
|
|
|
|
for (size_t i = 0; i < world->raws.descriptors.shapes.size(); i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto shape = world->raws.descriptors.shapes[i];
|
|
|
|
auto shape = world->raws.descriptors.shapes[i];
|
|
|
|
auto netShape = out->add_shapes();
|
|
|
|
auto netShape = out->add_shapes();
|
|
|
|