Деревья строительства и маски заменяющих друг друга объектов, дамп
CODE
#define BLD_ID_MAGE1 0
#define BLD_ID_MAGE2 1
#define BLD_ID_MAGE3 2
#define BLD_ID_MAGE4 3
#define BLD_ID_MAGE5 4
#define BLD_ID_TAVERN 5
#define BLD_ID_WHARF 6
#define BLD_ID_FORT1 7
#define BLD_ID_FORT2 8
#define BLD_ID_FORT3 9
#define BLD_ID_HALL1 10
#define BLD_ID_HALL2 11
#define BLD_ID_HALL3 12
#define BLD_ID_HALL4 13
#define BLD_ID_MARKET 14
#define BLD_ID_SILO 15
#define BLD_ID_SMITH 16
#define BLD_ID_SPEC17 17
#define BLD_ID_HORDE1 18
#define BLD_ID_HORDE1U 19
#define BLD_ID_WHARF2 20
#define BLD_ID_SPEC21 21
#define BLD_ID_SPEC22 22
#define BLD_ID_SPEC23 23
#define BLD_ID_HORDE2 24
#define BLD_ID_HORDE2U 25
#define BLD_ID_GRAIL 26
#define BLD_ID_DECOR27 27
#define BLD_ID_DECOR28 28
#define BLD_ID_DECOR29 29
#define BLD_ID_DWELL1 30
#define BLD_ID_DWELL2 31
#define BLD_ID_DWELL3 32
#define BLD_ID_DWELL4 33
#define BLD_ID_DWELL5 34
#define BLD_ID_DWELL6 35
#define BLD_ID_DWELL7 36
#define BLD_ID_DWELL1U 37
#define BLD_ID_DWELL2U 38
#define BLD_ID_DWELL3U 39
#define BLD_ID_DWELL4U 40
#define BLD_ID_DWELL5U 41
#define BLD_ID_DWELL6U 42
#define BLD_ID_DWELL7U 43
int Dependencies0[] = {
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_WHARF, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SPEC22, BLD_ID_TAVERN, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SMITH, -1,
BLD_ID_SPEC17, BLD_ID_WHARF, -1,
BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MAGE1, BLD_ID_MARKET, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4, BLD_ID_DWELL1, BLD_ID_SMITH, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL3, BLD_ID_DWELL4, -1,
BLD_ID_HORDE1, BLD_ID_DWELL3, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL3U, -1,
BLD_ID_SPEC21, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6, BLD_ID_SPEC21, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL5, BLD_ID_DWELL4, BLD_ID_MAGE1, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};
int Dependencies1[] = {
BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_SPEC17, -1,
BLD_ID_SPEC21, BLD_ID_SPEC17, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MAGE1, BLD_ID_SMITH, BLD_ID_MARKET, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL2, -1,
BLD_ID_SPEC22, BLD_ID_HORDE1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL2U, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL5, BLD_ID_DWELL3, -1,
BLD_ID_HORDE2, BLD_ID_DWELL5, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_HORDE2U, BLD_ID_DWELL5U, -1,
BLD_ID_DWELL4, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7, BLD_ID_DWELL6, BLD_ID_MAGE2, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, BLD_ID_MAGE3, -1,
BLD_ID_GRAIL, -1,
-100
};
int Dependencies2[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC21, BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_MAGE1, -1,
BLD_ID_SPEC22, BLD_ID_MAGE1, -1,
BLD_ID_SPEC23, BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SPEC17, BLD_ID_MARKET, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL2, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL2U, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4, BLD_ID_DWELL2, BLD_ID_DWELL3, BLD_ID_MAGE1, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_SPEC22, -1,
BLD_ID_DWELL5, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};
int Dependencies3[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC21, BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_SPEC22, BLD_ID_FORT2, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_SPEC23, BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MARKET, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_HORDE2, BLD_ID_DWELL3, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_HORDE2U, BLD_ID_DWELL3U, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_MAGE1, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL5, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, BLD_ID_MAGE2, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};
int Dependencies4[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC17, BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_WHARF, -1,
BLD_ID_MAGE1, -1,
BLD_ID_SPEC21, BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_SPEC22, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1, BLD_ID_SPEC22, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_SPEC22, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_SPEC21, -1,
BLD_ID_DWELL5, BLD_ID_DWELL2, BLD_ID_MAGE1, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};
int Dependencies5[] = {
BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_SPEC22, -1,
BLD_ID_SPEC23, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SPEC17, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_SPEC21, BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MARKET, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4, BLD_ID_DWELL3, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, BLD_ID_MAGE2, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, BLD_ID_MAGE3, -1,
BLD_ID_GRAIL, -1,
-100
};
int Dependencies6[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC17, BLD_ID_FORT1, -1,
BLD_ID_SPEC23, BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_SPEC22, BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SPEC21, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MAGE1, BLD_ID_MARKET, BLD_ID_SMITH, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL5, BLD_ID_DWELL2, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL7, BLD_ID_DWELL5, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, BLD_ID_SMITH, -1,
BLD_ID_DWELL4, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_MAGE1, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_GRAIL, -1,
-100
};
int Dependencies7[] = {
BLD_ID_FORT1, -1,
BLD_ID_SPEC21, BLD_ID_FORT1, -1,
BLD_ID_SPEC22, BLD_ID_SPEC21, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_SPEC17, BLD_ID_HALL2, BLD_ID_SPEC21, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1,
BLD_ID_WHARF, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, BLD_ID_TAVERN, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL6, BLD_ID_DWELL2, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5, BLD_ID_DWELL3, BLD_ID_DWELL2, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, BLD_ID_SILO, -1,
BLD_ID_DWELL7, BLD_ID_DWELL6, BLD_ID_DWELL4, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};
int Dependencies8[] = {
BLD_ID_FORT1, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_WHARF, -1,
BLD_ID_TAVERN, -1,
BLD_ID_SMITH, -1,
BLD_ID_MARKET, -1,
BLD_ID_SILO, BLD_ID_MARKET, -1,
BLD_ID_SPEC17, BLD_ID_MARKET, -1,
BLD_ID_MAGE1, -1,
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_SPEC21, BLD_ID_MAGE1, -1,
BLD_ID_HALL2, BLD_ID_TAVERN, -1,
BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1,
BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1,
BLD_ID_DWELL1, BLD_ID_FORT1, -1,
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1,
BLD_ID_DWELL2, BLD_ID_DWELL1, BLD_ID_MAGE1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL3, BLD_ID_DWELL1, BLD_ID_MAGE1, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4, BLD_ID_DWELL2, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_DWELL2U, -1,
BLD_ID_DWELL5, BLD_ID_DWELL3, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, BLD_ID_MAGE2, -1,
BLD_ID_DWELL7, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
BLD_ID_GRAIL, -1,
-100
};
int ObsolutionsAll[] = {
BLD_ID_MAGE2, BLD_ID_MAGE1, -1,
BLD_ID_MAGE3, BLD_ID_MAGE2, -1,
BLD_ID_MAGE4, BLD_ID_MAGE3, -1,
BLD_ID_MAGE5, BLD_ID_MAGE4, -1,
BLD_ID_FORT2, BLD_ID_FORT1, -1,
BLD_ID_FORT3, BLD_ID_FORT2, -1,
BLD_ID_HALL2, BLD_ID_HALL1, -1,
BLD_ID_HALL3, BLD_ID_HALL2, -1,
BLD_ID_HALL4, BLD_ID_HALL3, -1,
BLD_ID_HORDE1U, BLD_ID_HORDE1, -1,
BLD_ID_HORDE2U, BLD_ID_HORDE2, -1,
BLD_ID_DWELL1U, BLD_ID_DWELL1, -1,
BLD_ID_DWELL2U, BLD_ID_DWELL2, -1,
BLD_ID_DWELL3U, BLD_ID_DWELL3, -1,
BLD_ID_DWELL4U, BLD_ID_DWELL4, -1,
BLD_ID_DWELL5U, BLD_ID_DWELL5, -1,
BLD_ID_DWELL6U, BLD_ID_DWELL6, -1,
BLD_ID_DWELL7U, BLD_ID_DWELL7, -1,
-100
};
int Obsolutions0[] = {
BLD_ID_SPEC22, BLD_ID_TAVERN, -1,
BLD_ID_HORDE1, BLD_ID_DWELL3, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL3U, BLD_ID_HORDE1, -1,
-100
};
int Obsolutions1[] = {
BLD_ID_HORDE1, BLD_ID_DWELL2, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL2U, BLD_ID_HORDE1, -1,
BLD_ID_HORDE2, BLD_ID_DWELL5, -1,
BLD_ID_HORDE2U, BLD_ID_DWELL5U, BLD_ID_HORDE2, -1,
BLD_ID_SPEC21, BLD_ID_SPEC17, -1,
-100
};
int Obsolutions2[] = {
BLD_ID_HORDE1, BLD_ID_DWELL2, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL2U, BLD_ID_HORDE1, -1,
-100
};
int Obsolutions3[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
BLD_ID_HORDE2, BLD_ID_DWELL3, -1,
BLD_ID_HORDE2U, BLD_ID_DWELL3U, BLD_ID_HORDE2, -1,
-100
};
int Obsolutions4[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};
int Obsolutions5[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};
int Obsolutions6[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};
int Obsolutions7[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};
int Obsolutions8[] = {
BLD_ID_HORDE1, BLD_ID_DWELL1, -1,
BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1,
-100
};
//патчим буквально сразу в DllMain, иначе данные уйдут в битовое поле
*(int*)0x004EB816 = (int)Dependencies0;
*(int*)0x004EB8B3 = (int)Dependencies1;
*(int*)0x004EB971 = (int)Dependencies2;
*(int*)0x004EBA39 = (int)Dependencies3;
*(int*)0x004EBA48 = (int)Dependencies4;
*(int*)0x004EBA5C = (int)Dependencies5;
*(int*)0x004EBA70 = (int)Dependencies6;
*(int*)0x004EBA84 = (int)Dependencies7;
*(int*)0x004EBA98 = (int)Dependencies8;
*(int*)0x004EBAC9 = (int)ObsolutionsAll;
*(int*)0x004EBB04 = (int)ObsolutionsAll;
*(int*)0x004EBB3F = (int)ObsolutionsAll;
*(int*)0x004EBB7A = (int)ObsolutionsAll;
*(int*)0x004EBC74 = (int)ObsolutionsAll;
*(int*)0x004EBAD8 = (int)Obsolutions0;
*(int*)0x004EBB13 = (int)Obsolutions1;
*(int*)0x004EBB89 = (int)Obsolutions2;
*(int*)0x004EBB4E = (int)Obsolutions3;
*(int*)0x004EBB98 = (int)Obsolutions4;
*(int*)0x004EBBA7 = (int)Obsolutions5;
*(int*)0x004EBBB6 = (int)Obsolutions6;
*(int*)0x004EBBC5 = (int)Obsolutions7;
*(int*)0x004EBBD4 = (int)Obsolutions8;
Экраны холла будут когда-нибудь позже
Ну и порождающий это говнокод, потому что писать программы, чтобы они писали программы - это весело, а еще так можно убить свою профессию с её рабочим местом
CODE
string GetDescByID(int id)
{
if(id ==-1) return "-1";
if(id ==-100) return "-100";
string[] arr =
{
"MAGE1",
"MAGE2",
"MAGE3",
"MAGE4",
"MAGE5",
"TAVERN", //5
"WHARF", //6
"FORT1", //7
"FORT2",
"FORT3",
"HALL1", //10
"HALL2",
"HALL3",
"HALL4",
"MARKET", //14
"SILO",
"SMITH", //16
"SPEC17",
"HORDE1", //18
"HORDE1U",
"WHARF2", //20
"SPEC21",
"SPEC22",
"SPEC23",
"HORDE2",
"HORDE2U",
"GRAIL",
"DECOR27",
"DECOR28",
"DECOR29",
"DWELL1",
"DWELL2",
"DWELL3",
"DWELL4",
"DWELL5",
"DWELL6",
"DWELL7",
"DWELL1U",
"DWELL2U",
"DWELL3U",
"DWELL4U",
"DWELL5U",
"DWELL6U",
"DWELL7U"
};
return "BLD_ID_"+arr[id];
}
int ReadInt(byte[] arr, ref int offset)
{
int ret = arr[offset] | arr[offset+1] << 8 | arr[offset+2] << 16 | arr[offset+3]<<24;
offset+=4;
return ret;
}
List<int> FindRefs(byte[] arr, int addr)
{
List<int> ret = new List<int>();
for(int i =0; i!=arr.Length-3; i++)
{
if((arr[i] == (addr & 0xFF)) &&
(arr[i+1] == ((addr>>8) & 0xFF)) &&
(arr[i+2] == ((addr>>16) & 0xFF)) &&
(arr[i+3] == ((addr>>24) & 0xFF)))
{
ret.Add(i+0x400000);
}
}
return ret;
}
string ProduceTable(byte[] file, int tree_offset, string name)
{
int v_tree_offset = tree_offset- 0x400000;
string s = "";
s += "\r\n";
s += "int "+name+"[] = {\r\n";
int i = 0;
do
{
i = ReadInt(file,ref v_tree_offset);
s += '\t';
s += GetDescByID(i);
if(i!=-100) s += ",";
if(i<0) s += Environment.NewLine;
}while( i != -100);
s += "};";
s += "\r\n";
return s;
}
string ProduceHooks(byte[] file, int tree_offset, string name)
{
string t = "\r\n";
foreach(int refaddr in FindRefs(file,tree_offset))
{
t+= string.Format("*(int*)0x{0:X8} = (int){1};\r\n", refaddr, name);
}
return t;
}
void MainFormLoad(object sender, EventArgs e)
{
var file = File.ReadAllBytes(@"d:\\h3era24\\h3era.exe");
string[] names = {
"Dependencies0",
"Dependencies1",
"Dependencies2",
"Dependencies3",
"Dependencies4",
"Dependencies5",
"Dependencies6",
"Dependencies7",
"Dependencies8",
"ObsolutionsAll",
"Obsolutions0",
"Obsolutions1",
"Obsolutions2",
"Obsolutions3",
"Obsolutions4",
"Obsolutions5",
"Obsolutions6",
"Obsolutions7",
"Obsolutions8"
};
int[] addrs =
{
0x63EC80,
0x63EE24,
0x63EFE4,
0x63F1A0,
0x63F364,
0x63F51C,
0x63F6D0,
0x63F870,
0x63FA14,
0x63FBC4,
0x63FCA0,
0x63FCCC,
0x63FD14,
0x63FD34,
0x63FD70,
0x63FD90,
0x63FDB0,
0x63FDD0,
0x63FDF0
};
for(int j=0; j!=44; j++)
{
textBox1.Text += string.Format("#define\t{0}\t{1}\r\n",GetDescByID(j),j);
}
for(int j = 0; j!=19; j++)
{
textBox1.Text += ProduceTable(file,addrs[j], names[j]);
textBox1.Text +=Environment.NewLine;
}
for(int j = 0; j!=19; j++)
{
textBox1.Text += ProduceHooks(file,addrs[j], names[j]);
}
}