Code:
local function f_TownTypes(define)
SetCount(9)
Array{0x6436A4, CountBefore = 1}.i4 'NativeLand'
Ref{0x43D4F5, 0x44C2B1, 0x5C1847}
Array{0x6408D8}.i4 'NativeLandRMG'
Ref{0x532FA1}
Array{0x6436CC} pc 'MP3'
Ref{0x5C70F5}
Array{0x6A755C} pc 'Name'
Ref{0x40C9AB, 0x5697FA, 0x57635D, 0x58D95D, 0x58DD27, 0x5C1857}
Array{0x68277C} pc 'NameLowerCase'
Ref{0x54A4AC}
Array{0x6A60B0}.array(16) pc 'TownNames'
Ref{0x4CA9D3}
Array{0x6971F0}.array(0x18).u1 'internal_TownNamesIndex'
Ref{0x4CA757, 0x4CA990, 0x4CA9B2}
EndRef{0x4CA78B}
function RelocInfo.new(p)
mem.call(0x4CA6D0, 1, p)
end
function RelocInfo.free(p)
mem.call(0x4CA700, 1, p)
end
-- puzzle
Array{0x6818D0} pc 'PuzzleNamePart'
Ref{0x52C9CD, 0x52CF5C}
Array{0x6818F4}.array(2).array(48).i2 'PuzzlePieces'
Ref{0x52CC05, 0x52CC0C, 0x52CF97, 0x52CF9E}
Array{0x681FB4}.array(48).i2 'PuzzlePiecesOrder'
Ref{0x52CBF6, 0x52CF6C}
-- on map
Array{0x677A0C} pc 'MapTownDef'
Ref{0x4C9823}
Array{0x677A30} pc 'MapCastleDef'
Ref{0x4C9810}
Array{0x677A54} pc 'MapCapitolDef'
Ref{0x4C97C4}
-- monsters
Array{0x6747B4}.array(14).i4 'Monsters'
Ref{0x428605, 0x428967, 0x429BB4, 0x429DEF, 0x429F35, 0x42A029, 0x42B53B, 0x42B5DC, 0x42B5F6, 0x42B727, 0x42BE45, 0x42CF0A, 0x42D244, 0x432E97, 0x432F62, 0x43363E, 0x47AA82, 0x47AA93, 0x47AB03, 0x47AB14, 0x47AB83, 0x47AB94, 0x4BF30A, 0x4C8D30, 0x503293, 0x51CFDB, 0x525AB0, 0x52A31E, 0x5519AA, 0x551B6B, 0x576457, 0x5BE386, 0x5BE3AE, 0x5BEFA1, 0x5BFC69, 0x5BFFE2, 0x5C009B, 0x5C0206, 0x5C0267, 0x5C0582, 0x5C0B37, 0x5C0BEF, 0x5C6026, 0x5C7199, 0x5C7CE8, 0x5C7D21, 0x5D9DE7, 0x5D9E60, 0x5D9ED6, 0x5D9F4F, 0x5D9FC8, 0x5DA041, 0x5DA0C5, 0x5DA1BD, 0x5DD09C, 0x5DD96E, 0x5DDAD9}
Ref{0x47AB36, 0x4BF304, 0x525A8E, 0x5765AC, 0x5C052B}
Ref{0x42BCCC, 0x47ABB8, 0x4C69B2, 0x5218F7, 0x521910, 0x521954, 0x5219B5, 0x551A17, 0x5C803A}
Array{0x68295C, CountBefore = 1} pc 'MonstersBackground'
Ref{0x449650, 0x550012, 0x551E38, 0x5F5453}
Array{0x68A344, CountBefore = 1} pc 'MonstersBackgroundInCastle'
Ref{0x5D90A7, 0x5D9359}
Array{0x642EA0}.i4 'BlacksmithMonster'
Ref{0x5D17B2, 0x5D18C4, 0x5D1B05, 0x5D1FA4, 0x5D1FD6, 0x5D224F, 0x5D228C}
Array{0x6AAA60}.array(2).i4 'BlacksmithArtifact'
Ref{0x525DE3, 0x5D1D8C, 0x5D1EC1, 0x5D1ECE, 0x5D2242}
-- picture screen
Array{0x643050} pc 'BackgroundPrefix'
Ref{0x5C6E43}
Array{0x642EC4}.array(44).i4 'BuildingsDrawOrder'
Ref{0x5C6EB4, 0x5C6FE8}
Array{0x643074}.array(44) pc 'BuildingsDefs'
Ref{0x5C6EEC}
Array{0x68A3DC}.array(44) pc 'BuildingsSelection' -- the same names are also used for TZ* contours
Ref{0x5C3396}
-- town hall
Array{0x68A36C} pc 'MageGuildWindow'
Ref{0x5CCEDA}
Array{0x67F5D4} pc 'HallBuildingsDef'
Ref{0x5D5B21, 0x5D9A6D}
Array{0x65F4C4, CountBefore = (0x65F53C-0x65F4C4)/4} pc 'HallBuildingsDef2'
Ref{0x407126, 0x40716A, 0x407193}
Alias 'HallBuildingsDef'
Array{0x6755B8}.array(44) pc 'HallBildingsIcons'
Ref{0x484162}
-- Array{0x66CF98}.array(18).i4 'HallBuildingsNumbers' -- overwritten by hook at 0x461049 instead
-- Ref{0x460DE5}
Array{0x66D03C}.i4 'HallBuildingSlotsCount' -- generated from Buildings
Ref{0x460DD3, 0x46103A, 0x46131F, 0x4613B0, 0x4613CE, 0x461411, 0x46142D, 0x4614C4, 0x4614E0, 0x46162F}
-- buildings data
Array{0x6887F0}.array(2).struct(HordeBuildingData) 'HordeBuildings'
Ref{0x5BE36A, 0x5BEDA7, 0x5BFB2E, 0x5BFBE4, 0x5BFBEF, 0x5C015F, 0x5C0186, 0x5C166E}
Array{0x68A3B4}.array(2).u1 'Horde1MonLevel'
Ref{0x5C7CD5, 0x5D38F6, 0x5D3931}
Array{0x68A3C8}.array(2).u1 'Horde2MonLevel'
Ref{0x5C7D0E, 0x5D4205, 0x5D423E}
Array{0x688F04}.struct(ResourcesData) 'ResourceSilo'
Ref{0x5BFA94, 0x5C1690}
Array{0x688910}.struct(TownSetupMapping) 'SetupMapping'
Ref{0x484327, 0x5C0323, 0x5C0E23, 0x5C0EFD}
-- also used: Buildings, BuildingDecorations
-- dependancies
Array{0x6977E8}.array(44).u8 'BuildingsDependMasks' -- generated from Buildings
Ref{0x42B284, 0x42B293, 0x5C11DA, 0x5C11E1, 0x5C12E8, 0x5C12EF, 0x5C137A, 0x5C1381, 0x5D6018, 0x5D601F}
Ref{0x4EB852, 0x4EB885, 0x4EB88E, 0x4EB8F5, 0x4EB8FC, 0x4EB917, 0x4EB91E, 0x4EB92A, 0x4EB931, 0x4EB938, 0x4EB93F, 0x4EB948, 0x4EB94F, 0x4EB958, 0x4EB9B3, 0x4EB9BA, 0x4EB9D5, 0x4EB9DC, 0x4EB9E8, 0x4EB9EF, 0x4EB9F6, 0x4EB9FD, 0x4EBA06, 0x4EBA0D, 0x4EBA16, 0x4EBA34, 0x4EBA43, 0x4EBA57, 0x4EBA6B, 0x4EBA7F, 0x4EBA93}
Array{0x697740}.u8 'BuildingsMask' -- generated from Buildings
Ref{0x5C035C, 0x5C0363, 0x5C0D75, 0x5C0D84, 0x5C0E9F, 0x5C0EA6, 0x5C0FEB, 0x5C0FF4, 0x5C3839, 0x5C3842, 0x5D374C, 0x5D3756, 0x5D378D, 0x5D3796}
Ref{0x4EB81C, 0x4EB822, 0x4EB82A, 0x4EB845, 0x4EB84B, 0x4EB85C, 0x4EB8B9, 0x4EB8BF, 0x4EB8C7, 0x4EB8E0, 0x4EB8E6, 0x4EB8EE, 0x4EB977, 0x4EB97D, 0x4EB985, 0x4EB99E, 0x4EB9A4, 0x4EB9AC, 0x4EBA2F, 0x4EBA4D, 0x4EBA61, 0x4EBA75, 0x4EBA89, 0x4EBA9D}
Array{0x6A8C20}.array(44).u8 'BuildingsReplaceMasks' -- generated from Buildings
Ref{0x5BED82, 0x5BED8B, 0x5BF2E6, 0x5BF2ED, 0x5BF785, 0x5BF78C, 0x5C03A7, 0x5C03AE, 0x5C0C67, 0x5C0C6E, 0x5C0D11, 0x5C0D18, 0x5C0F0A, 0x5C0F1B, 0x5D606D}
Ref{0x4EBAAC, 0x4EBAB1, 0x4EBAB7, 0x4EBABD, 0x4EBAC2, 0x4EBAD3, 0x4EBAE7, 0x4EBAEC, 0x4EBAF2, 0x4EBAF8, 0x4EBAFD, 0x4EBB0E, 0x4EBB22, 0x4EBB27, 0x4EBB2D, 0x4EBB33, 0x4EBB38, 0x4EBB49, 0x4EBB5D, 0x4EBB62, 0x4EBB68, 0x4EBB6E, 0x4EBB73, 0x4EBB84, 0x4EBB93, 0x4EBBA2, 0x4EBBB1, 0x4EBBC0, 0x4EBBCF}
-- Resources
Array{0x6A8344}.array(17, 25).struct(ResourcesData) 'BuildingsCost'
Ref{0x5BF829, 0x5C14BB, 0x5C153C, 0x5C15BE}
Array{0x6A9880}.array(30, 43).struct(ResourcesData) 'DwellingsCost'
Ref{0x5BF848, 0x5C14DC, 0x5C1569, 0x5C15DD}
Alias 'BuildingsCost'
-- buildings texts
Array{0x6A543C}.struct(SpecialBuildingsNames) 'BuildingsNames'
Ref{0x460CD3, 0x460CF0, 0x46146C, 0x46148B, 0x4617F3, 0x461824, 0x461960, 0x461991, 0x4619E8, 0x461A07, 0x461A54, 0x461A7F}
Ref{0x5C7D42, 0x5EA141, 0x5EA2C2}
Ref{0x460CD3, 0x46146C, 0x4617F3, 0x461960, 0x4619E8, 0x461A54, 0x5EA2C2}
Array{0x6A7874}.struct(SpecialBuildingsNames) 'BuildingsDescriptions'
Ref{0x5D2EB1, 0x5D2F28}
Array{0x6A6310}.array(30, 43) pc 'DwellingsNames'
Ref{0x460D04, 0x4614A0, 0x461842, 0x4619AF, 0x461A1C, 0x461A9A}
Alias 'BuildingsNames'
Array{0x6A6A2C}.array(30, 43) pc 'DwellingsDescriptions'
Ref{0x5D3143}
Alias 'BuildingsDescriptions'
Array{0x6A7ED8}.array(16, 16) pc 'BuildingsDescriptionsBlacksmith'
Ref{0x5D2E67}
Alias 'BuildingsDescriptions'
-- combat
Array{0x63BD18}.i4 'MoatDamage'
Ref{0x421760, 0x4217C3, 0x465FDF, 0x469A88, 0x4B31D0, 0x4B3204}
-- also used: SiegePicturesPrefix
Array{0x63D2A0} pc 'SiegeBackground' -- generated from SiegePicturesPrefix
Ref{0x4642CB}
Array{0x66D848}.array(18).struct(WallSection) 'SiegeWalls' -- generated from SiegePicturesPrefix
Ref{0x462FBA, 0x465EE9, 0x479C39, 0x479C86, 0x4929F3, 0x493923, 0x493967, 0x494259, 0x494260, 0x49437C, 0x494384, 0x4945C9, 0x4945D1, 0x4947C3, 0x4955C2}
--[[ Differences in towns:
(Rampart)
66d8e0 66db68 SgCsTpWl.pcx SgRmTpW1.pcx
66d898 66dda8 SgCsMoat.pcx
66d8bc 66ddcc SgCsMlip.pcx
(Conflux)
66d8e0 66e300 SgCsTpWl.pcx SgNcTpW1.pcx
66d8e0 66e588 SgCsTpWl.pcx SgDnTpW1.pcx
66d8e0 66e810 SgCsTpWl.pcx SgStTpW1.pcx
66d910 66ed50 SgCsTw21.pcx SgElTw22.pcx
66d914 66ed54 SgCsTw21.pcx
66d938 66ed78 SgCsWa61.pcx
66d980 66edc0 SgCsWa41.pcx
66d9a4 66ede4 SgCsArch.pcx
66d9c8 66ee08 SgCsWa31.pcx
66da10 66ee50 SgCsWa11.pcx
66da34 66ee74 SgCsTw11.pcx
66da58 66ee98 SgCsMan1.pcx
(others match Castle)
]]
Array{0x63CF88}.struct(TownTowers) 'SiegeTowers'
Ref{0x466868}
Array{0x63BD40}.array(2).struct(CombatHeroDef) 'CombatHeroDef' -- Male, Female
Ref{0x463079, 0x5A040F, 0x5A04BF, 0x5A04CB, 0x5A051D, 0x5A057F, 0x5A241E}
end