Db api updates.

This commit is contained in:
lzwdgc 2024-02-16 16:58:38 +03:00
parent b586253e4c
commit c86b7966bb
2 changed files with 36 additions and 43 deletions

View file

@ -129,30 +129,30 @@ int main(int argc, char *argv[]) {
// patch note: Database Changes
// patch note: DB
// patch note: set glider GL_S3_PS_FINDER2 model to MOD_GL_S3_PS_FINDER2 (lz)
mod.db.db().edit_value((const char *)u8"Ãëàéäåðû", "GL_S3_PS_FINDER2", "MODEL", "MOD_GL_S3_PS_FINDER2");
mod.db().edit_value(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)
mod.db.db().edit_value((const char *)u8"Ìîäåëè", "MOD_GL_S3_PS_FINDER2", "RADIUS", 4.012578f);
mod.db().edit_value(u8"Ìîäåëè", "MOD_GL_S3_PS_FINDER2", "RADIUS", 4.012578f);
// patch note: double gun for config CFG_NARGOON (double electro discharge) (lz)
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_NARGOON", "HEAVYGUN1", "GUN_ELECTRO_DISCHARGER");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_NARGOON", "HEAVYGUN1", "GUN_ELECTRO_DISCHARGER");
// patch note: double gun for config CFG_NARGOON1 (double two-barreled atomic gun) (lz)
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_NARGOON1", "HEAVYGUN1", "GUN_DOUBLE_BARRELED_ATOMIC_GUN");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_NARGOON1", "HEAVYGUN1", "GUN_DOUBLE_BARRELED_ATOMIC_GUN");
// patch note: double gun for config CFG_BASE_NARG - Nargoon (double two-barreled atomic gun) (lz)
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_BASE_NARG", "HEAVYGUN1", "GUN_DOUBLE_BARRELED_ATOMIC_GUN");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_BASE_NARG", "HEAVYGUN1", "GUN_DOUBLE_BARRELED_ATOMIC_GUN");
// patch note: double gun for config CFG_STNAR-97 - Nargoon (double GUN_INFRAATOMIC_PLASMA_GUN) (lz)
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_STNAR-97", "HEAVYGUN1", "GUN_INFRAATOMIC_PLASMA_GUN");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_STNAR-97", "HEAVYGUN1", "GUN_INFRAATOMIC_PLASMA_GUN");
// patch note: double gun for config CFG_FINDER_1 (std.3): from GUN_MICROWAVE_OSCILLATOR (std.4) and GUN_CHAOS_GENERATOR (std.4) to double GUN_FOUR_BARRELED_IMP_GAZER (std.3) (lz)
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_FINDER_1", "LIGHTGUN1", "GUN_FOUR_BARRELED_IMP_GAZER");
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_FINDER_1", "HEAVYGUN1", "GUN_FOUR_BARRELED_IMP_GAZER");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_FINDER_1", "LIGHTGUN1", "GUN_FOUR_BARRELED_IMP_GAZER");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_FINDER_1", "HEAVYGUN1", "GUN_FOUR_BARRELED_IMP_GAZER");
// patch note: double gun for config CFG_FINDER_2: from GUN_FOUR_BARRELED_IMP_GAZER (std.3) + GUN_POZITRON_EMITTER (std.4) to double GUN_TACHYON_HEATER (std.3) (lz)
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_FINDER_2", "LIGHTGUN1", "GUN_TACHYON_HEATER");
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_FINDER_2", "HEAVYGUN1", "GUN_TACHYON_HEATER");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_FINDER_2", "LIGHTGUN1", "GUN_TACHYON_HEATER");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_FINDER_2", "HEAVYGUN1", "GUN_TACHYON_HEATER");
// patch note: double gun for config CFG_EYEDSTONE_1: from GUN_FAST_ELECTROMAGNETIC_BEAM to double GUN_FAST_ELECTROMAGNETIC_BEAM (lz)
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_EYEDSTONE_1", "LIGHTGUN1", "GUN_FAST_ELECTROMAGNETIC_BEAM");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_EYEDSTONE_1", "LIGHTGUN1", "GUN_FAST_ELECTROMAGNETIC_BEAM");
// patch note: double gun for config CFG_EYEDSTONE_2: from GUN_FAST_ELECTROMAGNETIC_BEAM to double GUN_FAST_ELECTROMAGNETIC_BEAM (lz)
mod.db.db().edit_value((const char *)u8"Êîíôèãóðàöèè", "CFG_EYEDSTONE_2", "LIGHTGUN1", "GUN_FAST_ELECTROMAGNETIC_BEAM");
mod.db().edit_value(u8"Êîíôèãóðàöèè", "CFG_EYEDSTONE_2", "LIGHTGUN1", "GUN_FAST_ELECTROMAGNETIC_BEAM");
// patch note: INFORMATION
// patch note: add name for SINIGR armor, it was unnamed before (lz)
mod.db.quest().add_value("INFORMATION", "EQP_ZERO_ARMOR_S_SIN", "NAME", (const char *)u8"Îñîáàÿ íóëü-áðîíÿ");
mod.quest().add_value("INFORMATION", "EQP_ZERO_ARMOR_S_SIN", "NAME", u8"Îñîáàÿ íóëü-áðîíÿ");
// patch note:
// patch note: Game Changes

