add BULK and DEATH_GUNNER to rare tables
This commit is contained in:
+119
-108
@@ -38,6 +38,8 @@ const char* name_for_enum<EnemyType>(EnemyType type) {
|
||||
return "BOOTA";
|
||||
case EnemyType::BULCLAW:
|
||||
return "BULCLAW";
|
||||
case EnemyType::BULK:
|
||||
return "BULK";
|
||||
case EnemyType::CANADINE:
|
||||
return "CANADINE";
|
||||
case EnemyType::CANADINE_GROUP:
|
||||
@@ -287,6 +289,7 @@ EnemyType enum_for_name<EnemyType>(const char* name) {
|
||||
{"BOOMA", EnemyType::BOOMA},
|
||||
{"BOOTA", EnemyType::BOOTA},
|
||||
{"BULCLAW", EnemyType::BULCLAW},
|
||||
{"BULK", EnemyType::BULK},
|
||||
{"CANADINE", EnemyType::CANADINE},
|
||||
{"CANADINE_GROUP", EnemyType::CANADINE_GROUP},
|
||||
{"CANANE", EnemyType::CANANE},
|
||||
@@ -409,150 +412,152 @@ bool enemy_type_valid_for_episode(Episode episode, EnemyType enemy_type) {
|
||||
switch (episode) {
|
||||
case Episode::EP1:
|
||||
switch (enemy_type) {
|
||||
case EnemyType::MOTHMANT:
|
||||
case EnemyType::MONEST:
|
||||
case EnemyType::SAVAGE_WOLF:
|
||||
case EnemyType::BARBAROUS_WOLF:
|
||||
case EnemyType::POISON_LILY:
|
||||
case EnemyType::NAR_LILY:
|
||||
case EnemyType::SINOW_BEAT:
|
||||
case EnemyType::CANADINE:
|
||||
case EnemyType::CANADINE_GROUP:
|
||||
case EnemyType::CANANE:
|
||||
case EnemyType::CHAOS_SORCERER:
|
||||
case EnemyType::CHAOS_BRINGER:
|
||||
case EnemyType::DARK_BELRA:
|
||||
case EnemyType::DE_ROL_LE:
|
||||
case EnemyType::DRAGON:
|
||||
case EnemyType::SINOW_GOLD:
|
||||
case EnemyType::RAG_RAPPY:
|
||||
case EnemyType::AL_RAPPY:
|
||||
case EnemyType::NANO_DRAGON:
|
||||
case EnemyType::DUBCHIC:
|
||||
case EnemyType::GILLCHIC:
|
||||
case EnemyType::GARANZ:
|
||||
case EnemyType::DARK_GUNNER:
|
||||
case EnemyType::BARBAROUS_WOLF:
|
||||
case EnemyType::BOOMA:
|
||||
case EnemyType::BULCLAW:
|
||||
case EnemyType::BULK:
|
||||
case EnemyType::CANADINE_GROUP:
|
||||
case EnemyType::CANADINE:
|
||||
case EnemyType::CANANE:
|
||||
case EnemyType::CHAOS_BRINGER:
|
||||
case EnemyType::CHAOS_SORCERER:
|
||||
case EnemyType::CLAW:
|
||||
case EnemyType::VOL_OPT_2:
|
||||
case EnemyType::POUILLY_SLIME:
|
||||
case EnemyType::POFUILLY_SLIME:
|
||||
case EnemyType::PAN_ARMS:
|
||||
case EnemyType::HIDOOM:
|
||||
case EnemyType::MIGIUM:
|
||||
case EnemyType::DARVANT:
|
||||
case EnemyType::DARVANT_ULTIMATE:
|
||||
case EnemyType::DARK_BELRA:
|
||||
case EnemyType::DARK_FALZ_1:
|
||||
case EnemyType::DARK_FALZ_2:
|
||||
case EnemyType::DARK_FALZ_3:
|
||||
case EnemyType::HILDEBEAR:
|
||||
case EnemyType::HILDEBLUE:
|
||||
case EnemyType::BOOMA:
|
||||
case EnemyType::GOBOOMA:
|
||||
case EnemyType::GIGOBOOMA:
|
||||
case EnemyType::GRASS_ASSASSIN:
|
||||
case EnemyType::EVIL_SHARK:
|
||||
case EnemyType::PAL_SHARK:
|
||||
case EnemyType::GUIL_SHARK:
|
||||
case EnemyType::DARK_GUNNER:
|
||||
case EnemyType::DARVANT_ULTIMATE:
|
||||
case EnemyType::DARVANT:
|
||||
case EnemyType::DE_ROL_LE:
|
||||
case EnemyType::DEATH_GUNNER:
|
||||
case EnemyType::DELSABER:
|
||||
case EnemyType::DIMENIAN:
|
||||
case EnemyType::DRAGON:
|
||||
case EnemyType::DUBCHIC:
|
||||
case EnemyType::EVIL_SHARK:
|
||||
case EnemyType::GARANZ:
|
||||
case EnemyType::GIGOBOOMA:
|
||||
case EnemyType::GILLCHIC:
|
||||
case EnemyType::GOBOOMA:
|
||||
case EnemyType::GRASS_ASSASSIN:
|
||||
case EnemyType::GUIL_SHARK:
|
||||
case EnemyType::HIDOOM:
|
||||
case EnemyType::HILDEBEAR:
|
||||
case EnemyType::HILDEBLUE:
|
||||
case EnemyType::LA_DIMENIAN:
|
||||
case EnemyType::MIGIUM:
|
||||
case EnemyType::MONEST:
|
||||
case EnemyType::MOTHMANT:
|
||||
case EnemyType::NANO_DRAGON:
|
||||
case EnemyType::NAR_LILY:
|
||||
case EnemyType::PAL_SHARK:
|
||||
case EnemyType::PAN_ARMS:
|
||||
case EnemyType::POFUILLY_SLIME:
|
||||
case EnemyType::POISON_LILY:
|
||||
case EnemyType::POUILLY_SLIME:
|
||||
case EnemyType::RAG_RAPPY:
|
||||
case EnemyType::SAVAGE_WOLF:
|
||||
case EnemyType::SINOW_BEAT:
|
||||
case EnemyType::SINOW_GOLD:
|
||||
case EnemyType::SO_DIMENIAN:
|
||||
case EnemyType::VOL_OPT_2:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
case Episode::EP2:
|
||||
switch (enemy_type) {
|
||||
case EnemyType::MOTHMANT:
|
||||
case EnemyType::MONEST:
|
||||
case EnemyType::SAVAGE_WOLF:
|
||||
case EnemyType::BARBAROUS_WOLF:
|
||||
case EnemyType::POISON_LILY:
|
||||
case EnemyType::NAR_LILY:
|
||||
case EnemyType::SINOW_BERILL:
|
||||
case EnemyType::GEE:
|
||||
case EnemyType::CHAOS_SORCERER:
|
||||
case EnemyType::DELBITER:
|
||||
case EnemyType::DARK_BELRA:
|
||||
case EnemyType::BARBA_RAY:
|
||||
case EnemyType::GOL_DRAGON:
|
||||
case EnemyType::SINOW_SPIGELL:
|
||||
case EnemyType::RAG_RAPPY:
|
||||
case EnemyType::LOVE_RAPPY:
|
||||
case EnemyType::SAINT_RAPPY:
|
||||
case EnemyType::EGG_RAPPY:
|
||||
case EnemyType::HALLO_RAPPY:
|
||||
case EnemyType::GI_GUE:
|
||||
case EnemyType::DUBCHIC:
|
||||
case EnemyType::GILLCHIC:
|
||||
case EnemyType::GARANZ:
|
||||
case EnemyType::GAL_GRYPHON:
|
||||
case EnemyType::EPSILON:
|
||||
case EnemyType::BARBAROUS_WOLF:
|
||||
case EnemyType::CHAOS_SORCERER:
|
||||
case EnemyType::DARK_BELRA:
|
||||
case EnemyType::DEL_LILY:
|
||||
case EnemyType::ILL_GILL:
|
||||
case EnemyType::OLGA_FLOW_1:
|
||||
case EnemyType::OLGA_FLOW_2:
|
||||
case EnemyType::GAEL:
|
||||
case EnemyType::DELBITER:
|
||||
case EnemyType::DELDEPTH:
|
||||
case EnemyType::PAN_ARMS:
|
||||
case EnemyType::HIDOOM:
|
||||
case EnemyType::MIGIUM:
|
||||
case EnemyType::MERICAROL:
|
||||
case EnemyType::UL_GIBBON:
|
||||
case EnemyType::ZOL_GIBBON:
|
||||
case EnemyType::GIBBLES:
|
||||
case EnemyType::MORFOS:
|
||||
case EnemyType::RECOBOX:
|
||||
case EnemyType::RECON:
|
||||
case EnemyType::SINOW_ZOA:
|
||||
case EnemyType::SINOW_ZELE:
|
||||
case EnemyType::MERIKLE:
|
||||
case EnemyType::MERICUS:
|
||||
case EnemyType::HILDEBEAR:
|
||||
case EnemyType::HILDEBLUE:
|
||||
case EnemyType::MERILLIA:
|
||||
case EnemyType::MERILTAS:
|
||||
case EnemyType::GRASS_ASSASSIN:
|
||||
case EnemyType::DOLMOLM:
|
||||
case EnemyType::DOLMDARL:
|
||||
case EnemyType::DELSABER:
|
||||
case EnemyType::DIMENIAN:
|
||||
case EnemyType::DOLMDARL:
|
||||
case EnemyType::DOLMOLM:
|
||||
case EnemyType::DUBCHIC:
|
||||
case EnemyType::EGG_RAPPY:
|
||||
case EnemyType::EPSILON:
|
||||
case EnemyType::GAEL:
|
||||
case EnemyType::GAL_GRYPHON:
|
||||
case EnemyType::GARANZ:
|
||||
case EnemyType::GEE:
|
||||
case EnemyType::GI_GUE:
|
||||
case EnemyType::GIBBLES:
|
||||
case EnemyType::GILLCHIC:
|
||||
case EnemyType::GOL_DRAGON:
|
||||
case EnemyType::GRASS_ASSASSIN:
|
||||
case EnemyType::HALLO_RAPPY:
|
||||
case EnemyType::HIDOOM:
|
||||
case EnemyType::HILDEBEAR:
|
||||
case EnemyType::HILDEBLUE:
|
||||
case EnemyType::ILL_GILL:
|
||||
case EnemyType::LA_DIMENIAN:
|
||||
case EnemyType::LOVE_RAPPY:
|
||||
case EnemyType::MERICAROL:
|
||||
case EnemyType::MERICUS:
|
||||
case EnemyType::MERIKLE:
|
||||
case EnemyType::MERILLIA:
|
||||
case EnemyType::MERILTAS:
|
||||
case EnemyType::MIGIUM:
|
||||
case EnemyType::MONEST:
|
||||
case EnemyType::MORFOS:
|
||||
case EnemyType::MOTHMANT:
|
||||
case EnemyType::NAR_LILY:
|
||||
case EnemyType::OLGA_FLOW_1:
|
||||
case EnemyType::OLGA_FLOW_2:
|
||||
case EnemyType::PAN_ARMS:
|
||||
case EnemyType::POISON_LILY:
|
||||
case EnemyType::RAG_RAPPY:
|
||||
case EnemyType::RECOBOX:
|
||||
case EnemyType::RECON:
|
||||
case EnemyType::SAINT_RAPPY:
|
||||
case EnemyType::SAVAGE_WOLF:
|
||||
case EnemyType::SINOW_BERILL:
|
||||
case EnemyType::SINOW_SPIGELL:
|
||||
case EnemyType::SINOW_ZELE:
|
||||
case EnemyType::SINOW_ZOA:
|
||||
case EnemyType::SO_DIMENIAN:
|
||||
case EnemyType::UL_GIBBON:
|
||||
case EnemyType::ZOL_GIBBON:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
case Episode::EP4:
|
||||
switch (enemy_type) {
|
||||
case EnemyType::BOOTA:
|
||||
case EnemyType::ZE_BOOTA:
|
||||
case EnemyType::BA_BOOTA:
|
||||
case EnemyType::SAND_RAPPY:
|
||||
case EnemyType::DEL_RAPPY:
|
||||
case EnemyType::ZU:
|
||||
case EnemyType::PAZUZU:
|
||||
case EnemyType::ASTARK:
|
||||
case EnemyType::SATELLITE_LIZARD:
|
||||
case EnemyType::YOWIE:
|
||||
case EnemyType::DORPHON:
|
||||
case EnemyType::DORPHON_ECLAIR:
|
||||
case EnemyType::GORAN:
|
||||
case EnemyType::PYRO_GORAN:
|
||||
case EnemyType::GORAN_DETONATOR:
|
||||
case EnemyType::SAND_RAPPY_ALT:
|
||||
case EnemyType::BA_BOOTA:
|
||||
case EnemyType::BOOTA:
|
||||
case EnemyType::DEL_RAPPY_ALT:
|
||||
case EnemyType::DEL_RAPPY:
|
||||
case EnemyType::DORPHON_ECLAIR:
|
||||
case EnemyType::DORPHON:
|
||||
case EnemyType::GIRTABLULU:
|
||||
case EnemyType::GORAN_DETONATOR:
|
||||
case EnemyType::GORAN:
|
||||
case EnemyType::KONDRIEU:
|
||||
case EnemyType::MERISSA_A:
|
||||
case EnemyType::MERISSA_AA:
|
||||
case EnemyType::ZU_ALT:
|
||||
case EnemyType::PAZUZU_ALT:
|
||||
case EnemyType::SATELLITE_LIZARD_ALT:
|
||||
case EnemyType::YOWIE_ALT:
|
||||
case EnemyType::GIRTABLULU:
|
||||
case EnemyType::PAZUZU:
|
||||
case EnemyType::PYRO_GORAN:
|
||||
case EnemyType::SAINT_MILLION:
|
||||
case EnemyType::SAND_RAPPY_ALT:
|
||||
case EnemyType::SAND_RAPPY:
|
||||
case EnemyType::SATELLITE_LIZARD_ALT:
|
||||
case EnemyType::SATELLITE_LIZARD:
|
||||
case EnemyType::SHAMBERTIN:
|
||||
case EnemyType::KONDRIEU:
|
||||
case EnemyType::YOWIE_ALT:
|
||||
case EnemyType::YOWIE:
|
||||
case EnemyType::ZE_BOOTA:
|
||||
case EnemyType::ZU_ALT:
|
||||
case EnemyType::ZU:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
@@ -611,8 +616,10 @@ uint8_t battle_param_index_for_enemy_type(Episode episode, EnemyType enemy_type)
|
||||
case EnemyType::GARANZ:
|
||||
return 0x1D;
|
||||
case EnemyType::DARK_GUNNER:
|
||||
case EnemyType::DEATH_GUNNER:
|
||||
return 0x1E;
|
||||
case EnemyType::BULCLAW:
|
||||
case EnemyType::BULK:
|
||||
return 0x1F;
|
||||
case EnemyType::CLAW:
|
||||
return 0x20;
|
||||
@@ -865,6 +872,8 @@ uint8_t rare_table_index_for_enemy_type(EnemyType enemy_type) {
|
||||
return 0x09;
|
||||
case EnemyType::BOOTA:
|
||||
return 0x4D;
|
||||
case EnemyType::BULK:
|
||||
return 0x27;
|
||||
case EnemyType::BULCLAW:
|
||||
return 0x28;
|
||||
case EnemyType::CANADINE:
|
||||
@@ -886,6 +895,8 @@ uint8_t rare_table_index_for_enemy_type(EnemyType enemy_type) {
|
||||
return 0x2F;
|
||||
case EnemyType::DARK_GUNNER:
|
||||
return 0x22;
|
||||
case EnemyType::DEATH_GUNNER:
|
||||
return 0x23;
|
||||
case EnemyType::DE_ROL_LE:
|
||||
return 0x2D;
|
||||
case EnemyType::DEL_LILY:
|
||||
|
||||
@@ -20,6 +20,7 @@ enum class EnemyType {
|
||||
BOOMA,
|
||||
BOOTA,
|
||||
BULCLAW,
|
||||
BULK,
|
||||
CANADINE,
|
||||
CANADINE_GROUP,
|
||||
CANANE,
|
||||
|
||||
+1
-1
@@ -1439,7 +1439,7 @@ Action a_convert_rare_item_set(
|
||||
+[](Arguments& args) {
|
||||
auto version = get_cli_version(args);
|
||||
|
||||
double rate_factor = args.get<double>("multiply");
|
||||
double rate_factor = args.get<double>("multiply", 1.0);
|
||||
auto s = make_shared<ServerState>("system/config.json");
|
||||
s->load_config_early();
|
||||
s->load_patch_indexes(false);
|
||||
|
||||
@@ -2453,10 +2453,19 @@ DropReconcileResult reconcile_drop_request_with_map(
|
||||
// rt_indexes in Episode 4 don't match those sent in the command; we just
|
||||
// ignore what the client sends.
|
||||
if ((episode != Episode::EP4) && (cmd.rt_index != res.effective_rt_index)) {
|
||||
log.warning("rt_index %02hhX from command does not match entity\'s expected index %02" PRIX32,
|
||||
cmd.rt_index, res.effective_rt_index);
|
||||
if (!is_v4(version)) {
|
||||
res.effective_rt_index = cmd.rt_index;
|
||||
// Special cases: BULCLAW => BULK and DARK_GUNNER => DEATH_GUNNER
|
||||
if (cmd.rt_index == 0x27 && map_enemy->type == EnemyType::BULCLAW) {
|
||||
log.info("E-%hX killed as BULK instead of BULCLAW", map_enemy->enemy_id);
|
||||
res.effective_rt_index = 0x27;
|
||||
} else if (cmd.rt_index == 0x23 && map_enemy->type == EnemyType::DARK_GUNNER) {
|
||||
log.info("E-%hX killed as DEATH_GUNNER instead of DARK_GUNNER", map_enemy->enemy_id);
|
||||
res.effective_rt_index = 0x23;
|
||||
} else {
|
||||
log.warning("rt_index %02hhX from command does not match entity\'s expected index %02" PRIX32,
|
||||
cmd.rt_index, res.effective_rt_index);
|
||||
if (!is_v4(version)) {
|
||||
res.effective_rt_index = cmd.rt_index;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cmd.floor != map_enemy->floor) {
|
||||
|
||||
Reference in New Issue
Block a user