5#define _USE_MATH_DEFINES
38 uint16_t item_id, uint32_t dual_wield,uint32_t is_ranged);
74 uint32_t angle, uint16_t *ranges, uint32_t target_count,
78 uint16_t next_figure = 0;
84 uint32_t distance =
toolboxAPI.getDistance(&source_pos, &target_pos);
86 uint32_t radius = (uint32_t)round((distance << 10) * tan((angle*M_PI_2)/180)) >> 10;
88 uint16_t min_range = ranges[0];
89 uint16_t max_range = ranges[1];
93 iteratorAPI.figureIteratorInit(&iter, 0, 0, 0x3ff, 0x3ff);
95 iteratorAPI.iteratorSetArea(&iter, &target_pos, radius);
97 while ((next_figure != 0) && (target_count != 0))
100 distance =
toolboxAPI.getDistance(&source_pos, &secondary_pos);
101 if ((distance > min_range) && (distance < max_range))
112 return (((uint32_t)output->
data - (uint32_t)output->
first) != 0);
119 int32_t total_flat = base_val+bonus_val;
124 (multiplier < 0) ? (multiplier = 1) : (multiplier);
125 result = (uint16_t)((total_flat * multiplier) / 100);
127 (result == 0) ? (result = 1) : (result);
135 int32_t total_flat = base_val+bonus_val;
140 (multiplier < 0) ? (multiplier = 1) : (multiplier);
141 result = (uint16_t)((total_flat * multiplier) / 100);
143 (result == 0) ? (result = 1) : (result);
151 int32_t total_flat = base_val+bonus_val;
156 (multiplier < 0) ? (multiplier = 1) : (multiplier);
157 result = (uint16_t)((total_flat * multiplier) / 100);
159 (result == 0) ? (result = 1) : (result);
167 int32_t total_flat = base_val+bonus_val;
172 (multiplier < 0) ? (multiplier = 1) : (multiplier);
173 result = (uint16_t)((total_flat * multiplier) / 100);
175 (result == 0) ? (result = 1) : (result);
183 int32_t total_flat = base_val+bonus_val;
188 (multiplier < 0) ? (multiplier = 1) : (multiplier);
189 result = (uint16_t)((total_flat * multiplier) / 100);
191 (result == 0) ? (result = 1) : (result);
199 int32_t total_flat = base_val+bonus_val;
204 (multiplier < 0) ? (multiplier = 1) : (multiplier);
205 result = (uint16_t)((total_flat * multiplier) / 100);
207 (result == 0) ? (result = 1) : (result);
215 int32_t total_flat = base_val+bonus_val;
220 (multiplier < 0) ? (multiplier = 1) : (multiplier);
221 result = (uint16_t)((total_flat * multiplier) / 100);
223 (result == 0) ? (result = 1) : (result);
231 int32_t total_flat = base_val+bonus_val;
237 (multiplier < 0) ? (multiplier = 1) : (multiplier);
238 result = (uint16_t)((total_flat * multiplier) / 100);
239 (result - missing_val < 0) ? (result = 0) : (result -= missing_val);
248 int32_t total_flat = base_val+bonus_val;
253 (multiplier < 0) ? (multiplier = 1) : (multiplier);
254 result = (uint16_t)((total_flat * multiplier) / 100);
256 (result == 0) ? (result = 1) : (result);
264 int32_t total_flat = base_val+bonus_val;
270 (multiplier < 0) ? (multiplier = 1) : (multiplier);
271 result = (uint16_t)((total_flat * multiplier) / 100);
272 (result - missing_val < 0) ? (result = 0) : (result -= missing_val);
281 int32_t total_flat = base_val+bonus_val;
287 (multiplier < 0) ? (multiplier = 1) : (multiplier);
288 result = (uint16_t)((total_flat * multiplier) / 100);
289 (result - missing_val < 0) ? (result = 1) : (result -= missing_val);
298 int32_t total_flat = base_val+bonus_val;
303 (multiplier < 0) ? (multiplier = 1) : (multiplier);
304 result = (uint16_t)((total_flat * multiplier) / 100);
306 (result == 0) ? (result = 1) : (result);
314 int32_t total_flat = base_val+bonus_val;
319 (multiplier < 0) ? (multiplier = 1) : (multiplier);
320 result = (uint16_t)((total_flat * multiplier) / 100);
322 (result == 0) ? (result = 1) : (result);
330 int32_t total_flat = base_val+bonus_val;
335 (multiplier < 0) ? (multiplier = 1) : (multiplier);
336 result = (uint16_t)((total_flat * multiplier) / 100);
338 (result == 0) ? (result = 1) : (result);
346 int32_t total_flat = base_val+bonus_val;
351 (multiplier < 0) ? (multiplier = 1) : (multiplier);
352 result = (uint16_t)((total_flat * multiplier) / 100);
354 (result == 0) ? (result = 1) : (result);
362 int32_t total_flat = base_val+bonus_val;
367 (multiplier < 0) ? (multiplier = 1) : (multiplier);
368 result = (uint16_t)((total_flat * multiplier) / 100);
370 (result == 0) ? (result = 1) : (result);
378 int32_t total_flat = base_val+bonus_val;
383 (multiplier < 0) ? (multiplier = 1) : (multiplier);
384 result = (uint16_t)((total_flat * multiplier) / 100);
386 (result == 0) ? (result = 1) : (result);
394 int32_t total_flat = base_val+bonus_val;
399 (multiplier < 0) ? (multiplier = 1) : (multiplier);
400 result = (uint16_t)((total_flat * multiplier) / 100);
402 (result == 0) ? (result = 1) : (result);
410 int32_t total_flat = base_val+bonus_val;
415 (multiplier < 0) ? (multiplier = 1) : (multiplier);
416 result = (uint16_t)((total_flat * multiplier) / 100);
418 (result == 0) ? (result = 1) : (result);
426 int32_t total_flat = base_val+bonus_val;
431 (multiplier < 0) ? (multiplier = 1) : (multiplier);
432 result = (uint16_t)((total_flat * multiplier) / 100);
434 (result == 0) ? (result = 1) : (result);
442 while (master_id != 0)
446 figure_id = master_id;
462 std::vector<uint16_t> spell_indices;
476 spell_indices.push_back(spell_index);
479 while (spell_indices.size() != 0)
481 uint16_t spell_index = spell_indices.back();
482 spell_indices.pop_back();
489static void figure_turn_off_battle_mode_hook()
500static void figure_statistic_hook_current_ac()
511static void figure_statistic_hook_current_agi()
522static void figure_statistic_hook_current_cha()
533static void figure_statistic_hook_current_dex()
544static void figure_statistic_hook_current_int()
555static void figure_statistic_hook_current_hp()
575static void figure_statistic_hook_current_mp()
595static void figure_statistic_hook_current_sta()
606static void figure_statistic_hook_current_str()
617static void figure_statistic_hook_current_wis()
628static void figure_statistic_hook_current_fire_res()
639static void figure_statistic_hook_current_ice_res()
650static void figure_statistic_hook_current_mental_res()
661static void figure_statistic_hook_current_black_res()
672static void figure_statistic_hook_current_walk_spd()
683static void figure_statistic_hook_current_fight_spd()
694static void figure_statistic_hook_current_cast_spd()
705static void salvo_fix_hook()
715static void get_race_fix_hook()
731 switch (figure_data_id)
761 bool result = ((figure_data_id > 2219) && (figure_data_id < 2226));
778 if ((owner != 0) && (race != 0) && (race < 7))
789 if (worker_count > 0)
798 bool side = ((race != 3) && (race != 2) && (race != 1));
812static void army_size_fix_hook()
823 return (
SF_CGdFigure *)(*(uint32_t *)((uint32_t)CGdMain + 0x30));
830 uint32_t lvl_mult = 0;
832 uiAPI.SFStringConstructor(&description);
845 str_mult *= 3 * (figures->
figures[figure_id].
level + 9);
849 uint32_t damage = (weapon_data->
max_dmg * str_mult * lvl_mult + 50000) / 100000;
850 uiAPI.SFprintf(out_string,L
"%s %i ", description.
raw_data, damage);
854 uint32_t max_damage = (weapon_data->
max_dmg * str_mult * lvl_mult + 50000) / 100000;
855 uint32_t min_damage = (weapon_data->
min_dmg * str_mult * lvl_mult + 50000) / 100000;
856 uiAPI.SFprintf(out_string,L
"%s %i-%i ", description.
raw_data, min_damage,max_damage);
858 uiAPI.SFStringDestructor(&description);
867 uiAPI.SFStringConstructor(&full_desc);
868 uiAPI.SFStringConstructor(&description);
872 uiAPI.SFprintf(&full_desc, L
"%i/%i", hp, max_hp);
877 uiAPI.SFStringDestructor(&description);
878 uiAPI.SFStringDestructor(&full_desc);
886 uiAPI.SFStringConstructor(&full_desc);
887 uiAPI.SFStringConstructor(&description);
889 uint32_t max_mp =
figureAPI.getMaxStat(figures, figure_id,
MANA);
890 uint32_t mp =
figureAPI.getCurrentStat(figures, figure_id,
MANA);
891 uiAPI.SFprintf(&full_desc, L
"%i/%i", mp, max_mp);
896 uiAPI.SFStringDestructor(&description);
897 uiAPI.SFStringDestructor(&full_desc);
907 uiAPI.SFStringFromWchar(&header_string, L
'\n', 1);
908 uiAPI.SFStringFromWchar(&newline, L
'\n', 1);
909 uiAPI.SFStringConstructor(&desc_str1);
910 uiAPI.SFStringConstructor(&desc_str2);
913 uiAPI.SFprintf(&desc_str2, L
"%s ", desc_str1);
914 uiAPI.SFStringConcat(&header_string, &desc_str2);
915 uiAPI.SFprintf(&header_string, L
"%%c%x%s%%d",0xc0d0ff,header_string.
raw_data);
918 uiAPI.SFStringCopy(out_string, &header_string);
920 uiAPI.SFStringDestructor(&newline);
921 uiAPI.SFStringDestructor(&header_string);
922 uiAPI.SFStringDestructor(&desc_str1);
923 uiAPI.SFStringDestructor(&desc_str2);
937 uiAPI.SFStringConstructor(&desc_str1);
938 uiAPI.SFStringConstructor(&desc_str2);
939 uiAPI.SFStringFromWchar(&spell_string, L
'\n', 1);
940 uiAPI.SFStringFromWchar(&newline, L
'\n', 1);
948 uiAPI.SFStringConcat(&spell_string, &desc_str1);
949 uiAPI.SFStringConcat(&spell_string, &newline);
953 uiAPI.SFStringConcat(&spell_string, &full_desc);
957 uiAPI.SFStringCopy(out_string, &spell_string);
960 uiAPI.SFStringDestructor(&desc_str1);
961 uiAPI.SFStringDestructor(&desc_str2);
963 uiAPI.SFStringDestructor(&full_desc);
964 uiAPI.SFStringDestructor(&spell_string);
965 uiAPI.SFStringDestructor(&newline);
977 uiAPI.SFStringConstructor(&chance_string);
978 uiAPI.SFStringConstructor(&desc_str1);
979 uiAPI.SFStringConstructor(&desc_str2);
980 uiAPI.SFStringConstructor(&description);
981 uiAPI.SFStringFromWchar(&newline, L
'\n', 1);
990 uiAPI.SFprintf(out_string,L
"%%c%x%s:%%d ",0xc0d0ff,desc_str1.
raw_data);
993 uiAPI.SFStringConcat(out_string, &description);
995 uint16_t chance = handler(figures, figure_id);
996 uiAPI.SFprintf(&chance_string,L
" (%.1f%%%%)", (
double)((
float)chance / 100.0));
997 uiAPI.SFStringConcat(out_string, &chance_string);
1002 uiAPI.SFStringConcat(&newline, &temp_str);
1003 uiAPI.SFStringConcat(out_string, &newline);
1005 uiAPI.SFStringDestructor(&temp_str);
1007 uiAPI.SFStringDestructor(&desc_str1);
1008 uiAPI.SFStringDestructor(&desc_str2);
1010 uiAPI.SFStringDestructor(&description);
1011 uiAPI.SFStringDestructor(&chance_string);
1012 uiAPI.SFStringDestructor(&newline);
1017 uint32_t param4, uint32_t param5)
1027 uiAPI.SFStringConstructor(&full_desc);
1028 uiAPI.SFStringConstructor(&description);
1029 uiAPI.SFStringConstructor(&aspd_string);
1030 uiAPI.SFStringConstructor(&figure_name);
1032 uiAPI.SFStringConstructor_char(&result_string,
"");
1033 uiAPI.SFStringFromWchar(&newline, L
'\n', 1);
1038 if (SF_Figures->
figures[figure_id].
owner != (uint16_t)(-1))
1052 uiAPI.SFStringConcat(&result_string, &full_desc);
1055 uiAPI.SFStringConcat(&result_string, &newline);
1057 uiAPI.SFStringConstructor(&hp_string);
1059 uiAPI.SFStringConcat(&result_string, &hp_string);
1060 uiAPI.SFStringDestructor(&hp_string);
1065 uiAPI.SFStringConstructor(&mp_string);
1066 uiAPI.SFStringConcat(&result_string, &newline);
1068 uiAPI.SFStringConcat(&result_string, &mp_string);
1069 uiAPI.SFStringDestructor(&mp_string);
1073 bool both_hands =
true;
1074 uint32_t dual_wield = 0;
1081 uiAPI.SFStringConstructor(&desc_str1);
1082 uiAPI.SFStringConstructor(&desc_str2);
1094 active_hand_info = &r_item_info;
1100 active_hand_info = &l_item_info;
1102 r_item_id = l_item_id;
1109 if ((r_type != 7) || (l_type != 7))
1118 if (active_hand_info !=
nullptr)
1121 uiAPI.SFStringConstructor(&damage_string);
1123 uiAPI.SFStringConcat(&result_string, &newline);
1124 uiAPI.SFStringSetLength(&full_desc, 0);
1131 uiAPI.SFStringConcat(&full_desc, &damage_string);
1132 uiAPI.SFStringDestructor(&damage_string);
1136 uiAPI.SFprintf(&description, L
"%s, ", aspd_string.
raw_data);
1138 uint8_t race = SF_Figures->
figures[figure_id].
race;
1143 double disp_aspd =
static_cast<double>(aspd) / 1000.0;
1144 uiAPI.SFprintf(&description, description.
raw_data, disp_aspd);
1145 uiAPI.SFStringConcat(&full_desc, &description);
1153 uiAPI.SFStringConstructor(&temp_str);
1155 if (active_hand_info->
min_rng != 0)
1159 active_hand_info->
min_rng, L
"%d", L
',');
1160 uiAPI.SFStringDestructor(&figure_name);
1162 uiAPI.SFStringConcat(&full_desc, &temp_str);
1163 uiAPI.SFStringDestructor(&temp_str);
1168 &description, 0x01);
1172 uiAPI.SFStringConcat(&result_string, &full_desc);
1175 uiAPI.SFStringDestructor(&full_desc);
1176 uiAPI.SFStringDestructor(&description);
1178 uiAPI.SFStringConstructor(&full_desc);
1179 uiAPI.SFStringConstructor(&description);
1181 uint16_t effects[4];
1183 for (
int i = 1; i < 4; i++)
1186 uiAPI.SFStringConstructor(&effect_string);
1188 if (effects[i] == 0)
1192 uint16_t effect_id = effects[i];
1201 uiAPI.SFStringConcat(&full_desc, &newline);
1203 uiAPI.SFStringConcat(&full_desc, &effect_string);
1207 uiAPI.SFStringConcat(&result_string, &full_desc);
1212 uiAPI.SFStringConstructor(&damage_string);
1214 uiAPI.SFStringConcat(&result_string, &newline);
1215 uiAPI.SFStringSetLength(&full_desc, 0);
1222 uiAPI.SFStringConcat(&full_desc, &damage_string);
1223 uiAPI.SFStringDestructor(&damage_string);
1226 uiAPI.SFprintf(&description, L
"%s, ", aspd_string.
raw_data);
1228 uint8_t race = SF_Figures->
figures[figure_id].
race;
1233 double disp_aspd =
static_cast<double>(aspd) / 1000.0;
1234 uiAPI.SFprintf(&description, description.
raw_data, disp_aspd);
1235 uiAPI.SFStringConcat(&full_desc, &description);
1243 uiAPI.SFStringConstructor(&temp_str);
1249 l_item_info.
min_rng, L
"%d", L
',');
1250 uiAPI.SFStringDestructor(&figure_name);
1252 uiAPI.SFStringConcat(&full_desc, &temp_str);
1253 uiAPI.SFStringDestructor(&temp_str);
1262 uiAPI.SFStringConcat(&result_string, &full_desc);
1265 uiAPI.SFStringDestructor(&full_desc);
1266 uiAPI.SFStringDestructor(&description);
1268 uiAPI.SFStringConstructor(&full_desc);
1269 uiAPI.SFStringConstructor(&description);
1271 uint16_t effects[4];
1273 for (
int i = 1; i < 4; i++)
1276 uiAPI.SFStringConstructor(&effect_string);
1278 if (effects[i] == 0)
1282 uint16_t effect_id = effects[i];
1291 uiAPI.SFStringConcat(&full_desc, &newline);
1293 uiAPI.SFStringConcat(&full_desc, &effect_string);
1297 uiAPI.SFStringConcat(&result_string, &full_desc);
1301 uint8_t spells_count = 0;
1302 for (uint8_t i = 0; i < 15; i++)
1306 aiAPI.getFigureAction(SF_Figures, &action, figure_id, i);
1307 if (action.
type == 0)
1311 if ((action.
type < 9999) && (action.
type != 241))
1316 if (spells_count != 0)
1319 uiAPI.SFStringConstructor(&header_string);
1321 for (
int i = 0; i < 15; i++)
1325 aiAPI.getFigureAction(SF_Figures, &action, figure_id, i);
1326 if (action.
type == 0)
1330 if ((action.
type < 9999) && (action.
type != 241))
1333 uint16_t spell_id = action.
subtype;
1342 uiAPI.SFStringConstructor(&spell_string);
1346 uiAPI.SFStringConcat(&header_string, &spell_string);
1348 uiAPI.SFStringDestructor(&spell_string);
1351 uiAPI.SFStringConcat(&result_string, &header_string);
1352 uiAPI.SFStringDestructor(&header_string);
1356 uiAPI.SFStringCopy(param_1, &result_string);
1357 uiAPI.SFStringDestructor(&result_string);
1358 uiAPI.SFStringDestructor(&figure_name);
1359 uiAPI.SFStringDestructor(&full_desc);
1360 uiAPI.SFStringDestructor(&description);
1361 uiAPI.SFStringDestructor(&newline);
1369 uiAPI.SFStringConstructor(&out_string);
1371 switch (figure_task)
1376 uint8_t hero_index = 0xff;
1377 for (
int i = 0; i < 5; i++)
1385 if (hero_index != 0xff)
1407 uiAPI.SFStringConstructor(&master_name);
1410 uiAPI.SFStringCopy(&out_string, &master_name);
1411 uiAPI.SFStringDestructor(&master_name);
1419 uiAPI.SFStringConstructor_char(&empty,
"");
1420 uiAPI.SFStringCopy(&out_string, &empty);
1421 uiAPI.SFStringDestructor(&empty);
1426 char resource_str[512];
1429 uiAPI.SFStringConstructor_char(&sf_resource_str, resource_str);
1430 uiAPI.SFStringCopy(&out_string, &sf_resource_str);
1431 uiAPI.SFStringDestructor(&sf_resource_str);
1438 uiAPI.SFStringCopy(in_string, &out_string);
1442typedef struct __attribute__((packed))
1450typedef struct __attribute__((packed))
1487 uiAPI.SFStringConstructor_char(&screen_name,
"<Cont>Splash");
1488 uiAPI.SFStringDeepCopy(param_2, &screen_name);
1489 uiAPI.SFStringDestructor(&screen_name);
1499 if (some_container != NULL)
1501 uiAPI.initializeMenuContainer(some_container);
1507 uiAPI.SFStringConstructor_char(&c_bgr,
"");
1508 uiAPI.SFStringConstructor_char(&c_brdr,
"");
1509 uiAPI.setupMenuContainerData(some_container, 0.0, 0.0, 0.0, 0.0, &c_bgr, &c_brdr);
1510 uiAPI.SFStringDestructor(&c_brdr);
1511 uiAPI.SFStringDestructor(&c_bgr);
1518 *param_1 = some_container;
1521 if (another_container != NULL)
1523 uiAPI.initializeMenuContainer(another_container);
1526 uiAPI.SFStringConstructor_char(&another_cont_name,
"<Cont>IndDisp");
1527 uiAPI.CMnuBaseSetName((
CMnuBase *)another_container, &another_cont_name);
1528 uiAPI.SFStringDestructor(&another_cont_name);
1532 char *loading_name =
uiAPI.SFStringCMbStr(map_name);
1535 uiAPI.SFStringConstructor_char(&c_brdr,
"");
1536 if (matched_msb != NULL)
1538 uiAPI.SFStringConstructor_char(&c_bgr, matched_msb);
1542 switch (campaign_type)
1544 case 0:
uiAPI.SFStringConstructor_char(&c_bgr,
"ui_mainmenu_bg_loading_sf1.msb");
break;
1545 case 1:
uiAPI.SFStringConstructor_char(&c_bgr,
"ui_mainmenu_bg_loading_sf1addon01.msb");
break;
1546 case 2:
uiAPI.SFStringConstructor_char(&c_bgr,
"ui_mainmenu_bg_loading_sf1addon02.msb");
break;
1547 default:
uiAPI.SFStringConstructor_char(&c_bgr,
"ui_mainmenu_bg_loading_sf1.msb");
break;
1550 uiAPI.setupMenuContainerData(another_container, 0.0, 0.0, 0.0, 0.0, &c_bgr, &c_brdr);
1551 uiAPI.SFStringDestructor(&c_brdr);
1552 uiAPI.SFStringDestructor(&c_bgr);
1557 uiAPI.containerAddControl(some_container, (
CMnuBase *)another_container, 0, 1, 0);
1560 if (progress_label != NULL)
1562 uiAPI.menuLabelConstructor(progress_label);
1566 uiAPI.SFStringConstructor_char(&label_name,
"<Ctrl>lbSplash");
1568 uiAPI.SFStringDestructor(&label_name);
1571 uiAPI.SFStringConstructor_char(&label_data,
"");
1573 uiAPI.SFStringDestructor(&label_data);
1583 uiAPI.bringToFront(some_container, 0);
1584 uiAPI.vfunction163(some_container, 0);
1599 uiAPI.SFStringConstructor_char(&base_name, param_1);
1603 char *path =
uiAPI.SFStringCMbStr(&base_name);
1607 uiAPI.SFStringDestructor(&base_name);
1612 uint8_t AC57[0x2803c];
1616 uiAPI.SFStringConstructor(output);
1634 wchar_t *test_var = (
wchar_t *)(*(uint32_t *)(&session->
data.
unknwn_data[0xa0]));
1635 if (test_var != NULL)
1638 uiAPI.SFStringConstructor_wchar(&map_name, test_var);
1642 uiAPI.SFStringDestructor(&map_name);
1647 if (map_name != NULL)
1651 uiAPI.SFStringDestructor(map_name);
1660static void splash_screen_hook()
1711 figure_statistic_hook_current_ac();
1712 figure_statistic_hook_current_agi();
1713 figure_statistic_hook_current_cha();
1714 figure_statistic_hook_current_dex();
1715 figure_statistic_hook_current_int();
1716 figure_statistic_hook_current_hp();
1717 figure_statistic_hook_current_mp();
1718 figure_statistic_hook_current_sta();
1719 figure_statistic_hook_current_str();
1720 figure_statistic_hook_current_wis();
1721 figure_statistic_hook_current_fire_res();
1722 figure_statistic_hook_current_ice_res();
1723 figure_statistic_hook_current_mental_res();
1724 figure_statistic_hook_current_black_res();
1725 figure_statistic_hook_current_walk_spd();
1726 figure_statistic_hook_current_fight_spd();
1727 figure_statistic_hook_current_cast_spd();
1729 get_race_fix_hook();
1730 army_size_fix_hook();
1731 figure_turn_off_battle_mode_hook();
1732 splash_screen_hook();
RegistrationFunctions * registrationAPI
SpellFunctions * spellAPI
FigureFunctions * figureAPI
ToolboxFunctions * toolboxAPI
SF_String *(__thiscall * AC95_get_figure_name_ptr)(void *AC95, SF_String *name_buffer, uint32_t figure_id)
AC95_get_figure_name_ptr AC95_get_figure_name
void __thiscall sf_endspell_hook(SF_CGdSpell *_this, uint16_t spell_index)
EffectFunctions effectAPI
IteratorFunctions iteratorAPI
BuildingFunctions buildingAPI
const char * find_screen_for_map(const char *map_name)
Finds the loading screen mesh for a map, or NULL for the default.
void log_info(const char *format,...)
int AddrOf(int offset)
returns "real" virtual address of given memory offset
bool BeginRewrite(MemoryRegion &mem_region)
allows rewriting code in a given memory region by overwriting permissions for that memory region
bool EndRewrite(MemoryRegion &mem_region)
ends rewriting by restoring old permissions in a given memory region
enchant_handler_ptr get_enchant_handler(uint16_t spell_line)
uint16_t(__thiscall * enchant_handler_ptr)(SF_CGdFigure *_this, uint16_t figure_id)
createSplashScreen_ptr createSplashScreen
SF_String * getMapFromSave(CAppSession *_this, char *param_1, int campaign_type)
uint32_t(__thiscall * GetResourceSpellLine_ptr)(SF_CGdResource *_this, uint16_t spell_line_id, SF_CGdResourceSpellLine *value)
onFigureBattleEnd_ptr onFigureBattleEnd
bool(__thiscall * getTextString_ptr)(SF_CGdResource *_this, uint16_t text_id, char *out_string)
uint16_t __thiscall get_figure_statistic_current_black_res(SF_CGdFigure *_this, uint16_t figure_id)
void __thiscall decreaseUsedArmyUnitCount(SF_CGdPlayer *_this, uint16_t owner, uint8_t side)
uint16_t __thiscall get_figure_statistic_max_mp(SF_CGdFigure *_this, uint16_t figure_id)
uint16_t __thiscall get_figure_statistic_current_fire_res(SF_CGdFigure *_this, uint16_t figure_id)
uint16_t(__thiscall * getUnitStringID_ptr)(SF_CGdResource *_this, uint16_t unit_id)
SF_String *(__cdecl * getSpecialDesc_ptr)(SF_String *param_1, uint32_t param_2)
SF_String *(__thiscall * GetItemInfo_ptr)(SF_CGdResource *_this, CGdResourceWeaponData *stats, uint16_t item_id)
uint16_t __thiscall get_figure_statistic_current_wis(SF_CGdFigure *_this, uint16_t figure_id)
void(__stdcall * getWeaponRangeDescription_ptr)(SF_String *param_1, uint16_t param_2, uint16_t param_3, SF_String *param_4, uint8_t param_5)
uint16_t __thiscall get_figure_statistic_current_agi(SF_CGdFigure *_this, uint16_t figure_id)
SF_String *(__thiscall * ExpandSpellDescription_ptr)(AutoClass101 *_this, SF_String *out_string, SF_String *in_string, SF_CGdResourceSpell *param_3)
void(__thiscall * createSplashScreen_ptr)(CAppMenu *_this, CMnuContainer **param_1, SF_String *param_2)
void(__thiscall * readMapNameFromSave_ptr)(SF_CGdWorld *_this, void *AC57)
GetResourceSpellLine_ptr GetResourceSpellLine
GetWeaponEffects_ptr GetWeaponEffects
AC34calculateWeaponSpeed_ptr AC34calculateWeaponSpeed
FileWrapperOpen_ptr FileWrapperOpen
uint16_t __thiscall get_figure_statistic_current_dex(SF_CGdFigure *_this, uint16_t figure_id)
uint16_t __thiscall get_figure_statistic_current_int(SF_CGdFigure *_this, uint16_t figure_id)
uint16_t __thiscall get_figure_statistic_current_hp(SF_CGdFigure *_this, uint16_t figure_id)
GetWeaponType_ptr GetWeaponType
getWeaponRangeDescription_ptr getWeaponRangeDescription
void prepareHPString(AutoClass101 *_this, SF_CGdFigure *figures, uint16_t figure_id, SF_String *out_string)
void CreateSplashScreenHelper(CAppMenu *_this, CMnuContainer **param_1, SF_String *param_2, SF_String *map_name)
D_String *(__thiscall * DStringConstructor_char_ptr)(D_String *_this, char *source)
uint32_t(__thiscall * GetDamageMultiplierPerLevel_ptr)(SF_CGdResource *_this, uint8_t level)
DStringConstructor_char_ptr DStringConstructor_char
GetDamageMultiplierPerLevel_ptr GetDamageMultiplierPerLevel
readMapNameFromSave_ptr readMapNameFromSave
uint32_t(__thiscall * AC34calculateWeaponSpeed_ptr)(void *_this, uint32_t base_fight_speed, uint8_t race, uint16_t item_id, uint32_t dual_wield, uint32_t is_ranged)
void dump_offsets(CAppSession *_this)
void *(__thiscall * CGdMainGetAC34_ptr)(void *_this)
uint16_t __thiscall get_figure_statistic_current_fight_spd(SF_CGdFigure *_this, uint16_t figure_id)
void(__thiscall * FileWrapperClose_ptr)(FileWrapper *_this)
void(__thiscall * GetDescriptionText_ptr)(void *_this, uint32_t param_1, SF_String *name_buffer)
SF_String *__thiscall getSpecialFigureName(SF_CGdFigureToolbox *_this, SF_String *in_string, uint16_t figure_id)
uint16_t __thiscall get_figure_statistic_max_sta(SF_CGdFigure *_this, uint16_t figure_id)
void __thiscall figureTurnOffBattleMode(SF_CGdBattleDevelopment *_this)
void(__cdecl * GetColoredText_ptr)(SF_String *param_1, uint32_t param_2)
void initialize_vanilla_fix_hooks()
uint16_t __thiscall get_figure_statistic_current_mp(SF_CGdFigure *_this, uint16_t figure_id)
void prepareDamageString(AutoClass101 *_this, SF_CGdFigure *figures, uint16_t figure_id, CGdResourceWeaponData *weapon_data, SF_String *out_string)
void prepareSpellsHeaderString(AutoClass101 *_this, SF_String *out_string)
SF_String *__thiscall portrait_overlay_hook(AutoClass101 *_this, SF_String *param_1, uint16_t figure_id, uint32_t param3, uint32_t param4, uint32_t param5)
void prepareSpellString(AutoClass101 *_this, SF_String *out_string, uint16_t spell_id)
uint16_t __thiscall get_figure_statistic_current_mental_res(SF_CGdFigure *_this, uint16_t figure_id)
FileWrapperClose_ptr FileWrapperClose
uint32_t __thiscall decreaseUnitCount(AutoClass46 *_this, uint16_t figure_id)
getSpecialDesc_ptr getSpecialDesc
bool __thiscall isSwarm(SF_CGdFigure *_this, uint16_t figure_id)
GetTextById_ptr GetTextById
CGdMainGetAC34_ptr CGdMainGetAC34
void(__thiscall * GetTextById_ptr)(void *_this, uint16_t text_id, SF_String *out_string)
uint16_t __thiscall get_figure_statistic_current_cha(SF_CGdFigure *_this, uint16_t figure_id)
bool __thiscall isTitan(SF_CGdFigure *_this, uint16_t figure_id)
uint16_t __thiscall get_figure_statistic_current_walk_spd(SF_CGdFigure *_this, uint16_t figure_id)
uint16_t __thiscall get_figure_statistic_current_cast_spd(SF_CGdFigure *_this, uint16_t figure_id)
GetColoredText_ptr GetColoredText
void *(__thiscall * AC57_Init_ptr)(void *_this, FileWrapper *fileWrapper)
void prepareMPString(AutoClass101 *_this, SF_CGdFigure *figures, uint16_t figure_id, SF_String *out_string)
uint8_t __thiscall getEffectiveRace(SF_CGdFigure *_this, uint16_t figure_id)
ExpandSpellDescription_ptr ExpandSpellDescription
uint16_t __thiscall get_figure_statistic_current_str(SF_CGdFigure *_this, uint16_t figure_id)
GetItemInfo_ptr GetItemInfo
bool __thiscall get_salvo_target_list(SF_CGdFigureJobs *_this, SF_CGdTargetData *source, SF_CGdTargetData *target, uint32_t angle, uint16_t *ranges, uint32_t target_count, ushort_list_node *output)
getUnitStringID_ptr getUnitStringID
uint16_t __thiscall get_figure_statistic_max_hp(SF_CGdFigure *_this, uint16_t figure_id)
uint16_t *(__thiscall * GetWeaponEffects_ptr)(SF_CGdResource *_this, uint16_t *param_1, uint16_t item_id)
uint16_t __thiscall get_figure_statistic_current_ac(SF_CGdFigure *_this, uint16_t figure_id)
uint16_t __thiscall get_figure_statistic_current_sta(SF_CGdFigure *_this, uint16_t figure_id)
void(__thiscall * onFigureBattleEnd_ptr)(SF_CGdFigureToolbox *_this, uint16_t figure_id)
void prepareEffectString(AutoClass101 *_this, SF_CGdFigure *figures, uint16_t figure_id, uint16_t effect_id, SF_String *out_string)
GetDescriptionText_ptr GetDescriptionText
FileWrapperClose_ptr FileWrapperInit
AC57_Dispose_ptr AC57_Dispose
getTextString_ptr getTextString
uint16_t __thiscall get_figure_statistic_current_ice_res(SF_CGdFigure *_this, uint16_t figure_id)
uint8_t(__thiscall * GetWeaponType_ptr)(SF_CGdResource *_this, uint16_t item_id)
void __thiscall CreateSplashScreen(CAppMenu *_this, CMnuContainer **param_1, SF_String *param_2)
int(__thiscall * FileWrapperOpen_ptr)(FileWrapper *_this, D_String *path, int param_2)
void(__thiscall * AC57_Dispose_ptr)(void *_this)
void(__thiscall * add_item_ptr)(ushort_list_node *_this, uint16_t *item)
MemoryRegion is used for rewriting code in a given memory block.
Group of functions related to AI manipulation.
SF_CGdResource * SF_CGdResource
uint8_t unknwn_data[0x78]
uint32_t current_figure_is_hero
uint32_t current_figure_is_mainchar
EntityPriorityList enemy_figures
SF_CGdFigureToolbox * CGdFigureToolBox
uint8_t CMnuContainer_data[0x98]
Group of functions related to Effect manipulation.
uint16_t avatar_figure_index
uint16_t hero_figure_index[5]
uint16_t civilian_count[6]
uint16_t warrior_count[2]
Group of functions related to Iteration, Often used for AOE or Chain Like Spells.
A structure dedicated to the registration of spells This structure holds functions that are used to c...
High-level structure managing AI battle development.
CGdAIBattleData battleData
Represents a collection of function pointers for managing spell-related operations.
Group of functions related to UI manipulation.
Represents a node in a list of unsigned short values.