widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #17387
[Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
GunChleoc has proposed merging lp:~widelands-dev/widelands/reed-compatibility into lp:widelands.
Commit message:
Fix savegame compatibility for reed, buildings, players view and economy requests.
Requested reviews:
Widelands Developers (widelands-dev)
For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/reed-compatibility/+merge/367935
--
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/reed-compatibility into lp:widelands.
=== modified file 'src/economy/expedition_bootstrap.cc'
--- src/economy/expedition_bootstrap.cc 2019-02-23 11:00:49 +0000
+++ src/economy/expedition_bootstrap.cc 2019-05-26 03:34:22 +0000
@@ -203,7 +203,7 @@
}
void ExpeditionBootstrap::load(
- Warehouse& warehouse, FileRead& fr, Game& game, MapObjectLoader& mol, uint16_t packet_version) {
+ Warehouse& warehouse, FileRead& fr, Game& game, MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table, uint16_t packet_version) {
static const uint16_t kCurrentPacketVersion = 7;
assert(queues_.empty());
@@ -214,7 +214,7 @@
uint8_t num_queues = fr.unsigned_8();
for (uint8_t i = 0; i < num_queues; ++i) {
WorkersQueue* wq = new WorkersQueue(warehouse, INVALID_INDEX, 0);
- wq->read(fr, game, mol);
+ wq->read(fr, game, mol, tribes_lookup_table);
wq->set_callback(input_callback, this);
if (wq->get_index() == INVALID_INDEX) {
@@ -232,7 +232,7 @@
uint8_t num_queues = fr.unsigned_8();
for (uint8_t i = 0; i < num_queues; ++i) {
WaresQueue* wq = new WaresQueue(warehouse, INVALID_INDEX, 0);
- wq->read(fr, game, mol);
+ wq->read(fr, game, mol, tribes_lookup_table);
wq->set_callback(input_callback, this);
if (wq->get_index() == INVALID_INDEX) {
=== modified file 'src/economy/expedition_bootstrap.h'
--- src/economy/expedition_bootstrap.h 2019-02-23 11:00:49 +0000
+++ src/economy/expedition_bootstrap.h 2019-05-26 03:34:22 +0000
@@ -88,7 +88,7 @@
* packet, and there in the warehouse data packet.
*/
void
- load(Warehouse& warehouse, FileRead& fr, Game& game, MapObjectLoader& mol, uint16_t version);
+ load(Warehouse& warehouse, FileRead& fr, Game& game, MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table, uint16_t version);
/** Save this into a file.
*
=== modified file 'src/economy/input_queue.cc'
--- src/economy/input_queue.cc 2019-02-23 11:00:49 +0000
+++ src/economy/input_queue.cc 2019-05-26 03:34:22 +0000
@@ -130,7 +130,7 @@
constexpr uint16_t kCurrentPacketVersion = 3;
-void InputQueue::read(FileRead& fr, Game& game, MapObjectLoader& mol) {
+void InputQueue::read(FileRead& fr, Game& game, MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
uint16_t const packet_version = fr.unsigned_16();
try {
@@ -140,25 +140,26 @@
if (packet_version == 1 || packet_version == kCurrentPacketVersion) {
if (fr.unsigned_8() == 0) {
assert(type_ == wwWARE);
- index_ = owner().tribe().ware_index(fr.c_string());
+ index_ = owner().tribe().ware_index(tribes_lookup_table.lookup_ware(fr.c_string()));
} else {
assert(type_ == wwWORKER);
- index_ = owner().tribe().worker_index(fr.c_string());
+ index_ = owner().tribe().worker_index(tribes_lookup_table.lookup_worker(fr.c_string()));
}
max_size_ = fr.unsigned_32();
max_fill_ = fr.signed_32();
consume_interval_ = fr.unsigned_32();
if (fr.unsigned_8()) {
request_.reset(new Request(owner_, 0, InputQueue::request_callback, type_));
- request_->read(fr, game, mol);
+ request_->read(fr, game, mol, tribes_lookup_table);
} else {
request_.reset();
}
read_child(fr, game, mol);
} else if (packet_version == 2) {
+ // TODO(GunChleoc): Savegame compatibility, get rid after Build 21
assert(type_ == wwWARE);
- index_ = owner().tribe().ware_index(fr.c_string());
+ index_ = owner().tribe().ware_index(tribes_lookup_table.lookup_ware(fr.c_string()));
max_size_ = fr.unsigned_32();
max_fill_ = fr.signed_32();
// No read_child() call here, doing it manually since there is no child-version number
@@ -166,7 +167,7 @@
consume_interval_ = fr.unsigned_32();
if (fr.unsigned_8()) {
request_.reset(new Request(owner_, 0, InputQueue::request_callback, type_));
- request_->read(fr, game, mol);
+ request_->read(fr, game, mol, tribes_lookup_table);
} else {
request_.reset();
}
=== modified file 'src/economy/input_queue.h'
--- src/economy/input_queue.h 2019-02-27 19:00:36 +0000
+++ src/economy/input_queue.h 2019-05-26 03:34:22 +0000
@@ -184,7 +184,7 @@
* @param game The game this queue will be part of.
* @param mol The game/map loader that handles the lading. Required to pass to Request::read().
*/
- void read(FileRead& f, Game& g, MapObjectLoader& mol);
+ void read(FileRead& f, Game& g, MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table);
/**
* Writes the state of this class.
=== modified file 'src/economy/request.cc'
--- src/economy/request.cc 2019-02-23 11:00:49 +0000
+++ src/economy/request.cc 2019-05-26 03:34:22 +0000
@@ -98,18 +98,18 @@
* might have been initialized. We have to kill them and replace
* them through the data in the file
*/
-void Request::read(FileRead& fr, Game& game, MapObjectLoader& mol) {
+void Request::read(FileRead& fr, Game& game, MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
try {
uint16_t const packet_version = fr.unsigned_16();
if (packet_version == kCurrentPacketVersion) {
const TribeDescr& tribe = target_.owner().tribe();
char const* const type_name = fr.c_string();
- DescriptionIndex const wai = tribe.ware_index(type_name);
+ DescriptionIndex const wai = tribe.ware_index(tribes_lookup_table.lookup_ware(type_name));
if (tribe.has_ware(wai)) {
type_ = wwWARE;
index_ = wai;
} else {
- DescriptionIndex const woi = tribe.worker_index(type_name);
+ DescriptionIndex const woi = tribe.worker_index(tribes_lookup_table.lookup_worker(type_name));
if (tribe.has_worker(woi)) {
type_ = wwWORKER;
index_ = woi;
=== modified file 'src/economy/request.h'
--- src/economy/request.h 2019-02-23 11:00:49 +0000
+++ src/economy/request.h 2019-05-26 03:34:22 +0000
@@ -24,6 +24,7 @@
#include "logic/map_objects/tribes/requirements.h"
#include "logic/map_objects/tribes/wareworker.h"
#include "logic/widelands.h"
+#include "map_io/tribes_legacy_lookup_table.h"
class FileRead;
class FileWrite;
@@ -116,7 +117,7 @@
void start_transfer(Game&, Supply&);
- void read(FileRead&, Game&, MapObjectLoader&);
+ void read(FileRead&, Game&, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
void write(FileWrite&, Game&, MapObjectSaver&) const;
Worker* get_transfer_worker();
=== modified file 'src/game_io/game_player_info_packet.cc'
--- src/game_io/game_player_info_packet.cc 2019-05-19 12:25:24 +0000
+++ src/game_io/game_player_info_packet.cc 2019-05-26 03:34:22 +0000
@@ -37,7 +37,7 @@
void GamePlayerInfoPacket::read(FileSystem& fs, Game& game, MapObjectLoader*) {
try {
- std::unique_ptr<TribesLegacyLookupTable> tribe_lookup_table(new TribesLegacyLookupTable());
+ std::unique_ptr<TribesLegacyLookupTable> tribes_lookup_table(new TribesLegacyLookupTable());
FileRead fr;
fr.open(fs, "binary/player_info");
uint16_t const packet_version = fr.unsigned_16();
@@ -72,7 +72,7 @@
}
}
- player->read_statistics(fr, packet_version, *tribe_lookup_table.get());
+ player->read_statistics(fr, packet_version, *tribes_lookup_table.get());
player->read_remaining_shipnames(fr);
player->casualties_ = fr.unsigned_32();
=== modified file 'src/map_io/map_buildingdata_packet.cc'
--- src/map_io/map_buildingdata_packet.cc 2019-05-18 11:58:43 +0000
+++ src/map_io/map_buildingdata_packet.cc 2019-05-26 03:34:22 +0000
@@ -71,7 +71,7 @@
void MapBuildingdataPacket::read(FileSystem& fs,
EditorGameBase& egbase,
bool const skip,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
if (skip)
return;
@@ -180,18 +180,18 @@
Game& game = dynamic_cast<Game&>(egbase);
if (upcast(ConstructionSite, constructionsite, &building)) {
- read_constructionsite(*constructionsite, fr, game, mol);
+ read_constructionsite(*constructionsite, fr, game, mol, tribes_lookup_table);
} else if (upcast(DismantleSite, dms, &building)) {
- read_dismantlesite(*dms, fr, game, mol);
+ read_dismantlesite(*dms, fr, game, mol, tribes_lookup_table);
} else if (upcast(MilitarySite, militarysite, &building)) {
- read_militarysite(*militarysite, fr, game, mol);
+ read_militarysite(*militarysite, fr, game, mol, tribes_lookup_table);
} else if (upcast(Warehouse, warehouse, &building)) {
- read_warehouse(*warehouse, fr, game, mol);
+ read_warehouse(*warehouse, fr, game, mol, tribes_lookup_table);
} else if (upcast(ProductionSite, productionsite, &building)) {
if (upcast(TrainingSite, trainingsite, productionsite)) {
- read_trainingsite(*trainingsite, fr, game, mol);
+ read_trainingsite(*trainingsite, fr, game, mol, tribes_lookup_table);
} else {
- read_productionsite(*productionsite, fr, game, mol);
+ read_productionsite(*productionsite, fr, game, mol, tribes_lookup_table);
}
} else {
// type of building is not one of (or derived from)
@@ -215,7 +215,7 @@
void MapBuildingdataPacket::read_partially_finished_building(PartiallyFinishedBuilding& pfb,
FileRead& fr,
Game& game,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
try {
uint16_t const packet_version = fr.unsigned_16();
if (packet_version == kCurrentPacketPFBuilding) {
@@ -226,7 +226,7 @@
if (fr.unsigned_8()) {
pfb.builder_request_ =
new Request(pfb, 0, PartiallyFinishedBuilding::request_builder_callback, wwWORKER);
- pfb.builder_request_->read(fr, game, mol);
+ pfb.builder_request_->read(fr, game, mol, tribes_lookup_table);
} else
pfb.builder_request_ = nullptr;
@@ -244,7 +244,7 @@
pfb.wares_.resize(size);
for (uint16_t i = 0; i < pfb.wares_.size(); ++i) {
pfb.wares_[i] = new WaresQueue(pfb, INVALID_INDEX, 0);
- pfb.wares_[i]->read(fr, game, mol);
+ pfb.wares_[i]->read(fr, game, mol, tribes_lookup_table);
}
} catch (const WException& e) {
throw GameDataError("wares: %s", e.what());
@@ -266,11 +266,11 @@
void MapBuildingdataPacket::read_constructionsite(ConstructionSite& constructionsite,
FileRead& fr,
Game& game,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
try {
uint16_t const packet_version = fr.unsigned_16();
if (packet_version >= kCurrentPacketVersionConstructionsite) {
- read_partially_finished_building(constructionsite, fr, game, mol);
+ read_partially_finished_building(constructionsite, fr, game, mol, tribes_lookup_table);
for (ConstructionSite::Wares::iterator wares_iter = constructionsite.wares_.begin();
wares_iter != constructionsite.wares_.end(); ++wares_iter) {
@@ -291,11 +291,11 @@
void MapBuildingdataPacket::read_dismantlesite(DismantleSite& dms,
FileRead& fr,
Game& game,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
try {
uint16_t const packet_version = fr.unsigned_16();
if (packet_version == kCurrentPacketVersionDismantlesite) {
- read_partially_finished_building(dms, fr, game, mol);
+ read_partially_finished_building(dms, fr, game, mol, tribes_lookup_table);
// Nothing to do
} else {
@@ -310,7 +310,7 @@
void MapBuildingdataPacket::read_warehouse(Warehouse& warehouse,
FileRead& fr,
Game& game,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
try {
uint16_t const packet_version = fr.unsigned_16();
if (packet_version >= 6) {
@@ -319,7 +319,7 @@
const TribeDescr& tribe = player->tribe();
while (fr.unsigned_8()) {
- const DescriptionIndex& id = tribe.ware_index(fr.c_string());
+ const DescriptionIndex& id = tribe.ware_index(tribes_lookup_table.lookup_ware(fr.c_string()));
Quantity amount = fr.unsigned_32();
Warehouse::StockPolicy policy = static_cast<Warehouse::StockPolicy>(fr.unsigned_8());
@@ -329,7 +329,7 @@
}
}
while (fr.unsigned_8()) {
- const DescriptionIndex& id = tribe.worker_index(fr.c_string());
+ const DescriptionIndex& id = tribe.worker_index(tribes_lookup_table.lookup_worker(fr.c_string()));
uint32_t amount = fr.unsigned_32();
Warehouse::StockPolicy policy = static_cast<Warehouse::StockPolicy>(fr.unsigned_8());
@@ -364,15 +364,16 @@
tribe.worker_types_without_cost();
for (;;) {
- char const* const worker_typename = fr.c_string();
- if (!*worker_typename) // encountered the terminator ("")
+ const std::string worker_typename = tribes_lookup_table.lookup_worker(fr.c_string());
+ if (worker_typename.empty()) { // No more workers found
break;
+ }
uint32_t const next_spawn = fr.unsigned_32();
DescriptionIndex const worker_index = tribe.safe_worker_index(worker_typename);
if (!game.tribes().worker_exists(worker_index)) {
log("WARNING: %s %u has a next_spawn time for nonexistent "
"worker type \"%s\" set to %u, ignoring\n",
- warehouse.descr().name().c_str(), warehouse.serial(), worker_typename,
+ warehouse.descr().name().c_str(), warehouse.serial(), worker_typename.c_str(),
next_spawn);
continue;
}
@@ -380,7 +381,7 @@
log("WARNING: %s %u has a next_spawn time for worker type "
"\"%s\", that costs something to build, set to %u, "
"ignoring\n",
- warehouse.descr().name().c_str(), warehouse.serial(), worker_typename,
+ warehouse.descr().name().c_str(), warehouse.serial(), worker_typename.c_str(),
next_spawn);
continue;
}
@@ -392,7 +393,7 @@
"\"%s\" set to %u, but it was previously set "
"to %u\n",
warehouse.descr().name().c_str(), warehouse.serial(),
- worker_typename, next_spawn,
+ worker_typename.c_str(), next_spawn,
warehouse.next_worker_without_cost_spawn_[i]);
warehouse.next_worker_without_cost_spawn_[i] = next_spawn;
break;
@@ -409,13 +410,13 @@
while (nr_planned_workers--) {
warehouse.planned_workers_.push_back(Warehouse::PlannedWorkers());
Warehouse::PlannedWorkers& pw = warehouse.planned_workers_.back();
- pw.index = tribe.worker_index(fr.c_string());
+ pw.index = tribe.worker_index(tribes_lookup_table.lookup_worker(fr.c_string()));
pw.amount = fr.unsigned_32();
uint32_t nr_requests = fr.unsigned_32();
while (nr_requests--) {
pw.requests.push_back(new Request(warehouse, 0, &Warehouse::request_cb, wwWORKER));
- pw.requests.back()->read(fr, game, mol);
+ pw.requests.back()->read(fr, game, mol, tribes_lookup_table);
}
}
@@ -430,7 +431,7 @@
// doesn't lend itself to request and other stuff.
if (warehouse.portdock_->expedition_started()) {
warehouse.portdock_->expedition_bootstrap()->load(
- warehouse, fr, game, mol, packet_version);
+ warehouse, fr, game, mol, tribes_lookup_table, packet_version);
}
}
}
@@ -463,7 +464,7 @@
void MapBuildingdataPacket::read_militarysite(MilitarySite& militarysite,
FileRead& fr,
Game& game,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
try {
uint16_t const packet_version = fr.unsigned_16();
if (packet_version >= 5 && packet_version <= kCurrentPacketVersionMilitarysite) {
@@ -472,18 +473,20 @@
if (fr.unsigned_8()) {
militarysite.normal_soldier_request_.reset(
new Request(militarysite, 0, MilitarySite::request_soldier_callback, wwWORKER));
- militarysite.normal_soldier_request_->read(fr, game, mol);
- } else
+ militarysite.normal_soldier_request_->read(fr, game, mol, tribes_lookup_table);
+ } else {
militarysite.normal_soldier_request_.reset();
+ }
if (fr.unsigned_8()) {
militarysite.upgrade_soldier_request_.reset(new Request(
militarysite,
(!militarysite.normal_soldier_request_) ? 0 : militarysite.owner().tribe().soldier(),
MilitarySite::request_soldier_callback, wwWORKER));
- militarysite.upgrade_soldier_request_->read(fr, game, mol);
- } else
+ militarysite.upgrade_soldier_request_->read(fr, game, mol, tribes_lookup_table);
+ } else {
militarysite.upgrade_soldier_request_.reset();
+ }
if ((militarysite.didconquer_ = fr.unsigned_8())) {
// Add to map of military influence.
@@ -549,7 +552,7 @@
void MapBuildingdataPacket::read_productionsite(ProductionSite& productionsite,
FileRead& fr,
Game& game,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
try {
uint16_t const packet_version = fr.unsigned_16();
// TODO(GunChleoc): Savegame compatibility, remove after Build 21.
@@ -562,7 +565,7 @@
for (uint16_t i = nr_worker_requests; i; --i) {
Request& req =
*new Request(productionsite, 0, ProductionSite::request_worker_callback, wwWORKER);
- req.read(fr, game, mol);
+ req.read(fr, game, mol, tribes_lookup_table);
const DescriptionIndex& worker_index = req.get_index();
// Find a working position that matches this request.
@@ -615,14 +618,15 @@
if (worker_descr.can_act_as(working_position.first)) {
while (wp->worker || wp->worker_request) {
++wp;
- if (!--count)
- goto end_working_position;
+ if (!--count) {
+ continue;
+ }
}
found_working_position = true;
break;
- } else
+ } else {
wp += count;
- end_working_position:;
+ }
}
if (!found_working_position)
@@ -682,7 +686,7 @@
assert(!productionsite.input_queues_.size());
for (uint16_t i = 0; i < nr_queues; ++i) {
WaresQueue* wq = new WaresQueue(productionsite, INVALID_INDEX, 0);
- wq->read(fr, game, mol);
+ wq->read(fr, game, mol, tribes_lookup_table);
if (!game.tribes().ware_exists(wq->get_index())) {
delete wq;
@@ -695,7 +699,7 @@
nr_queues = fr.unsigned_16();
for (uint16_t i = 0; i < nr_queues; ++i) {
WorkersQueue* wq = new WorkersQueue(productionsite, INVALID_INDEX, 0);
- wq->read(fr, game, mol);
+ wq->read(fr, game, mol, tribes_lookup_table);
if (!game.tribes().worker_exists(wq->get_index())) {
delete wq;
@@ -732,18 +736,18 @@
void MapBuildingdataPacket::read_trainingsite(TrainingSite& trainingsite,
FileRead& fr,
Game& game,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
try {
uint16_t const packet_version = fr.unsigned_16();
if (packet_version == kCurrentPacketVersionTrainingsite) {
- read_productionsite(trainingsite, fr, game, mol);
+ read_productionsite(trainingsite, fr, game, mol, tribes_lookup_table);
delete trainingsite.soldier_request_;
trainingsite.soldier_request_ = nullptr;
if (fr.unsigned_8()) {
trainingsite.soldier_request_ =
new Request(trainingsite, 0, TrainingSite::request_soldier_callback, wwWORKER);
- trainingsite.soldier_request_->read(fr, game, mol);
+ trainingsite.soldier_request_->read(fr, game, mol, tribes_lookup_table);
}
trainingsite.capacity_ = fr.unsigned_8();
=== modified file 'src/map_io/map_buildingdata_packet.h'
--- src/map_io/map_buildingdata_packet.h 2019-02-23 11:00:49 +0000
+++ src/map_io/map_buildingdata_packet.h 2019-05-26 03:34:22 +0000
@@ -21,6 +21,7 @@
#define WL_MAP_IO_MAP_BUILDINGDATA_PACKET_H
#include "map_io/map_data_packet.h"
+#include "map_io/tribes_legacy_lookup_table.h"
class FileRead;
class FileWrite;
@@ -42,18 +43,18 @@
*/
class MapBuildingdataPacket {
public:
- void read(FileSystem&, EditorGameBase&, bool, MapObjectLoader&);
+ void read(FileSystem&, EditorGameBase&, bool, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
void write(FileSystem&, EditorGameBase&, MapObjectSaver&);
private:
- void read_constructionsite(ConstructionSite&, FileRead&, Game&, MapObjectLoader&);
- void read_dismantlesite(DismantleSite&, FileRead&, Game&, MapObjectLoader&);
+ void read_constructionsite(ConstructionSite&, FileRead&, Game&, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
+ void read_dismantlesite(DismantleSite&, FileRead&, Game&, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
void
- read_partially_finished_building(PartiallyFinishedBuilding&, FileRead&, Game&, MapObjectLoader&);
- void read_warehouse(Warehouse&, FileRead&, Game&, MapObjectLoader&);
- void read_militarysite(MilitarySite&, FileRead&, Game&, MapObjectLoader&);
- void read_trainingsite(TrainingSite&, FileRead&, Game&, MapObjectLoader&);
- void read_productionsite(ProductionSite&, FileRead&, Game&, MapObjectLoader&);
+ read_partially_finished_building(PartiallyFinishedBuilding&, FileRead&, Game&, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
+ void read_warehouse(Warehouse&, FileRead&, Game&, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
+ void read_militarysite(MilitarySite&, FileRead&, Game&, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
+ void read_trainingsite(TrainingSite&, FileRead&, Game&, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
+ void read_productionsite(ProductionSite&, FileRead&, Game&, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
void write_constructionsite(const ConstructionSite&, FileWrite&, Game&, MapObjectSaver&);
void write_dismantlesite(const DismantleSite&, FileWrite&, Game&, MapObjectSaver&);
=== modified file 'src/map_io/map_flagdata_packet.cc'
--- src/map_io/map_flagdata_packet.cc 2019-02-23 11:00:49 +0000
+++ src/map_io/map_flagdata_packet.cc 2019-05-26 03:34:22 +0000
@@ -43,7 +43,7 @@
void MapFlagdataPacket::read(FileSystem& fs,
EditorGameBase& egbase,
bool const skip,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
if (skip)
return;
@@ -131,7 +131,7 @@
Flag::FlagJob f;
if (fr.unsigned_8()) {
f.request = new Request(flag, 0, Flag::flag_job_request_callback, wwWORKER);
- f.request->read(fr, dynamic_cast<Game&>(egbase), mol);
+ f.request->read(fr, dynamic_cast<Game&>(egbase), mol, tribes_lookup_table);
} else {
f.request = nullptr;
}
=== modified file 'src/map_io/map_flagdata_packet.h'
--- src/map_io/map_flagdata_packet.h 2019-02-23 11:00:49 +0000
+++ src/map_io/map_flagdata_packet.h 2019-05-26 03:34:22 +0000
@@ -21,7 +21,14 @@
#define WL_MAP_IO_MAP_FLAGDATA_PACKET_H
#include "map_io/map_data_packet.h"
+#include "map_io/tribes_legacy_lookup_table.h"
-MAP_DATA_PACKET(MapFlagdataPacket)
+namespace Widelands {
+class MapFlagdataPacket {
+public:
+ void read(FileSystem&, EditorGameBase&, bool, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
+ void write(FileSystem&, EditorGameBase&, MapObjectSaver&);
+};
+}
#endif // end of include guard: WL_MAP_IO_MAP_FLAGDATA_PACKET_H
=== modified file 'src/map_io/map_object_packet.cc'
--- src/map_io/map_object_packet.cc 2019-02-23 11:00:49 +0000
+++ src/map_io/map_object_packet.cc 2019-05-26 03:34:22 +0000
@@ -49,7 +49,7 @@
EditorGameBase& egbase,
MapObjectLoader& mol,
const WorldLegacyLookupTable& world_lookup_table,
- const TribesLegacyLookupTable& tribe_lookup_table) {
+ const TribesLegacyLookupTable& tribes_lookup_table) {
try {
FileRead fr;
fr.open(fs, "binary/mapobjects");
@@ -66,7 +66,7 @@
return;
case MapObject::HeaderImmovable:
loaders.insert(
- Immovable::load(egbase, mol, fr, world_lookup_table, tribe_lookup_table));
+ Immovable::load(egbase, mol, fr, world_lookup_table, tribes_lookup_table));
break;
case MapObject::HeaderBattle:
@@ -81,11 +81,11 @@
// We can't use the worker's savegame version, because some stuff is loaded before
// that
// packet version, and we removed the tribe name.
- loaders.insert(Worker::load(egbase, mol, fr, tribe_lookup_table, packet_version));
+ loaders.insert(Worker::load(egbase, mol, fr, tribes_lookup_table, packet_version));
break;
case MapObject::HeaderWareInstance:
- loaders.insert(WareInstance::load(egbase, mol, fr, tribe_lookup_table));
+ loaders.insert(WareInstance::load(egbase, mol, fr, tribes_lookup_table));
break;
case MapObject::HeaderShip:
=== modified file 'src/map_io/map_object_packet.h'
--- src/map_io/map_object_packet.h 2019-02-23 11:00:49 +0000
+++ src/map_io/map_object_packet.h 2019-05-26 03:34:22 +0000
@@ -57,7 +57,7 @@
EditorGameBase&,
MapObjectLoader&,
const WorldLegacyLookupTable& world_lookup_table,
- const TribesLegacyLookupTable& tribe_lookup_table);
+ const TribesLegacyLookupTable& tribes_lookup_table);
void load_finish();
=== modified file 'src/map_io/map_players_view_packet.cc'
--- src/map_io/map_players_view_packet.cc 2019-04-09 16:43:49 +0000
+++ src/map_io/map_players_view_packet.cc 2019-05-26 03:34:22 +0000
@@ -192,17 +192,17 @@
};
// reads an immovable depending on whether it is a tribe or world immovable
-const ImmovableDescr& read_immovable_type(StreamRead* fr, const EditorGameBase& egbase) {
+const ImmovableDescr& read_immovable_type(StreamRead* fr, const EditorGameBase& egbase, const TribesLegacyLookupTable& tribes_lookup_table, const WorldLegacyLookupTable& world_lookup_table) {
uint8_t owner = fr->unsigned_8();
char const* const name = fr->c_string();
if (owner == static_cast<uint8_t>(MapObjectDescr::OwnerType::kWorld)) {
- DescriptionIndex const index = egbase.world().get_immovable_index(name);
+ DescriptionIndex const index = egbase.world().get_immovable_index(world_lookup_table.lookup_immovable(name));
if (index == Widelands::INVALID_INDEX)
throw WorldImmovableNonexistent(name);
return *egbase.world().get_immovable_descr(index);
} else {
assert(owner == static_cast<uint8_t>(MapObjectDescr::OwnerType::kTribe));
- DescriptionIndex const index = egbase.tribes().immovable_index(name);
+ DescriptionIndex const index = egbase.tribes().immovable_index(tribes_lookup_table.lookup_immovable(name));
if (index == Widelands::INVALID_INDEX)
throw TribeImmovableNonexistent(name);
return *egbase.tribes().get_immovable_descr(index);
@@ -238,7 +238,7 @@
inline static MapObjectData read_unseen_immovable(const EditorGameBase& egbase,
uint8_t& immovable_kind,
- FileRead& immovables_file,
+ FileRead& immovables_file, const TribesLegacyLookupTable& tribes_lookup_table, const WorldLegacyLookupTable& world_lookup_table,
uint8_t& version) {
MapObjectData m;
try {
@@ -247,7 +247,7 @@
m.map_object_descr = nullptr;
break;
case UNSEEN_TRIBEORWORLD: // The player sees a tribe or world immovable.
- m.map_object_descr = &read_immovable_type(&immovables_file, egbase);
+ m.map_object_descr = &read_immovable_type(&immovables_file, egbase, tribes_lookup_table, world_lookup_table);
break;
case UNSEEN_FLAG: // The player sees a flag.
m.map_object_descr = &g_flag_descr;
@@ -284,7 +284,7 @@
void MapPlayersViewPacket::read(FileSystem& fs,
EditorGameBase& egbase,
bool const skip,
- MapObjectLoader&)
+ MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table, const WorldLegacyLookupTable& world_lookup_table)
{
if (skip)
@@ -559,7 +559,7 @@
kCurrentPacketVersionImmovableKinds);
}
MapObjectData mod = read_unseen_immovable(
- egbase, imm_kind, node_immovables_file, node_immovables_file_version);
+ egbase, imm_kind, node_immovables_file, tribes_lookup_table, world_lookup_table, node_immovables_file_version);
f_player_field.map_object_descr = mod.map_object_descr;
f_player_field.constructionsite = mod.csi;
@@ -633,7 +633,7 @@
// TODO(sirver): Remove this logic the next time we break
// savegame compatibility.
read_unseen_immovable(
- egbase, im_kind, triangle_immovables_file, triangle_immovables_file_version);
+ egbase, im_kind, triangle_immovables_file, tribes_lookup_table, world_lookup_table, triangle_immovables_file_version);
}
if (f_seen | br_seen | r_seen) {
// The player currently sees the R triangle. Therefore his
@@ -662,7 +662,7 @@
// suporting immovables on the triangles instead as on the
// nodes.
read_unseen_immovable(
- egbase, im_kind, triangle_immovables_file, triangle_immovables_file_version);
+ egbase, im_kind, triangle_immovables_file, tribes_lookup_table, world_lookup_table, triangle_immovables_file_version);
}
{ // edges
=== modified file 'src/map_io/map_players_view_packet.h'
--- src/map_io/map_players_view_packet.h 2019-02-23 11:00:49 +0000
+++ src/map_io/map_players_view_packet.h 2019-05-26 03:34:22 +0000
@@ -21,6 +21,10 @@
#define WL_MAP_IO_MAP_PLAYERS_VIEW_PACKET_H
#include "map_io/map_data_packet.h"
+#include "map_io/tribes_legacy_lookup_table.h"
+#include "map_io/world_legacy_lookup_table.h"
+
+namespace Widelands {
/// For each player, its view of each node, edge and triangle that he has seen
/// but does not see currently. Information that he currently sees is not
@@ -31,6 +35,11 @@
/// This information can not be loaded before the terrains, roads, immovables
/// and players' vision maps are loaded. The vision maps are completely loaded
/// after MapBobdataPacket has been loaded.
-MAP_DATA_PACKET(MapPlayersViewPacket)
+class MapPlayersViewPacket {
+public:
+ void read(FileSystem&, EditorGameBase&, bool, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table, const WorldLegacyLookupTable& world_lookup_table);
+ void write(FileSystem&, EditorGameBase&, MapObjectSaver&);
+};
+}
#endif // end of include guard: WL_MAP_IO_MAP_PLAYERS_VIEW_PACKET_H
=== modified file 'src/map_io/map_roaddata_packet.cc'
--- src/map_io/map_roaddata_packet.cc 2019-02-23 11:00:49 +0000
+++ src/map_io/map_roaddata_packet.cc 2019-05-26 03:34:22 +0000
@@ -44,7 +44,7 @@
void MapRoaddataPacket::read(FileSystem& fs,
EditorGameBase& egbase,
bool const skip,
- MapObjectLoader& mol) {
+ MapObjectLoader& mol, const TribesLegacyLookupTable& tribes_lookup_table) {
if (skip)
return;
@@ -136,7 +136,7 @@
if (fr.unsigned_8()) {
(carrier_request =
new Request(road, 0, Road::request_carrier_callback, wwWORKER))
- ->read(fr, game, mol);
+ ->read(fr, game, mol, tribes_lookup_table);
} else {
carrier_request = nullptr;
}
=== modified file 'src/map_io/map_roaddata_packet.h'
--- src/map_io/map_roaddata_packet.h 2019-02-23 11:00:49 +0000
+++ src/map_io/map_roaddata_packet.h 2019-05-26 03:34:22 +0000
@@ -21,11 +21,18 @@
#define WL_MAP_IO_MAP_ROADDATA_PACKET_H
#include "map_io/map_data_packet.h"
+#include "map_io/tribes_legacy_lookup_table.h"
/*
* This parses the roads data (where it is, where it belongs to
* and so on)
*/
-MAP_DATA_PACKET(MapRoaddataPacket)
+namespace Widelands {
+class MapRoaddataPacket {
+public:
+ void read(FileSystem&, EditorGameBase&, bool, MapObjectLoader&, const TribesLegacyLookupTable& tribes_lookup_table);
+ void write(FileSystem&, EditorGameBase&, MapObjectSaver&);
+};
+}
#endif // end of include guard: WL_MAP_IO_MAP_ROADDATA_PACKET_H
=== modified file 'src/map_io/tribes_legacy_lookup_table.cc'
--- src/map_io/tribes_legacy_lookup_table.cc 2019-05-25 10:47:18 +0000
+++ src/map_io/tribes_legacy_lookup_table.cc 2019-05-26 03:34:22 +0000
@@ -18,6 +18,7 @@
*/
#include "map_io/tribes_legacy_lookup_table.h"
+
// Whenever we break savegame compatibility, we can empty these maps
TribesLegacyLookupTable::TribesLegacyLookupTable()
: // Workers
@@ -36,7 +37,7 @@
{"reed_medium", "reedfield_medium"},
{"reed_small", "reedfield_small"},
{"reed_tiny", "reedfield_tiny"},
- {"reed_tiny", "reedfield_ripe"},
+ {"reed_ripe", "reedfield_ripe"},
} {
}
=== modified file 'src/map_io/widelands_map_loader.cc'
--- src/map_io/widelands_map_loader.cc 2019-03-09 10:01:09 +0000
+++ src/map_io/widelands_map_loader.cc 2019-05-26 03:34:22 +0000
@@ -152,7 +152,7 @@
std::unique_ptr<WorldLegacyLookupTable> world_lookup_table(
create_world_legacy_lookup_table(old_world_name_));
- std::unique_ptr<TribesLegacyLookupTable> tribe_lookup_table(new TribesLegacyLookupTable());
+ std::unique_ptr<TribesLegacyLookupTable> tribes_lookup_table(new TribesLegacyLookupTable());
log("Reading Terrain Data ... ");
{
MapTerrainPacket p;
@@ -163,7 +163,7 @@
MapObjectPacket mapobjects;
log("Reading Map Objects ... ");
- mapobjects.read(*fs_, egbase, *mol_, *world_lookup_table, *tribe_lookup_table);
+ mapobjects.read(*fs_, egbase, *mol_, *world_lookup_table, *tribes_lookup_table);
log("took %ums\n ", timer.ms_since_last_query());
log("Reading Player Start Position Data ... ");
@@ -259,21 +259,21 @@
log("Reading Flagdata Data ... ");
{
MapFlagdataPacket p;
- p.read(*fs_, egbase, is_game, *mol_);
+ p.read(*fs_, egbase, is_game, *mol_, *tribes_lookup_table);
}
log("took %ums\n ", timer.ms_since_last_query());
log("Reading Roaddata Data ... ");
{
MapRoaddataPacket p;
- p.read(*fs_, egbase, is_game, *mol_);
+ p.read(*fs_, egbase, is_game, *mol_, *tribes_lookup_table);
}
log("took %ums\n ", timer.ms_since_last_query());
log("Reading Buildingdata Data ... ");
{
MapBuildingdataPacket p;
- p.read(*fs_, egbase, is_game, *mol_);
+ p.read(*fs_, egbase, is_game, *mol_, *tribes_lookup_table);
}
log("took %ums\n ", timer.ms_since_last_query());
@@ -297,7 +297,7 @@
log("Reading Players View Data ... ");
{
MapPlayersViewPacket p;
- p.read(*fs_, egbase, is_game, *mol_);
+ p.read(*fs_, egbase, is_game, *mol_, *tribes_lookup_table, *world_lookup_table);
}
log("took %ums\n ", timer.ms_since_last_query());
Follow ups
-
[Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: noreply, 2019-06-13
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: hessenfarmer, 2019-06-13
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: hessenfarmer, 2019-06-13
-
[Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: bunnybot, 2019-06-12
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: GunChleoc, 2019-06-09
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: GunChleoc, 2019-06-08
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: GunChleoc, 2019-06-08
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: Notabilis, 2019-06-08
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: GunChleoc, 2019-06-05
-
[Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: bunnybot, 2019-06-05
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: GunChleoc, 2019-06-05
-
Re: [Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: Notabilis, 2019-06-04
-
[Merge] lp:~widelands-dev/widelands/reed-compatibility into lp:widelands
From: bunnybot, 2019-05-27