View file

@ -83,27 +83,6 @@ struct mod_maker {
script,
sound,
};
struct {
mod_maker &m;
db2 db_;
db2 quest_;
db2 &db() {
add_files("db");
return db_;
}
db2 &quest() {
add_files("quest");
return quest_;
}
private:
void add_files(const path &fn) {
auto base = path{"data"} / fn;
m.files_to_distribute.insert(path{base} += ".ind");
m.files_to_distribute.insert(path{base} += ".dat");
m.files_to_distribute.insert(path{base} += ".tab");
}
} db{*this};
std::string name;
std::string version;
@ -112,6 +91,7 @@ struct mod_maker {
std::set<path> files_to_distribute;
std::set<path> code_files_to_distribute;
std::source_location loc;
int db_codepage = 1251;
mod_maker(std::source_location loc = std::source_location::current()) : loc{loc} {
init(fs::current_path());
@ -145,9 +125,6 @@ struct mod_maker {
}
}
void apply() {
db.db_.close();
db.quest_.close();
std::vector<std::string> files;
for (auto &&p : files_to_pak) {
if (p.filename() == aim_exe) {
@ -345,7 +322,28 @@ struct mod_maker {
files_to_pak.insert(fn);
}
db2 db() {
return open_db("db");
}
db2 quest() {
return open_db("quest");
}
private:
void make_bak_file(const path &fn) {
auto backup = path{fn} += ".bak";
if (!fs::exists(backup)) {
fs::copy_file(fn, backup);
}
}
auto open_db(auto &&name) {
auto d = db2{get_data_dir() / name, db_codepage};
for (auto &&f : d.open().get_files()) {
make_bak_file(f);
files_to_distribute.insert(f);
}
return d;
}
path get_hash_fn(path fn, const byte_array &data) const {
return get_mod_dir() / std::format("{:0X}.hash", get_insert_hash(fn, data));
}
@ -367,8 +365,6 @@ private:
detect_game_dir(dir);
fs::create_directories(get_mod_dir());
code_files_to_distribute.insert(loc.file_name());
db.db_.open(get_data_dir() / "db", primitives::templates2::mmap_file<uint8_t>::rw{});
db.quest_.open(get_data_dir() / "quest", primitives::templates2::mmap_file<uint8_t>::rw{});
detect_tools();
prepare_injections();
#ifndef NDEBUG
@ -605,10 +601,7 @@ FF D7 ; call edi
}
void create_backup_exe_file() {
auto fn = find_real_filename(aim_exe);
auto backup = path{fn} += ".orig";
if (!fs::exists(backup)) {
fs::copy_file(fn, backup);
}
make_bak_file(fn);
}
template <typename T>
void patch_raw(path fn, uint32_t offset, T val) const {