Spellforce-Spell-framework
Loading...
Searching...
No Matches
sf_building_done_hook.c
Go to the documentation of this file.
2#include <stdlib.h>
3
5typedef void (__thiscall *fun006c3650_ptr)(void *autoclass30, uint16_t unkn, uint16_t index);
6typedef void (__thiscall *fun0074ca30_ptr)(uint32_t *god_object, uint32_t owner, uint32_t flag);
7typedef uint32_t *(__thiscall *AC65_init_ptr)(void *autoclass65);
8
9typedef uint16_t (__thiscall *XDataListExists_ptr)(void *SF_CGdXDataList, uint16_t index, uint8_t xdata_type);
10typedef uint16_t (__thiscall *XDataListZero_ptr)(void *SF_CGdXDataList, uint16_t xdata_key, uint8_t xdata_type);
11typedef void (__thiscall *fun006c3ca0_ptr)(void *autoclass30, uint16_t param_1, uint16_t owner,
12 SF_CGdTargetData *source, SF_CGdTargetData *target);
13typedef uint32_t *(*getGlobalAC65_ptr)(void);
14
22
34void include_owner_on_map(uint16_t owner)
35{
36 uint32_t *AC65 = getGlobalAC65();
37 l_fun0074ca30(AC65, owner, 1);
38}
39
40void __thiscall sf_building_done_hook(SF_CGdBuildingToolbox *_this, uint16_t building_index)
41{
42 l_fun006c3650(_this->AutoClass30, 3, building_index);
43 _this->CGdBuilding->buildings[building_index].build_up = 0;
44 _this->CGdBuilding->buildings[building_index].flags |= 1;
45 if (_this->CGdBuilding->buildings[building_index].owner != 0)
46 {
47 include_owner_on_map(_this->CGdBuilding->buildings[building_index].owner);
48 }
49 uint16_t building_xdata_key = _this->CGdBuilding->buildings[building_index].xdata_key;
51 {
52 uint16_t value = XDataListZero(_this->CGdXDataList, building_xdata_key,
54 if (value != 0xffff)
55 {
56 _this->CGdBuilding->buildings[building_index].xdata_key = value;
57 }
58 }
59
60 uint8_t building_type = _this->CGdBuilding->buildings[building_index].type;
62 handler(_this, building_index);
63}
BuildingFunctions buildingAPI
Definition sf_hooks.c:47
int AddrOf(int offset)
returns "real" virtual address of given memory offset
Definition sf_asi.h:135
fun0074ca30_ptr l_fun0074ca30
AC65_init_ptr l_AC65_init
uint32_t *(__thiscall * AC65_init_ptr)(void *autoclass65)
fun006c3ca0_ptr fun006c3ca0
fun006c3650_ptr l_fun006c3650
void(__thiscall * fun006c3650_ptr)(void *autoclass30, uint16_t unkn, uint16_t index)
getGlobalAC65_ptr getGlobalAC65
XDataListExists_ptr XDataListExists
void __thiscall sf_building_done_hook(SF_CGdBuildingToolbox *_this, uint16_t building_index)
XDataListZero_ptr XDataListZero
void initialize_building_done_hooks()
uint32_t *(* getGlobalAC65_ptr)(void)
void(__thiscall * fun0074ca30_ptr)(uint32_t *god_object, uint32_t owner, uint32_t flag)
void(__thiscall * fun006c3ca0_ptr)(void *autoclass30, uint16_t param_1, uint16_t owner, SF_CGdTargetData *source, SF_CGdTargetData *target)
uint16_t(__thiscall * XDataListExists_ptr)(void *SF_CGdXDataList, uint16_t index, uint8_t xdata_type)
void include_owner_on_map(uint16_t owner)
uint16_t(__thiscall * XDataListZero_ptr)(void *SF_CGdXDataList, uint16_t xdata_key, uint8_t xdata_type)
building_done_handler_ptr get_building_done_handler(uint8_t building_type)
@ SPELL_CONSERVATION_SHIELD
void(__thiscall * building_done_handler_ptr)(SF_CGdBuildingToolbox *_this, uint16_t building_index)
GdBuilding buildings[1000]