[mod] Copy db data from aim2.

This commit is contained in:
lzwdgc 2024-04-02 14:38:24 +03:00
parent e9fbb6e760
commit 8954b11c95
2 changed files with 37 additions and 14 deletions

View file

@ -140,19 +140,13 @@ int main(int argc, char *argv[]) {
auto db = mod.db();
// patch note: set glider GL_S3_PS_FINDER2 model to MOD_GL_S3_PS_FINDER2 (lz)
db[u8"Ãëàéäåðû"]["GL_S3_PS_FINDER2"]["MODEL"] = "MOD_GL_S3_PS_FINDER2";
// patch note: change MOD_GL_S3_PS_FINDER2 model radius to MOD_GL_S3_PS_FINDER1 radius (lz)
// TODO: copy from aim2 db
db[u8"Ìîäåëè"]["MOD_GL_S3_PS_FINDER2"]["RADIUS"] = 4.768386f; // from aim2;
//
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2"]["TYPE"] = 0;
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2"]["COLOR"] = 406137896;
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2"]["FILENAME"] = "Data\\TM\\TEX_GL_S3_PS_FINDER_2.TM";
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2_SPEC"]["TYPE"] = 0;
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2_SPEC"]["COLOR"] = 2631463;
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2_SPEC"]["FILENAME"] = "Data\\TM\\TEX_GL_S3_PS_FINDER_2_SPEC.TM";
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2_SPEC_1"]["TYPE"] = 0;
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2_SPEC_1"]["COLOR"] = 1842204;
db[u8"Òåêñòóðû"]["TEX_GL_S3_PS_FINDER_2_SPEC_1"]["FILENAME"] = "Data\\TM\\TEX_GL_S3_PS_FINDER_2_SPEC_1.TM";
// patch note - maybe copy from finder1?: change MOD_GL_S3_PS_FINDER2 model radius to MOD_GL_S3_PS_FINDER1 radius (lz)
// patch note: copy MOD_GL_S3_PS_FINDER2 model radius from aim2 (lz)
db.copy_from_aim2(u8"Ìîäåëè", "MOD_GL_S3_PS_FINDER2", "RADIUS");
// patch note: copy MOD_GL_S3_PS_FINDER2 textures from aim2 (lz)
db.copy_from_aim2(u8"Òåêñòóðû", "TEX_GL_S3_PS_FINDER_2");
db.copy_from_aim2(u8"Òåêñòóðû", "TEX_GL_S3_PS_FINDER_2_SPEC");
db.copy_from_aim2(u8"Òåêñòóðû", "TEX_GL_S3_PS_FINDER_2_SPEC_1");
// patch note: double gun for config CFG_NARGOON (double electro discharge) (lz)
auto &tblcfg = db[u8"Êîíôèãóðàöèè"];
tblcfg["CFG_NARGOON"]["HEAVYGUN1"] = "GUN_ELECTRO_DISCHARGER";

View file

@ -74,6 +74,7 @@ struct aim_exe_v1_06_constants {
struct mod_maker {
struct db_wrapper {
db2::files::db2_internal m;
db2::files::db2_internal m2;
path fn;
int codepage{1251};
bool written{};
@ -93,6 +94,27 @@ struct mod_maker {
auto &operator[](this auto &&d, const std::u8string &s) {
return d.m[(const char *)s.c_str()];
}
void copy_from_aim2(auto &&table_name, auto &&value_name, auto &&field_name) {
auto check_val = [](auto &&m, const std::string &key, auto &&err) {
if (auto it = m.find(key); it == m.end()) {
throw std::runtime_error{err};
}
};
check_val(m2.m, (const char *)table_name, "aim2: no such table");
check_val(m2[table_name], value_name, "aim2: no such value");
check_val(m2[table_name][value_name], field_name, "aim2: no such field");
m[table_name][value_name][field_name] = m2[table_name][value_name][field_name];
}
void copy_from_aim2(auto &&table_name, auto &&value_name) {
auto check_val = [](auto &&m, const std::string &key, auto &&err) {
if (auto it = m.find(key); it == m.end()) {
throw std::runtime_error{err};
}
};
check_val(m2.m, (const char *)table_name, "aim2: no such table");
check_val(m2[table_name], value_name, "aim2: no such value");
m[table_name][value_name] = m2[table_name][value_name];
}
};
enum class file_type {
unknown,
@ -339,7 +361,11 @@ struct mod_maker {
}
auto db() {
return open_db("db", 1251); // always 1251 probably
auto w = open_db("db", 1251); // always 1251 probably
if (aim2_available()) {
w.m2 = db2{aim2_game_dir / "data" / "db", 1251}.open().to_map();
}
return w;
}
auto quest(const std::string &language = {}) {
// TODO: check if it's possible to use utf8/16 in aim game
@ -373,6 +399,9 @@ struct mod_maker {
}
private:
bool aim2_available() const {
return !aim2_game_dir.empty();
}
path make_bak_file(const path &fn) {
auto backup = path{fn} += ".bak";
if (!fs::exists(backup)) {