mirror of
https://github.com/aimrebirth/tools.git
synced 2026-04-14 17:33:25 +00:00
Misc.
This commit is contained in:
parent
2ffc7052c0
commit
9bc68ed494
3 changed files with 70 additions and 48 deletions
|
|
@ -288,48 +288,30 @@ int main(int argc, char *argv[]) {
|
||||||
//mod.replace("under.scr", "_ADDSENSOR(T_L4_BASE_2)", "_ADDSENSOR(T_L4_BASE_2)\n_MARK(T_L4_BASE_2)");
|
//mod.replace("under.scr", "_ADDSENSOR(T_L4_BASE_2)", "_ADDSENSOR(T_L4_BASE_2)\n_MARK(T_L4_BASE_2)");
|
||||||
|
|
||||||
//
|
//
|
||||||
mod.clone_mech_group("location1.mmo", "MINVACH-6", "MINVACH-666");
|
/*mod.clone_mech_group("location1.mmo", "MINVACH-6", "MINVACH-666_1");
|
||||||
|
mod.clone_mech_group("location1.mmo", "MINVACH-6", "MINVACH-666_2");
|
||||||
|
mod.update_mech_group_configurations("location1.mmo", "MINVACH-666_1", "CFG_INVADER_1");
|
||||||
|
mod.update_mech_group_configurations("location1.mmo", "MINVACH-666_2", "CFG_INVADER_1", "CFG_TEST");
|
||||||
auto cfg = "CFG_TEST";
|
auto cfg = "CFG_TEST";
|
||||||
db["Конфигурации"][cfg] = db["Конфигурации"]["CFG_STARTUP"];
|
db["Конфигурации"][cfg] = db["Конфигурации"]["CFG_STARTUP"];
|
||||||
db["Конфигурации"][cfg]["ENGINE"] = "EQP_VACUUM_DRIVE_S4";
|
db["Конфигурации"][cfg]["ENGINE"] = "EQP_VACUUM_DRIVE_S4";
|
||||||
|
db["Конфигурации"][cfg]["RATING"] = "10";
|
||||||
auto make = [&](auto name, int road) {
|
auto make = [&](auto name, int road) {
|
||||||
mod.clone_mech_group("location1.mmo", "MINVACH-6", name);
|
mod.clone_mech_group("location1.mmo", "MINVACH-6", name);
|
||||||
mod.update_mech_group_configurations("location1.mmo", name, cfg);
|
mod.update_mech_group_configurations("location1.mmo", name, cfg);
|
||||||
mod.set_mech_group_type("location1.mmo", name, 1, road);
|
mod.set_mech_group_type("location1.mmo", name, 1, road);
|
||||||
};
|
};*/
|
||||||
for (int i = 0; i < 20; ++i) {
|
for (int i = 0; i < 20; ++i) {
|
||||||
//make(std::format("MINVACH-6{}", i), 1000 / 20 * i + 20);
|
//make(std::format("MINVACH-6{}", i), 1000 / 20 * i + 20);
|
||||||
}
|
}
|
||||||
auto &pol = mod.politics();
|
/*auto &pol = mod.politics();
|
||||||
pol["ORG_INVADERS"].aggressiveness = 1000;
|
pol["ORG_INVADERS"].aggressiveness = 1000;
|
||||||
pol["ORG_INVADERS"].authority = 1000;
|
pol["ORG_INVADERS"].authority = 1000;
|
||||||
pol["ORG_INVADERS"]["ORG_TRANSES"] = -1000;
|
pol["ORG_INVADERS"]["ORG_TRANSES"] = -1000;
|
||||||
pol["ORG_INVADERS"]["ORG_HUNTERS"] = -1000;
|
pol["ORG_INVADERS"]["ORG_HUNTERS"] = -1000;
|
||||||
pol["ORG_INVADERS"]["ORG_FREE"] = -1000;
|
pol["ORG_INVADERS"]["ORG_FREE"] = -1000;
|
||||||
pol["ORG_INVADERS"]["ORG_INVADERS"] = 1000;
|
pol["ORG_INVADERS"]["ORG_INVADERS"] = 1000;*/
|
||||||
//pol["ORG_INVADERS"]["ORG_PLAYER"] = 1000; // does not work
|
//pol["ORG_INVADERS"]["ORG_PLAYER"] = 1000; // does not work
|
||||||
/*mod.update_mechmind_group_configurations("location1.mmo", "MINVACH-666",
|
|
||||||
cfg,
|
|
||||||
cfg,
|
|
||||||
cfg,
|
|
||||||
cfg,
|
|
||||||
cfg,
|
|
||||||
|
|
||||||
cfg,
|
|
||||||
cfg,
|
|
||||||
cfg,
|
|
||||||
cfg,
|
|
||||||
cfg
|
|
||||||
);*/
|
|
||||||
//mod.set_mechmind_group_organization("location1.mmo", "MINVACH-666", "ORG_PLAYER");
|
|
||||||
//mod.set_mechmind_group_type("location1.mmo", "MINVACH-666", 1);
|
|
||||||
/*mod.hide_mechmind_group("location1.mmo", "MINVACH-666");
|
|
||||||
mod.delete_mechmind_group("location1.mmo", "MINVACH-6");
|
|
||||||
for (auto &&[n,_] : mod.get_mmo_storage("location1.mmo").mechs) {
|
|
||||||
if (n != "SHUN-2") {
|
|
||||||
mod.delete_mechmind_group("location1.mmo", n);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// does not work, crashes. Maybe different item size
|
// does not work, crashes. Maybe different item size
|
||||||
// or maybe too many goods
|
// or maybe too many goods
|
||||||
|
|
@ -384,7 +366,7 @@ int main(int argc, char *argv[]) {
|
||||||
//_SETEVENT(SECTOR9.VISIT)
|
//_SETEVENT(SECTOR9.VISIT)
|
||||||
//_SETEVENT(SECTOR9.ACCESS)
|
//_SETEVENT(SECTOR9.ACCESS)
|
||||||
|
|
||||||
_INFO(SECTOR2_TEST)
|
//_INFO(SECTOR2_TEST)
|
||||||
//_INFO(SECTOR3_TEST)
|
//_INFO(SECTOR3_TEST)
|
||||||
//_INFO(SECTOR9_TEST)
|
//_INFO(SECTOR9_TEST)
|
||||||
//_INFO(SECTOR10_TEST)
|
//_INFO(SECTOR10_TEST)
|
||||||
|
|
@ -401,9 +383,9 @@ int main(int argc, char *argv[]) {
|
||||||
<br>
|
<br>
|
||||||
<link: войти 11=LINKJUMPTO location11.mmp>
|
<link: войти 11=LINKJUMPTO location11.mmp>
|
||||||
)";
|
)";
|
||||||
//mod.copy_sector_from_aim1(1, 9);
|
//mod.copy_sector_from_aim1(1);
|
||||||
//mod.copy_sector_from_aim1(1, 10);
|
//mod.copy_sector_from_aim1(2);
|
||||||
//mod.copy_sector_from_aim1(1, 11);
|
//mod.copy_sector_from_aim1(3);
|
||||||
//quest["ru_RU"]["INFORMATION"]["SECTOR2_TEST"]["NAME"] = "test";
|
//quest["ru_RU"]["INFORMATION"]["SECTOR2_TEST"]["NAME"] = "test";
|
||||||
//quest["ru_RU"]["INFORMATION"]["SECTOR2_TEST"]["TEXT"] = "<link: войти 2=LINKJUMPTO location2.mmp>";
|
//quest["ru_RU"]["INFORMATION"]["SECTOR2_TEST"]["TEXT"] = "<link: войти 2=LINKJUMPTO location2.mmp>";
|
||||||
//mod.copy_sector_from_aim1(1, 1);
|
//mod.copy_sector_from_aim1(1, 1);
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
#include <source_location>
|
#include <source_location>
|
||||||
#include <print>
|
#include <print>
|
||||||
|
|
||||||
constexpr auto aim_exe = "aim.exe"sv;
|
inline const path aim_exe = "aim.exe";
|
||||||
|
|
||||||
using byte_array = std::vector<uint8_t>;
|
using byte_array = std::vector<uint8_t>;
|
||||||
|
|
||||||
|
|
@ -292,8 +292,8 @@ struct politics {
|
||||||
struct mod_maker {
|
struct mod_maker {
|
||||||
struct db_wrapper {
|
struct db_wrapper {
|
||||||
mod_maker &mm;
|
mod_maker &mm;
|
||||||
db2::files::db2_internal m;
|
db2::files_type::db2_internal m;
|
||||||
db2::files::db2_internal m2;
|
db2::files_type::db2_internal m2;
|
||||||
path fn;
|
path fn;
|
||||||
int codepage{1251};
|
int codepage{1251};
|
||||||
bool written{};
|
bool written{};
|
||||||
|
|
@ -317,11 +317,11 @@ struct mod_maker {
|
||||||
auto &operator[](this auto &&d, const std::string &s) {
|
auto &operator[](this auto &&d, const std::string &s) {
|
||||||
return d.m[s];
|
return d.m[s];
|
||||||
}
|
}
|
||||||
auto ©_from_aim2(db2::files::db2_internal &other_db, auto &&table_name, auto &&value_name, auto &&field_name) {
|
auto ©_from_aim2(db2::files_type::db2_internal &other_db, auto &&table_name, auto &&value_name, auto &&field_name) {
|
||||||
m[table_name][value_name][field_name] = other_db.at(table_name).at(value_name).at(field_name);
|
m[table_name][value_name][field_name] = other_db.at(table_name).at(value_name).at(field_name);
|
||||||
return m[table_name][value_name][field_name];
|
return m[table_name][value_name][field_name];
|
||||||
}
|
}
|
||||||
auto ©_from_aim2(db2::files::db2_internal &other_db, auto &&table_name, auto &&value_name) {
|
auto ©_from_aim2(db2::files_type::db2_internal &other_db, auto &&table_name, auto &&value_name) {
|
||||||
m[table_name][value_name] = other_db.at(table_name).at(value_name);
|
m[table_name][value_name] = other_db.at(table_name).at(value_name);
|
||||||
return m[table_name][value_name];
|
return m[table_name][value_name];
|
||||||
}
|
}
|
||||||
|
|
@ -390,6 +390,7 @@ struct mod_maker {
|
||||||
std::set<path> files_to_pak;
|
std::set<path> files_to_pak;
|
||||||
std::set<path> files_to_pak_mmp;
|
std::set<path> files_to_pak_mmp;
|
||||||
std::set<path> files_to_distribute;
|
std::set<path> files_to_distribute;
|
||||||
|
//std::map<path, path> files_to_distribute2;
|
||||||
std::set<path> code_files_to_distribute;
|
std::set<path> code_files_to_distribute;
|
||||||
std::set<path> restored_files;
|
std::set<path> restored_files;
|
||||||
std::set<path> copied_files;
|
std::set<path> copied_files;
|
||||||
|
|
@ -397,7 +398,7 @@ struct mod_maker {
|
||||||
db_wrapper dw{*this};
|
db_wrapper dw{*this};
|
||||||
quest_wrapper qw{*this};
|
quest_wrapper qw{*this};
|
||||||
bool injections_prepared{};
|
bool injections_prepared{};
|
||||||
int next_sector_id{9};
|
uint8_t number_of_sectors{8};
|
||||||
politics pol;
|
politics pol;
|
||||||
|
|
||||||
mod_maker(std::source_location loc = std::source_location::current()) : loc{loc} {
|
mod_maker(std::source_location loc = std::source_location::current()) : loc{loc} {
|
||||||
|
|
@ -1032,7 +1033,9 @@ struct mod_maker {
|
||||||
copy_texture_from_aim2(gun["SHOOTTEX1"]);
|
copy_texture_from_aim2(gun["SHOOTTEX1"]);
|
||||||
}
|
}
|
||||||
void copy_sector_from_aim1(int id_from) {
|
void copy_sector_from_aim1(int id_from) {
|
||||||
copy_sector_from_aim1(id_from, next_sector_id++);
|
++number_of_sectors;
|
||||||
|
copy_sector_from_aim1(id_from, number_of_sectors);
|
||||||
|
//patch<uint8_t>(aim_exe, 0x12CC2, number_of_sectors - 1, number_of_sectors);
|
||||||
}
|
}
|
||||||
void copy_sector_from_aim1(int id_from, int id_to) {
|
void copy_sector_from_aim1(int id_from, int id_to) {
|
||||||
auto from = std::format("location{}", id_from);
|
auto from = std::format("location{}", id_from);
|
||||||
|
|
@ -1040,13 +1043,16 @@ struct mod_maker {
|
||||||
auto mmp = find_real_filename(from + ".mmp");
|
auto mmp = find_real_filename(from + ".mmp");
|
||||||
auto mmo = find_real_filename(from + ".mmo");
|
auto mmo = find_real_filename(from + ".mmo");
|
||||||
auto mmm = find_real_filename(from + ".mmm");
|
auto mmm = find_real_filename(from + ".mmm");
|
||||||
if (mmp != get_mod_dir() / (to + ".mmp"))
|
//auto mmp_dest = get_mod_dir() / (to + ".mmp");
|
||||||
fs::copy_file(mmp, get_mod_dir() / (to + ".mmp"), fs::copy_options::update_existing);
|
auto mmp_dest = game_dir / (to + ".mmp");
|
||||||
|
if (mmp != mmp_dest)
|
||||||
|
fs::copy_file(mmp, mmp_dest, fs::copy_options::update_existing);
|
||||||
if (mmo != get_mod_dir() / (to + ".mmo"))
|
if (mmo != get_mod_dir() / (to + ".mmo"))
|
||||||
fs::copy_file(mmo, get_mod_dir() / (to + ".mmo"), fs::copy_options::update_existing);
|
fs::copy_file(mmo, get_mod_dir() / (to + ".mmo"), fs::copy_options::update_existing);
|
||||||
if (mmm != get_mod_dir() / (to + ".mmm"))
|
if (mmm != get_mod_dir() / (to + ".mmm"))
|
||||||
fs::copy_file(mmm, get_mod_dir() / (to + ".mmm"), fs::copy_options::update_existing);
|
fs::copy_file(mmm, get_mod_dir() / (to + ".mmm"), fs::copy_options::update_existing);
|
||||||
files_to_pak_mmp.insert(get_mod_dir() / (to + ".mmp"));
|
files_to_distribute.insert(mmp_dest);
|
||||||
|
//files_to_pak_mmp.insert(get_mod_dir() / (to + ".mmp")); // we cannot pack .mmp properly now
|
||||||
files_to_pak.insert(get_mod_dir() / (to + ".mmo"));
|
files_to_pak.insert(get_mod_dir() / (to + ".mmo"));
|
||||||
files_to_pak.insert(get_mod_dir() / (to + ".mmm"));
|
files_to_pak.insert(get_mod_dir() / (to + ".mmm"));
|
||||||
quest()["ru_RU"]["INFORMATION"][boost::to_upper_copy(to)] = quest()["ru_RU"]["INFORMATION"][boost::to_upper_copy(from)];
|
quest()["ru_RU"]["INFORMATION"][boost::to_upper_copy(to)] = quest()["ru_RU"]["INFORMATION"][boost::to_upper_copy(from)];
|
||||||
|
|
@ -1054,6 +1060,26 @@ struct mod_maker {
|
||||||
s += " Copy";
|
s += " Copy";
|
||||||
quest()["ru_RU"]["INFORMATION"][boost::to_upper_copy(to)]["NAME"] = s;
|
quest()["ru_RU"]["INFORMATION"][boost::to_upper_copy(to)]["NAME"] = s;
|
||||||
quest()["ru_RU"]["INFORMATION"][std::format("INFO_SECTOR{}", id_to)] = quest()["ru_RU"]["INFORMATION"][std::format("INFO_SECTOR{}", id_from)];
|
quest()["ru_RU"]["INFORMATION"][std::format("INFO_SECTOR{}", id_to)] = quest()["ru_RU"]["INFORMATION"][std::format("INFO_SECTOR{}", id_from)];
|
||||||
|
|
||||||
|
auto var = "INFO_LET_JUMP_NEW_SECTORS"s;
|
||||||
|
// Здесь ты можешь совершить Переход в новые Сектора.
|
||||||
|
s.clear();
|
||||||
|
for (int i = 9; i <= number_of_sectors; ++i) {
|
||||||
|
s += std::format("<link: Enter Sector {0}=LINKJUMPTO location{0}.mmp><br>", i);
|
||||||
|
}
|
||||||
|
|
||||||
|
quest()["ru_RU"]["INFORMATION"][var]["NAME"] = "Совершить Переход в новые Сектора";
|
||||||
|
quest()["ru_RU"]["INFORMATION"][var]["TEXT"] = s;
|
||||||
|
|
||||||
|
quest()["en_US"]["INFORMATION"][var]["NAME"] = "Go through the Passage into new Sectors";
|
||||||
|
quest()["en_US"]["INFORMATION"][var]["TEXT"] = s;
|
||||||
|
|
||||||
|
static std::once_flag o;
|
||||||
|
std::call_once(o, [&]() {
|
||||||
|
for (int i = 1; i <= 7; ++i) {
|
||||||
|
replace(std::format("Script/bin/B_L{}_TUNNEL.scr", i), "_INFO(INFO_LET_JUMP)", "_INFO(INFO_LET_JUMP)\n_INFO(" + var + ")");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &db() {
|
auto &db() {
|
||||||
|
|
@ -1061,7 +1087,9 @@ struct mod_maker {
|
||||||
auto cp = 1251; // always 1251 or 0 probably for db
|
auto cp = 1251; // always 1251 or 0 probably for db
|
||||||
open_db("db", cp);
|
open_db("db", cp);
|
||||||
if (aim2_available()) {
|
if (aim2_available()) {
|
||||||
dw.m2 = db2{aim2_game_dir / "data" / "db"}.open().to_map(cp);
|
auto f = db2{aim2_game_dir / "data" / "db"}.create();
|
||||||
|
f.open();
|
||||||
|
dw.m2 = f.to_map(cp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return dw;
|
return dw;
|
||||||
|
|
@ -1132,13 +1160,15 @@ private:
|
||||||
}
|
}
|
||||||
void open_db(auto &&name, int db_codepage) {
|
void open_db(auto &&name, int db_codepage) {
|
||||||
auto d = db2{get_data_dir() / name};
|
auto d = db2{get_data_dir() / name};
|
||||||
auto files = d.open().get_files();
|
auto files = d.create().get_files();
|
||||||
for (auto &&f : files) {
|
for (auto &&f : files) {
|
||||||
backup_or_restore_once(f);
|
backup_or_restore_once(f);
|
||||||
files_to_distribute.insert(f);
|
files_to_distribute.insert(f);
|
||||||
}
|
}
|
||||||
auto &w = dw;
|
auto &w = dw;
|
||||||
w.m = d.open().to_map(db_codepage);
|
auto f = d.create();
|
||||||
|
f.open();
|
||||||
|
w.m = f.to_map(db_codepage);
|
||||||
w.fn = d.fn;
|
w.fn = d.fn;
|
||||||
w.codepage = db_codepage;
|
w.codepage = db_codepage;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -158,20 +158,27 @@ struct db2 {
|
||||||
primitives::templates2::mmap_file<uint8_t> f;
|
primitives::templates2::mmap_file<uint8_t> f;
|
||||||
T *data;
|
T *data;
|
||||||
|
|
||||||
file(auto &&base) : fn{path{base} += "."s} {
|
file(const path &base) : fn{path{base} += "."s} {
|
||||||
fn += type_name<T>();
|
fn += type_name<T>();
|
||||||
|
}
|
||||||
|
void open() {
|
||||||
f.open(fn, primitives::templates2::mmap_file<uint8_t>::ro{});
|
f.open(fn, primitives::templates2::mmap_file<uint8_t>::ro{});
|
||||||
data = (T *)f.p;
|
data = (T *)f.p;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// actual db
|
// actual db
|
||||||
struct files {
|
struct files_type {
|
||||||
db2 &db;
|
db2 &db;
|
||||||
file<tab> tab_;
|
file<tab> tab_;
|
||||||
file<ind> ind_;
|
file<ind> ind_;
|
||||||
file<dat> dat_;
|
file<dat> dat_;
|
||||||
|
|
||||||
files(auto &&db, auto &&base) : db{db}, tab_{base}, ind_{base}, dat_{base} {}
|
files_type(auto &&db, auto &&base) : db{db}, tab_{base}, ind_{base}, dat_{base} {}
|
||||||
|
void open() {
|
||||||
|
tab_.open();
|
||||||
|
ind_.open();
|
||||||
|
dat_.open();
|
||||||
|
}
|
||||||
auto get_files() const {
|
auto get_files() const {
|
||||||
return std::set<path>{tab_.fn,ind_.fn,dat_.fn};
|
return std::set<path>{tab_.fn,ind_.fn,dat_.fn};
|
||||||
}
|
}
|
||||||
|
|
@ -386,7 +393,10 @@ struct db2 {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
auto open() {
|
auto files() {
|
||||||
return files{*this, fn};
|
return files_type{*this, fn}.get_files();
|
||||||
|
}
|
||||||
|
auto create() {
|
||||||
|
return files_type{*this, fn};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue