BDATA.CPP 196 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832
  1. //
  2. // Copyright 2020 Electronic Arts Inc.
  3. //
  4. // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free
  5. // software: you can redistribute it and/or modify it under the terms of
  6. // the GNU General Public License as published by the Free Software Foundation,
  7. // either version 3 of the License, or (at your option) any later version.
  8. // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
  9. // in the hope that it will be useful, but with permitted additional restrictions
  10. // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
  11. // distributed with this program. You should have received a copy of the
  12. // GNU General Public License along with permitted additional restrictions
  13. // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
  14. /* $Header: /CounterStrike/BDATA.CPP 2 3/03/97 10:37p Joe_bostic $ */
  15. /***********************************************************************************************
  16. *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
  17. ***********************************************************************************************
  18. * *
  19. * Project Name : Command & Conquer *
  20. * *
  21. * File Name : BDATA.CPP *
  22. * *
  23. * Programmer : Joe L. Bostic *
  24. * *
  25. * Start Date : September 10, 1993 *
  26. * *
  27. * Last Update : October 2, 1996 [JLB] *
  28. * *
  29. *---------------------------------------------------------------------------------------------*
  30. * Functions: *
  31. * BuildingTypeClass::As_Reference -- Fetches reference to the building type specified. *
  32. * BuildingTypeClass::Bib_And_Offset -- Determines the bib and appropriate cell offset. *
  33. * BuildingTypeClass::BuildingTypeClass -- This is the constructor for the building types. *
  34. * BuildingTypeClass::Coord_Fixup -- Adjusts coordinate to be legal for assignment. *
  35. * BuildingTypeClass::Cost_Of -- Fetches the cost of this building. *
  36. * BuildingTypeClass::Create_And_Place -- Creates and places a building object onto the map. *
  37. * BuildingTypeClass::Create_One_Of -- Creates a building of this type. *
  38. * BuildingTypeClass::Dimensions -- Fetches the pixel dimensions of the building. *
  39. * BuildingTypeClass::Display -- Renders a generic view of building. *
  40. * BuildingTypeClass::Flush_For_Placement -- Tries to clear placement area for this building *
  41. * BuildingTypeClass::Full_Name -- Fetches the name to give this building. *
  42. * BuildingTypeClass::Height -- Determines the height of the building in icons. *
  43. * BuildingTypeClass::Init -- Performs theater specific initialization. *
  44. * BuildingTypeClass::Init_Anim -- Initialize an animation control for a building. *
  45. * BuildingTypeClass::Init_Heap -- Initialize the heap as necessary for the building type obj*
  46. * BuildingTypeClass::Max_Pips -- Determines the maximum pips to display. *
  47. * BuildingTypeClass::Occupy_List -- Fetches the occupy list for the building. *
  48. * BuildingTypeClass::One_Time -- Performs special one time action for buildings. *
  49. * BuildingTypeClass::Overlap_List -- Fetches the overlap list for the building. *
  50. * BuildingTypeClass::Prep_For_Add -- Prepares scenario editor for adding an object. *
  51. * BuildingTypeClass::Raw_Cost -- Fetches the raw (base) cost of this building type. *
  52. * BuildingTypeClass::Read_INI -- Fetch building type data from the INI database. *
  53. * BuildingTypeClass::Width -- Determines width of building in icons. *
  54. * BuildingTypeClass::operator delete -- Deletes a building type object from the special heap*
  55. * BuildingTypeClass::operator new -- Allocates a building type object from the special heap.*
  56. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  57. #include "function.h"
  58. #define FATSHIP
  59. #define MCW MAP_CELL_W
  60. #define XYCELL(x,y) (y*MAP_CELL_W+x)
  61. static short const ExitPyle[] = {
  62. XYCELL(1,2),
  63. XYCELL(2,2),
  64. XYCELL(0,2),
  65. XYCELL(-1,2),
  66. XYCELL(-1,-1),
  67. XYCELL(0,-1),
  68. XYCELL(1,-1),
  69. XYCELL(2,-1),
  70. XYCELL(2,-1),
  71. XYCELL(-1,0),
  72. XYCELL(2,0),
  73. XYCELL(2,1),
  74. XYCELL(-1,1),
  75. REFRESH_EOL
  76. };
  77. static short const ExitSub[] = {
  78. XYCELL( 0, 2),
  79. XYCELL( 2, 2),
  80. XYCELL(-1, 2),
  81. XYCELL( 1, 2),
  82. XYCELL( 3, 2)
  83. };
  84. static short const ExitWeap[] = {
  85. XYCELL(1,2),
  86. XYCELL(-1,3),
  87. XYCELL(0,3),
  88. XYCELL(1,3),
  89. XYCELL(-2,3),
  90. XYCELL(2,3),
  91. REFRESH_EOL
  92. };
  93. static short const ComList[] = {0, 1, MCW, MCW+1, REFRESH_EOL};
  94. static short const List000111111[] = {(MCW*1), (MCW*1)+1, (MCW*1)+2, (MCW*2), (MCW*2)+1, (MCW*2)+2, REFRESH_EOL};
  95. static short const List0010[] = {MCW, REFRESH_EOL};
  96. static short const List0011[] = {(MCW*1), (MCW*1)+1, REFRESH_EOL};
  97. static short const List010111100[] = {1, (MCW*1), (MCW*1)+1, (MCW*1)+2, (MCW*2), REFRESH_EOL};
  98. static short const List0111[] = {1, (MCW*1), (MCW*1)+1, REFRESH_EOL};
  99. static short const List1000[] = {0, REFRESH_EOL};
  100. static short const List101000011[] = {0, 2, (MCW*2)+1, (MCW*2)+2, REFRESH_EOL};
  101. static short const List1100[] = {0, 1, REFRESH_EOL};
  102. static short const List1101[] = {0, 1, (MCW*1)+1, REFRESH_EOL};
  103. static short const List11[] = {0, 1, REFRESH_EOL};
  104. static short const List12[] = {MCW, REFRESH_EOL};
  105. static short const List1[] = {0, REFRESH_EOL};
  106. static short const List21[] = {0, 1, REFRESH_EOL};
  107. static short const List22[] = {0, 1, MCW, MCW+1, REFRESH_EOL};
  108. static short const List22_0011[] = {MCW, MCW+1, REFRESH_EOL};
  109. static short const List22_1100[] = {0, 1, REFRESH_EOL};
  110. static short const List2[] = {0, 1, MCW+1, MCW, REFRESH_EOL};
  111. static short const List32[] = {0, 1, 2, MCW, MCW+1, MCW+2, REFRESH_EOL};
  112. //static short const List42[] = {0, 1, 2, 3, MCW, MCW+1, MCW+2, MCW+3, REFRESH_EOL};
  113. static short const ListFix[] = {1, MCW, MCW+1, MCW+2, MCW+MCW+1, REFRESH_EOL};
  114. static short const ListWeap[] = {0, 1, 2, (MCW*1), (MCW*1)+1, (MCW*1)+2, REFRESH_EOL};
  115. static short const ListWestwood[] = {1, 2, 3, MCW+1, MCW+2, MCW+3, REFRESH_EOL};
  116. static short const OListSAM[] = {-MCW, -(MCW-1), REFRESH_EOL};
  117. #ifdef FATSHIP
  118. static short const ListSPen[] = {0, 1, 2, MCW, MCW+1, MCW+2, MCW+MCW, MCW+MCW+1, MCW+MCW+2, REFRESH_EOL};
  119. static short const OListSPen[] = {REFRESH_EOL};
  120. #else
  121. static short const ListSPen[] = {1, MCW, MCW+1, MCW+2, MCW+MCW+1, REFRESH_EOL};
  122. static short const OListSPen[] = {0, 2, MCW+MCW, MCW+MCW+2, REFRESH_EOL};
  123. #endif
  124. static short const OListWestwood[] = {0, MCW, REFRESH_EOL};
  125. static short const StoreList[] = {0, REFRESH_EOL};
  126. static short const ListFactory[] = {0, 1, 2, (MCW*1), (MCW*1)+1, (MCW*1)+2, (MCW*2), (MCW*2)+1, (MCW*2)+2, REFRESH_EOL};
  127. static short const OListFix[] = {0, 2, MCW+MCW, MCW+MCW+2, REFRESH_EOL};
  128. static short const OListWeap[] = {REFRESH_EOL};
  129. static short const OComList[] = {1, REFRESH_EOL};
  130. static short const OList12[] = {0, REFRESH_EOL};
  131. static short const OListTmpl[] = {0, 1, 2, REFRESH_EOL};
  132. /***************************************************************************
  133. */
  134. static BuildingTypeClass const ClassBarrel(
  135. STRUCT_BARREL,
  136. TXT_BARREL, // NAME: Short name of the structure.
  137. "BARL", // NAME: Short name of the structure.
  138. FACING_NONE, // Foundation direction from center of building.
  139. XYP_COORD(0,0), // Exit point for produced units.
  140. REMAP_ALTERNATE, // Sidebar remap logic.
  141. 0x0000, // Vertical offset.
  142. 0x0000, // Primary weapon offset along turret centerline.
  143. 0x0000, // Primary weapon lateral offset along turret centerline.
  144. false, // Is this building a fake (decoy?)
  145. false, // Animation rate is regulated for constant speed?
  146. true, // Always use the given name for the building?
  147. false, // Is this a wall type structure?
  148. true, // Simple (one frame) damage imagery?
  149. true, // Is it invisible to radar?
  150. true, // Can the player select this?
  151. true, // Is this a legal target for attack or move?
  152. true, // Is this an insignificant building?
  153. false, // Theater specific graphic image?
  154. false, // Does it have a rotating turret?
  155. false, // Can the building be color remapped to indicate owner?
  156. RTTI_NONE, // The object type produced at this factory.
  157. DIR_N, // Starting idle frame to match construction.
  158. BSIZE_11, // SIZE: Building size.
  159. NULL, // Preferred exit cell list.
  160. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  161. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  162. );
  163. static BuildingTypeClass const ClassBarrel3(
  164. STRUCT_BARREL3,
  165. TXT_BARREL, // NAME: Short name of the structure.
  166. "BRL3", // NAME: Short name of the structure.
  167. FACING_NONE, // Foundation direction from center of building.
  168. XYP_COORD(0,0), // Exit point for produced units.
  169. REMAP_ALTERNATE, // Sidebar remap logic.
  170. 0x0000, // Vertical offset.
  171. 0x0000, // Primary weapon offset along turret centerline.
  172. 0x0000, // Primary weapon lateral offset along turret centerline.
  173. false, // Is this building a fake (decoy?)
  174. false, // Animation rate is regulated for constant speed?
  175. true, // Always use the given name for the building?
  176. false, // Is this a wall type structure?
  177. true, // Simple (one frame) damage imagery?
  178. true, // Is it invisible to radar?
  179. false, // Can the player select this?
  180. true, // Is this a legal target for attack or move?
  181. true, // Is this an insignificant building?
  182. false, // Theater specific graphic image?
  183. false, // Does it have a rotating turret?
  184. false, // Can the building be color remapped to indicate owner?
  185. RTTI_NONE, // The object type produced at this factory.
  186. DIR_N, // Starting idle frame to match construction.
  187. BSIZE_11, // SIZE: Building size.
  188. NULL, // Preferred exit cell list.
  189. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  190. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  191. );
  192. static BuildingTypeClass const ClassAVMine(
  193. STRUCT_AVMINE,
  194. TXT_AVMINE, // NAME: Short name of the structure.
  195. "MINV", // NAME: Short name of the structure.
  196. FACING_NONE, // Foundation direction from center of building.
  197. XYP_COORD(0,0), // Exit point for produced units.
  198. REMAP_NORMAL, // Sidebar remap logic.
  199. 0x0000, // Vertical offset.
  200. 0x0000, // Primary weapon offset along turret centerline.
  201. 0x0000, // Primary weapon lateral offset along turret centerline.
  202. false, // Is this building a fake (decoy?)
  203. false, // Animation rate is regulated for constant speed?
  204. false, // Always use the given name for the building?
  205. false, // Is this a wall type structure?
  206. true, // Simple (one frame) damage imagery?
  207. true, // Is it invisible to radar?
  208. false, // Can the player select this?
  209. false, // Is this a legal target for attack or move?
  210. true, // Is this an insignificant building?
  211. false, // Theater specific graphic image?
  212. false, // Does it have a rotating turret?
  213. true, // Can the building be color remapped to indicate owner?
  214. RTTI_NONE, // The object type produced at this factory.
  215. DIR_N, // Starting idle frame to match construction.
  216. BSIZE_11, // SIZE: Building size.
  217. NULL, // Preferred exit cell list.
  218. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  219. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  220. );
  221. static BuildingTypeClass const ClassAPMine(
  222. STRUCT_APMINE,
  223. TXT_APMINE, // NAME: Short name of the structure.
  224. "MINP", // NAME: Short name of the structure.
  225. FACING_NONE, // Foundation direction from center of building.
  226. XYP_COORD(0,0), // Exit point for produced units.
  227. REMAP_NORMAL, // Sidebar remap logic.
  228. 0x0000, // Vertical offset.
  229. 0x0000, // Primary weapon offset along turret centerline.
  230. 0x0000, // Primary weapon lateral offset along turret centerline.
  231. false, // Is this building a fake (decoy?)
  232. false, // Animation rate is regulated for constant speed?
  233. false, // Always use the given name for the building?
  234. false, // Is this a wall type structure?
  235. true, // Simple (one frame) damage imagery?
  236. true, // Is it invisible to radar?
  237. false, // Can the player select this?
  238. false, // Is this a legal target for attack or move?
  239. true, // Is this an insignificant building?
  240. false, // Theater specific graphic image?
  241. false, // Does it have a rotating turret?
  242. true, // Can the building be color remapped to indicate owner?
  243. RTTI_NONE, // The object type produced at this factory.
  244. DIR_N, // Starting idle frame to match construction.
  245. BSIZE_11, // SIZE: Building size.
  246. NULL, // Preferred exit cell list.
  247. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  248. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  249. );
  250. static BuildingTypeClass const ClassIronCurtain(
  251. STRUCT_IRON_CURTAIN,
  252. TXT_IRON_CURTAIN, // NAME: Short name of the structure.
  253. "IRON", // NAME: Short name of the structure.
  254. FACING_S, // Foundation direction from center of building.
  255. XYP_COORD(0,0), // Exit point for produced units.
  256. REMAP_ALTERNATE, // Sidebar remap logic.
  257. 0x0000, // Vertical offset.
  258. 0x0000, // Primary weapon offset along turret centerline.
  259. 0x0000, // Primary weapon lateral offset along turret centerline.
  260. false, // Is this building a fake (decoy?)
  261. true, // Animation rate is regulated for constant speed?
  262. false, // Always use the given name for the building?
  263. false, // Is this a wall type structure?
  264. true, // Simple (one frame) damage imagery?
  265. false, // Is it invisible to radar?
  266. true, // Can the player select this?
  267. true, // Is this a legal target for attack or move?
  268. false, // Is this an insignificant building?
  269. false, // Theater specific graphic image?
  270. false, // Does it have a rotating turret?
  271. true, // Can the building be color remapped to indicate owner?
  272. RTTI_NONE, // The object type produced at this factory.
  273. DIR_N, // Starting idle frame to match construction.
  274. BSIZE_22, // SIZE: Building size.
  275. NULL, // Preferred exit cell list.
  276. (short const *)List22_0011,// OCCUPYLIST: List of active foundation squares.
  277. (short const *)List22_1100 // OVERLAPLIST:List of overlap cell offset.
  278. );
  279. static BuildingTypeClass const ClassForwardCom(
  280. STRUCT_FORWARD_COM,
  281. TXT_FORWARD_COM, // NAME: Short name of the structure.
  282. "FCOM", // NAME: Short name of the structure.
  283. FACING_S, // Foundation direction from center of building.
  284. XYP_COORD(0,0), // Exit point for produced units.
  285. REMAP_ALTERNATE, // Sidebar remap logic.
  286. 0x0000, // Vertical offset.
  287. 0x0000, // Primary weapon offset along turret centerline.
  288. 0x0000, // Primary weapon lateral offset along turret centerline.
  289. false, // Is this building a fake (decoy?)
  290. true, // Animation rate is regulated for constant speed?
  291. false, // Always use the given name for the building?
  292. false, // Is this a wall type structure?
  293. true, // Simple (one frame) damage imagery?
  294. false, // Is it invisible to radar?
  295. true, // Can the player select this?
  296. true, // Is this a legal target for attack or move?
  297. false, // Is this an insignificant building?
  298. false, // Theater specific graphic image?
  299. false, // Does it have a rotating turret?
  300. true, // Can the building be color remapped to indicate owner?
  301. RTTI_NONE, // The object type produced at this factory.
  302. DIR_N, // Starting idle frame to match construction.
  303. BSIZE_22, // SIZE: Building size.
  304. NULL, // Preferred exit cell list.
  305. (short const *)List22_0011,// OCCUPYLIST: List of active foundation squares.
  306. (short const *)List22_1100 // OVERLAPLIST:List of overlap cell offset.
  307. );
  308. static BuildingTypeClass const ClassAdvancedTech(
  309. STRUCT_ADVANCED_TECH,
  310. TXT_ADVANCED_TECH, // NAME: Short name of the structure.
  311. "ATEK", // NAME: Short name of the structure.
  312. FACING_NONE, // Foundation direction from center of building.
  313. XYP_COORD(0,0), // Exit point for produced units.
  314. REMAP_ALTERNATE, // Sidebar remap logic.
  315. 0x0000, // Vertical offset.
  316. 0x0000, // Primary weapon offset along turret centerline.
  317. 0x0000, // Primary weapon lateral offset along turret centerline.
  318. false, // Is this building a fake (decoy?)
  319. true, // Animation rate is regulated for constant speed?
  320. false, // Always use the given name for the building?
  321. false, // Is this a wall type structure?
  322. true, // Simple (one frame) damage imagery?
  323. false, // Is it invisible to radar?
  324. true, // Can the player select this?
  325. true, // Is this a legal target for attack or move?
  326. false, // Is this an insignificant building?
  327. false, // Theater specific graphic image?
  328. false, // Does it have a rotating turret?
  329. true, // Can the building be color remapped to indicate owner?
  330. RTTI_NONE, // The object type produced at this factory.
  331. DIR_N, // Starting idle frame to match construction.
  332. BSIZE_22, // SIZE: Building size.
  333. NULL, // Preferred exit cell list.
  334. (short const *)List22, // OCCUPYLIST: List of active foundation squares.
  335. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  336. );
  337. static BuildingTypeClass const ClassChronosphere(
  338. STRUCT_CHRONOSPHERE,
  339. TXT_CHRONOSPHERE, // NAME: Short name of the structure.
  340. "PDOX", // NAME: Short name of the structure.
  341. FACING_NONE, // Foundation direction from center of building.
  342. XYP_COORD(0,0), // Exit point for produced units.
  343. REMAP_ALTERNATE, // Sidebar remap logic.
  344. 0x0000, // Vertical offset.
  345. 0x0000, // Primary weapon offset along turret centerline.
  346. 0x0000, // Primary weapon lateral offset along turret centerline.
  347. false, // Is this building a fake (decoy?)
  348. true, // Animation rate is regulated for constant speed?
  349. false, // Always use the given name for the building?
  350. false, // Is this a wall type structure?
  351. true, // Simple (one frame) damage imagery?
  352. false, // Is it invisible to radar?
  353. true, // Can the player select this?
  354. true, // Is this a legal target for attack or move?
  355. false, // Is this an insignificant building?
  356. false, // Theater specific graphic image?
  357. false, // Does it have a rotating turret?
  358. true, // Can the building be color remapped to indicate owner?
  359. RTTI_NONE, // The object type produced at this factory.
  360. DIR_N, // Starting idle frame to match construction.
  361. BSIZE_22, // SIZE: Building size.
  362. NULL, // Preferred exit cell list.
  363. (short const *)List22, // OCCUPYLIST: List of active foundation squares.
  364. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  365. );
  366. static BuildingTypeClass const ClassWeapon(
  367. STRUCT_WEAP,
  368. TXT_WEAPON_FACTORY, // NAME: Short name of the structure.
  369. "WEAP", // NAME: Short name of the structure.
  370. FACING_NONE, // Foundation direction from center of building.
  371. XY_Coord(CELL_LEPTON_W+(CELL_LEPTON_W/2), CELL_LEPTON_H), // Exit point for produced units.
  372. REMAP_ALTERNATE, // Sidebar remap logic.
  373. 0x0000, // Vertical offset.
  374. 0x0000, // Primary weapon offset along turret centerline.
  375. 0x0000, // Primary weapon lateral offset along turret centerline.
  376. false, // Is this building a fake (decoy?)
  377. false, // Animation rate is regulated for constant speed?
  378. false, // Always use the given name for the building?
  379. false, // Is this a wall type structure?
  380. false, // Simple (one frame) damage imagery?
  381. false, // Is it invisible to radar?
  382. true, // Can the player select this?
  383. true, // Is this a legal target for attack or move?
  384. false, // Is this an insignificant building?
  385. false, // Theater specific graphic image?
  386. false, // Does it have a rotating turret?
  387. true, // Can the building be color remapped to indicate owner?
  388. RTTI_UNITTYPE, // The object type produced at this factory.
  389. DIR_N, // Starting idle frame to match construction.
  390. BSIZE_32, // SIZE: Building size.
  391. (short const *)ExitWeap, // Preferred exit cell list.
  392. (short const *)ListWeap, // OCCUPYLIST: List of active foundation squares.
  393. (short const *)OListWeap // OVERLAPLIST:List of overlap cell offset.
  394. );
  395. static BuildingTypeClass const ClassShipYard(
  396. STRUCT_SHIP_YARD,
  397. TXT_SHIP_YARD, // NAME: Short name of the structure.
  398. "SYRD", // NAME: Short name of the structure.
  399. FACING_NONE, // Foundation direction from center of building.
  400. XYP_COORD(22+(CELL_PIXEL_W/2), ((CELL_PIXEL_H*2)-(CELL_PIXEL_H/2))), // Exit point for produced units.
  401. REMAP_ALTERNATE, // Sidebar remap logic.
  402. 0x0000, // Vertical offset.
  403. 0x0000, // Primary weapon offset along turret centerline.
  404. 0x0000, // Primary weapon lateral offset along turret centerline.
  405. false, // Is this building a fake (decoy?)
  406. false, // Animation rate is regulated for constant speed?
  407. false, // Always use the given name for the building?
  408. false, // Is this a wall type structure?
  409. false, // Simple (one frame) damage imagery?
  410. false, // Is it invisible to radar?
  411. true, // Can the player select this?
  412. true, // Is this a legal target for attack or move?
  413. false, // Is this an insignificant building?
  414. false, // Theater specific graphic image?
  415. false, // Does it have a rotating turret?
  416. true, // Can the building be color remapped to indicate owner?
  417. RTTI_VESSELTYPE, // The object type produced at this factory.
  418. DIR_N, // Starting idle frame to match construction.
  419. BSIZE_33, // SIZE: Building size.
  420. NULL, // Preferred exit cell list.
  421. (short const *)ListSPen, // OCCUPYLIST: List of active foundation squares.
  422. (short const *)OListSPen // OVERLAPLIST:List of overlap cell offset.
  423. );
  424. static BuildingTypeClass const ClassSubPen(
  425. STRUCT_SUB_PEN,
  426. TXT_SUB_PEN, // NAME: Short name of the structure.
  427. "SPEN", // NAME: Short name of the structure.
  428. FACING_NONE, // Foundation direction from center of building.
  429. XYP_COORD(22+(CELL_PIXEL_W/2), ((CELL_PIXEL_H*2)-(CELL_PIXEL_H/2))), // Exit point for produced units.
  430. REMAP_ALTERNATE, // Sidebar remap logic.
  431. 0x0000, // Vertical offset.
  432. 0x0000, // Primary weapon offset along turret centerline.
  433. 0x0000, // Primary weapon lateral offset along turret centerline.
  434. false, // Is this building a fake (decoy?)
  435. false, // Animation rate is regulated for constant speed?
  436. false, // Always use the given name for the building?
  437. false, // Is this a wall type structure?
  438. false, // Simple (one frame) damage imagery?
  439. false, // Is it invisible to radar?
  440. true, // Can the player select this?
  441. true, // Is this a legal target for attack or move?
  442. false, // Is this an insignificant building?
  443. false, // Theater specific graphic image?
  444. false, // Does it have a rotating turret?
  445. true, // Can the building be color remapped to indicate owner?
  446. RTTI_VESSELTYPE, // The object type produced at this factory.
  447. DIR_N, // Starting idle frame to match construction.
  448. BSIZE_33, // SIZE: Building size.
  449. (short const *)ExitSub, // Preferred exit cell list.
  450. (short const *)ListSPen, // OCCUPYLIST: List of active foundation squares.
  451. (short const *)OListSPen // OVERLAPLIST:List of overlap cell offset.
  452. );
  453. static BuildingTypeClass const ClassPillbox(
  454. STRUCT_PILLBOX,
  455. TXT_PILLBOX, // NAME: Short name of the structure.
  456. "PBOX", // NAME: Short name of the structure.
  457. FACING_NONE, // Foundation direction from center of building.
  458. XYP_COORD(0,0), // Exit point for produced units.
  459. REMAP_ALTERNATE, // Sidebar remap logic.
  460. 0x0010, // Vertical offset.
  461. 0x0040, // Primary weapon offset along turret centerline.
  462. 0x0000, // Primary weapon lateral offset along turret centerline.
  463. false, // Is this building a fake (decoy?)
  464. false, // Animation rate is regulated for constant speed?
  465. false, // Always use the given name for the building?
  466. false, // Is this a wall type structure?
  467. true, // Simple (one frame) damage imagery?
  468. false, // Is it invisible to radar?
  469. true, // Can the player select this?
  470. true, // Is this a legal target for attack or move?
  471. false, // Is this an insignificant building?
  472. false, // Theater specific graphic image?
  473. false, // Does it have a rotating turret?
  474. true, // Can the building be color remapped to indicate owner?
  475. RTTI_NONE, // The object type produced at this factory.
  476. DIR_N, // Starting idle frame to match construction.
  477. BSIZE_11, // SIZE: Building size.
  478. NULL, // Preferred exit cell list.
  479. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  480. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  481. );
  482. static BuildingTypeClass const ClassCamoPillbox(
  483. STRUCT_CAMOPILLBOX,
  484. TXT_CAMOPILLBOX, // NAME: Short name of the structure.
  485. "HBOX", // NAME: Short name of the structure.
  486. FACING_NONE, // Foundation direction from center of building.
  487. XYP_COORD(0,0), // Exit point for produced units.
  488. REMAP_ALTERNATE, // Sidebar remap logic.
  489. 0x0010, // Vertical offset.
  490. 0x0040, // Primary weapon offset along turret centerline.
  491. 0x0000, // Primary weapon lateral offset along turret centerline.
  492. false, // Is this building a fake (decoy?)
  493. false, // Animation rate is regulated for constant speed?
  494. false, // Always use the given name for the building?
  495. false, // Is this a wall type structure?
  496. true, // Simple (one frame) damage imagery?
  497. false, // Is it invisible to radar?
  498. true, // Can the player select this?
  499. true, // Is this a legal target for attack or move?
  500. false, // Is this an insignificant building?
  501. true, // Theater specific graphic image?
  502. false, // Does it have a rotating turret?
  503. true, // Can the building be color remapped to indicate owner?
  504. RTTI_NONE, // The object type produced at this factory.
  505. DIR_N, // Starting idle frame to match construction.
  506. BSIZE_11, // SIZE: Building size.
  507. NULL, // Preferred exit cell list.
  508. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  509. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  510. );
  511. static BuildingTypeClass const ClassTesla(
  512. STRUCT_TESLA,
  513. TXT_TESLA, // NAME: Short name of the structure.
  514. "TSLA", // NAME: Short name of the structure.
  515. FACING_S, // Foundation direction from center of building.
  516. XYP_COORD(0,0), // Exit point for produced units.
  517. REMAP_ALTERNATE, // Sidebar remap logic.
  518. 0x00C8, // Vertical offset.
  519. 0x0000, // Primary weapon offset along turret centerline.
  520. 0x0000, // Primary weapon lateral offset along turret centerline.
  521. false, // Is this building a fake (decoy?)
  522. false, // Animation rate is regulated for constant speed?
  523. false, // Always use the given name for the building?
  524. false, // Is this a wall type structure?
  525. false, // Simple (one frame) damage imagery?
  526. false, // Is it invisible to radar?
  527. true, // Can the player select this?
  528. true, // Is this a legal target for attack or move?
  529. false, // Is this an insignificant building?
  530. false, // Theater specific graphic image?
  531. false, // Does it have a rotating turret?
  532. true, // Can the building be color remapped to indicate owner?
  533. RTTI_NONE, // The object type produced at this factory.
  534. DIR_N, // Starting idle frame to match construction.
  535. BSIZE_12, // SIZE: Building size.
  536. NULL, // Preferred exit cell list.
  537. (short const *)List12, // OCCUPYLIST: List of active foundation squares.
  538. (short const *)OList12 // OVERLAPLIST:List of overlap cell offset.
  539. );
  540. static BuildingTypeClass const ClassTurret(
  541. STRUCT_TURRET,
  542. TXT_TURRET, // NAME: Short name of the structure.
  543. "GUN", // NAME: Short name of the structure.
  544. FACING_NONE, // Foundation direction from center of building.
  545. XYP_COORD(0,0), // Exit point for produced units.
  546. REMAP_ALTERNATE, // Sidebar remap logic.
  547. 0x0030, // Vertical offset.
  548. 0x0080, // Primary weapon offset along turret centerline.
  549. 0x0000, // Primary weapon lateral offset along turret centerline.
  550. false, // Is this building a fake (decoy?)
  551. false, // Animation rate is regulated for constant speed?
  552. false, // Always use the given name for the building?
  553. false, // Is this a wall type structure?
  554. false, // Simple (one frame) damage imagery?
  555. false, // Is it invisible to radar?
  556. true, // Can the player select this?
  557. true, // Is this a legal target for attack or move?
  558. false, // Is this an insignificant building?
  559. false, // Theater specific graphic image?
  560. true, // Does it have a rotating turret?
  561. true, // Can the building be color remapped to indicate owner?
  562. RTTI_NONE, // The object type produced at this factory.
  563. (DirType)208, // Starting idle frame to match construction.
  564. BSIZE_11, // SIZE: Building size.
  565. NULL, // Preferred exit cell list.
  566. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  567. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  568. );
  569. static BuildingTypeClass const ClassAAGun(
  570. STRUCT_AAGUN,
  571. TXT_AAGUN, // NAME: Short name of the structure.
  572. "AGUN", // NAME: Short name of the structure.
  573. FACING_S, // Foundation direction from center of building.
  574. XYP_COORD(0,0), // Exit point for produced units.
  575. REMAP_ALTERNATE, // Sidebar remap logic.
  576. 0x0000, // Vertical offset.
  577. 0x0000, // Primary weapon offset along turret centerline.
  578. 0x0000, // Primary weapon lateral offset along turret centerline.
  579. false, // Is this building a fake (decoy?)
  580. false, // Animation rate is regulated for constant speed?
  581. false, // Always use the given name for the building?
  582. false, // Is this a wall type structure?
  583. false, // Simple (one frame) damage imagery?
  584. false, // Is it invisible to radar?
  585. true, // Can the player select this?
  586. true, // Is this a legal target for attack or move?
  587. false, // Is this an insignificant building?
  588. false, // Theater specific graphic image?
  589. true, // Does it have a rotating turret?
  590. true, // Can the building be color remapped to indicate owner?
  591. RTTI_NONE, // The object type produced at this factory.
  592. DIR_NE, // Starting idle frame to match construction.
  593. BSIZE_12, // SIZE: Building size.
  594. NULL, // Preferred exit cell list.
  595. (short const *)List12, // OCCUPYLIST: List of active foundation squares.
  596. (short const *)OList12 // OVERLAPLIST:List of overlap cell offset.
  597. );
  598. static BuildingTypeClass const ClassFlameTurret(
  599. STRUCT_FLAME_TURRET,
  600. TXT_FLAME_TURRET, // NAME: Short name of the structure.
  601. "FTUR", // NAME: Short name of the structure.
  602. FACING_NONE, // Foundation direction from center of building.
  603. XYP_COORD(0,0), // Exit point for produced units.
  604. REMAP_ALTERNATE, // Sidebar remap logic.
  605. 0x0000, // Vertical offset.
  606. 0x0000, // Primary weapon offset along turret centerline.
  607. 0x0000, // Primary weapon lateral offset along turret centerline.
  608. false, // Is this building a fake (decoy?)
  609. false, // Animation rate is regulated for constant speed?
  610. false, // Always use the given name for the building?
  611. false, // Is this a wall type structure?
  612. true, // Simple (one frame) damage imagery?
  613. false, // Is it invisible to radar?
  614. true, // Can the player select this?
  615. true, // Is this a legal target for attack or move?
  616. false, // Is this an insignificant building?
  617. false, // Theater specific graphic image?
  618. false, // Does it have a rotating turret?
  619. true, // Can the building be color remapped to indicate owner?
  620. RTTI_NONE, // The object type produced at this factory.
  621. DIR_N, // Starting idle frame to match construction.
  622. BSIZE_11, // SIZE: Building size.
  623. NULL, // Preferred exit cell list.
  624. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  625. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  626. );
  627. static BuildingTypeClass const ClassConst(
  628. STRUCT_CONST,
  629. TXT_CONST_YARD, // NAME: Short name of the structure.
  630. "FACT", // NAME: Short name of the structure.
  631. FACING_NONE, // Foundation direction from center of building.
  632. XYP_COORD(0,0), // Exit point for produced units.
  633. REMAP_ALTERNATE, // Sidebar remap logic.
  634. 0x0000, // Vertical offset.
  635. 0x0000, // Primary weapon offset along turret centerline.
  636. 0x0000, // Primary weapon lateral offset along turret centerline.
  637. false, // Is this building a fake (decoy?)
  638. false, // Animation rate is regulated for constant speed?
  639. false, // Always use the given name for the building?
  640. false, // Is this a wall type structure?
  641. false, // Simple (one frame) damage imagery?
  642. false, // Is it invisible to radar?
  643. true, // Can the player select this?
  644. true, // Is this a legal target for attack or move?
  645. false, // Is this an insignificant building?
  646. false, // Theater specific graphic image?
  647. false, // Does it have a rotating turret?
  648. true, // Can the building be color remapped to indicate owner?
  649. RTTI_BUILDINGTYPE, // The object type produced at this factory.
  650. DIR_N, // Starting idle frame to match construction.
  651. BSIZE_33, // SIZE: Building size.
  652. NULL, // Preferred exit cell list.
  653. (short const *)ListFactory,// OCCUPYLIST: List of active foundation squares.
  654. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  655. );
  656. static BuildingTypeClass const ClassFakeConst(
  657. STRUCT_FAKECONST,
  658. TXT_FAKE_CONST, // NAME: Short name of the structure.
  659. "FACF", // NAME: Short name of the structure.
  660. FACING_NONE, // Foundation direction from center of building.
  661. XYP_COORD(0,0), // Exit point for produced units.
  662. REMAP_ALTERNATE, // Sidebar remap logic.
  663. 0x0000, // Vertical offset.
  664. 0x0000, // Primary weapon offset along turret centerline.
  665. 0x0000, // Primary weapon lateral offset along turret centerline.
  666. true, // Is this building a fake (decoy?)
  667. false, // Animation rate is regulated for constant speed?
  668. false, // Always use the given name for the building?
  669. false, // Is this a wall type structure?
  670. false, // Simple (one frame) damage imagery?
  671. false, // Is it invisible to radar?
  672. true, // Can the player select this?
  673. true, // Is this a legal target for attack or move?
  674. false, // Is this an insignificant building?
  675. false, // Theater specific graphic image?
  676. false, // Does it have a rotating turret?
  677. true, // Can the building be color remapped to indicate owner?
  678. RTTI_NONE, // The object type produced at this factory.
  679. DIR_N, // Starting idle frame to match construction.
  680. BSIZE_33, // SIZE: Building size.
  681. NULL, // Preferred exit cell list.
  682. (short const *)ListFactory,// OCCUPYLIST: List of active foundation squares.
  683. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  684. );
  685. static BuildingTypeClass const ClassFakeWeapon(
  686. STRUCT_FAKEWEAP,
  687. TXT_FAKE_WEAP, // NAME: Short name of the structure.
  688. "WEAF", // NAME: Short name of the structure.
  689. FACING_NONE, // Foundation direction from center of building.
  690. XYP_COORD(10+(CELL_PIXEL_W/2), ((CELL_PIXEL_H*3)-(CELL_PIXEL_H/2))-21), // Exit point for produced units.
  691. REMAP_ALTERNATE, // Sidebar remap logic.
  692. 0x0000, // Vertical offset.
  693. 0x0000, // Primary weapon offset along turret centerline.
  694. 0x0000, // Primary weapon lateral offset along turret centerline.
  695. true, // Is this building a fake (decoy?)
  696. false, // Animation rate is regulated for constant speed?
  697. false, // Always use the given name for the building?
  698. false, // Is this a wall type structure?
  699. false, // Simple (one frame) damage imagery?
  700. false, // Is it invisible to radar?
  701. true, // Can the player select this?
  702. true, // Is this a legal target for attack or move?
  703. false, // Is this an insignificant building?
  704. false, // Theater specific graphic image?
  705. false, // Does it have a rotating turret?
  706. true, // Can the building be color remapped to indicate owner?
  707. RTTI_NONE, // The object type produced at this factory.
  708. DIR_N, // Starting idle frame to match construction.
  709. BSIZE_32, // SIZE: Building size.
  710. (short const *)ExitWeap, // Preferred exit cell list.
  711. (short const *)ListWeap, // OCCUPYLIST: List of active foundation squares.
  712. (short const *)OListWeap // OVERLAPLIST:List of overlap cell offset.
  713. );
  714. static BuildingTypeClass const ClassRefinery(
  715. STRUCT_REFINERY,
  716. TXT_REFINERY, // NAME: Short name of the structure.
  717. "PROC", // NAME: Short name of the structure.
  718. FACING_NONE, // Foundation direction from center of building.
  719. XYP_COORD(0,0), // Exit point for produced units.
  720. REMAP_ALTERNATE, // Sidebar remap logic.
  721. 0x0000, // Vertical offset.
  722. 0x0000, // Primary weapon offset along turret centerline.
  723. 0x0000, // Primary weapon lateral offset along turret centerline.
  724. false, // Is this building a fake (decoy?)
  725. false, // Animation rate is regulated for constant speed?
  726. false, // Always use the given name for the building?
  727. false, // Is this a wall type structure?
  728. false, // Simple (one frame) damage imagery?
  729. false, // Is it invisible to radar?
  730. true, // Can the player select this?
  731. true, // Is this a legal target for attack or move?
  732. false, // Is this an insignificant building?
  733. false, // Theater specific graphic image?
  734. false, // Does it have a rotating turret?
  735. true, // Can the building be color remapped to indicate owner?
  736. RTTI_NONE, // The object type produced at this factory.
  737. DIR_N, // Starting idle frame to match construction.
  738. BSIZE_33, // SIZE: Building size.
  739. NULL, // Preferred exit cell list.
  740. (short const *)List010111100, // OCCUPYLIST: List of active foundation squares.
  741. (short const *)List101000011 // OVERLAPLIST:List of overlap cell offset.
  742. );
  743. static BuildingTypeClass const ClassStorage(
  744. STRUCT_STORAGE,
  745. TXT_STORAGE, // NAME: Short name of the structure.
  746. "SILO", // NAME: Short name of the structure.
  747. FACING_NONE, // Foundation direction from center of building.
  748. XYP_COORD(0,0), // Exit point for produced units.
  749. REMAP_ALTERNATE, // Sidebar remap logic.
  750. 0x0000, // Vertical offset.
  751. 0x0000, // Primary weapon offset along turret centerline.
  752. 0x0000, // Primary weapon lateral offset along turret centerline.
  753. false, // Is this building a fake (decoy?)
  754. false, // Animation rate is regulated for constant speed?
  755. false, // Always use the given name for the building?
  756. false, // Is this a wall type structure?
  757. true, // Simple (one frame) damage imagery?
  758. false, // Is it invisible to radar?
  759. true, // Can the player select this?
  760. true, // Is this a legal target for attack or move?
  761. false, // Is this an insignificant building?
  762. false, // Theater specific graphic image?
  763. false, // Does it have a rotating turret?
  764. true, // Can the building be color remapped to indicate owner?
  765. RTTI_NONE, // The object type produced at this factory.
  766. DIR_N, // Starting idle frame to match construction.
  767. BSIZE_11, // SIZE: Building size.
  768. NULL, // Preferred exit cell list.
  769. (short const *)StoreList, // OCCUPYLIST: List of active foundation squares.
  770. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  771. );
  772. static BuildingTypeClass const ClassHelipad(
  773. STRUCT_HELIPAD,
  774. TXT_HELIPAD, // NAME: Short name of the structure.
  775. "HPAD", // NAME: Short name of the structure.
  776. FACING_NONE, // Foundation direction from center of building.
  777. XYP_COORD(0,0), // Exit point for produced units.
  778. REMAP_ALTERNATE, // Sidebar remap logic.
  779. 0x0000, // Vertical offset.
  780. 0x0000, // Primary weapon offset along turret centerline.
  781. 0x0000, // Primary weapon lateral offset along turret centerline.
  782. false, // Is this building a fake (decoy?)
  783. false, // Animation rate is regulated for constant speed?
  784. false, // Always use the given name for the building?
  785. false, // Is this a wall type structure?
  786. false, // Simple (one frame) damage imagery?
  787. false, // Is it invisible to radar?
  788. true, // Can the player select this?
  789. true, // Is this a legal target for attack or move?
  790. false, // Is this an insignificant building?
  791. false, // Theater specific graphic image?
  792. false, // Does it have a rotating turret?
  793. true, // Can the building be color remapped to indicate owner?
  794. RTTI_AIRCRAFTTYPE, // The object type produced at this factory.
  795. DIR_N, // Starting idle frame to match construction.
  796. BSIZE_22, // SIZE: Building size.
  797. NULL, // Preferred exit cell list.
  798. (short const *)List2, // OCCUPYLIST: List of active foundation squares.
  799. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  800. );
  801. static BuildingTypeClass const ClassCommand(
  802. STRUCT_RADAR,
  803. TXT_COMMAND, // NAME: Short name of the structure.
  804. "DOME", // NAME: Short name of the structure.
  805. FACING_NONE, // Foundation direction from center of building.
  806. XYP_COORD(0,0), // Exit point for produced units.
  807. REMAP_ALTERNATE, // Sidebar remap logic.
  808. 0x0000, // Vertical offset.
  809. 0x0000, // Primary weapon offset along turret centerline.
  810. 0x0000, // Primary weapon lateral offset along turret centerline.
  811. false, // Is this building a fake (decoy?)
  812. true, // Animation rate is regulated for constant speed?
  813. false, // Always use the given name for the building?
  814. false, // Is this a wall type structure?
  815. false, // Simple (one frame) damage imagery?
  816. false, // Is it invisible to radar?
  817. true, // Can the player select this?
  818. true, // Is this a legal target for attack or move?
  819. false, // Is this an insignificant building?
  820. false, // Theater specific graphic image?
  821. false, // Does it have a rotating turret?
  822. true, // Can the building be color remapped to indicate owner?
  823. RTTI_NONE, // The object type produced at this factory.
  824. DIR_N, // Starting idle frame to match construction.
  825. BSIZE_22, // SIZE: Building size.
  826. NULL, // Preferred exit cell list.
  827. (short const *)ComList, // OCCUPYLIST: List of active foundation squares.
  828. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  829. );
  830. static BuildingTypeClass const ClassGapGenerator(
  831. STRUCT_GAP,
  832. TXT_GAP_GENERATOR, // NAME: Short name of the structure.
  833. "GAP", // NAME: Short name of the structure.
  834. FACING_S, // Foundation direction from center of building.
  835. XYP_COORD(0,0), // Exit point for produced units.
  836. REMAP_ALTERNATE, // Sidebar remap logic.
  837. 0x0000, // Vertical offset.
  838. 0x0000, // Primary weapon offset along turret centerline.
  839. 0x0000, // Primary weapon lateral offset along turret centerline.
  840. false, // Is this building a fake (decoy?)
  841. true, // Animation rate is regulated for constant speed?
  842. false, // Always use the given name for the building?
  843. false, // Is this a wall type structure?
  844. false, // Simple (one frame) damage imagery?
  845. false, // Is it invisible to radar?
  846. true, // Can the player select this?
  847. true, // Is this a legal target for attack or move?
  848. false, // Is this an insignificant building?
  849. false, // Theater specific graphic image?
  850. false, // Does it have a rotating turret?
  851. true, // Can the building be color remapped to indicate owner?
  852. RTTI_NONE, // The object type produced at this factory.
  853. DIR_N, // Starting idle frame to match construction.
  854. BSIZE_12, // SIZE: Building size.
  855. NULL, // Preferred exit cell list.
  856. (short const *)List0010, // OCCUPYLIST: List of active foundation squares.
  857. (short const *)List1 // OVERLAPLIST:List of overlap cell offset.
  858. );
  859. static BuildingTypeClass const ClassSAM(
  860. STRUCT_SAM,
  861. TXT_SAM, // NAME: Short name of the structure.
  862. "SAM", // NAME: Short name of the structure.
  863. FACING_NONE, // Foundation direction from center of building.
  864. XYP_COORD(0,0), // Exit point for produced units.
  865. REMAP_ALTERNATE, // Sidebar remap logic.
  866. 0x0030, // Vertical offset.
  867. 0x0080, // Primary weapon offset along turret centerline.
  868. 0x0000, // Primary weapon lateral offset along turret centerline.
  869. false, // Is this building a fake (decoy?)
  870. false, // Animation rate is regulated for constant speed?
  871. false, // Always use the given name for the building?
  872. false, // Is this a wall type structure?
  873. false, // Simple (one frame) damage imagery?
  874. false, // Is it invisible to radar?
  875. true, // Can the player select this?
  876. true, // Is this a legal target for attack or move?
  877. false, // Is this an insignificant building?
  878. false, // Theater specific graphic image?
  879. true, // Does it have a rotating turret?
  880. true, // Can the building be color remapped to indicate owner?
  881. RTTI_NONE, // The object type produced at this factory.
  882. DIR_N, // Starting idle frame to match construction.
  883. BSIZE_21, // SIZE: Building size.
  884. NULL, // Preferred exit cell list.
  885. (short const *)List21, // OCCUPYLIST: List of active foundation squares.
  886. (short const *)OListSAM // OVERLAPLIST:List of overlap cell offset.
  887. );
  888. static BuildingTypeClass const ClassMissileSilo(
  889. STRUCT_MSLO,
  890. TXT_MSLO, // NAME: Short name of the structure.
  891. "MSLO", // NAME: Short name of the structure.
  892. FACING_NONE, // Foundation direction from center of building.
  893. XYP_COORD(0,0), // Exit point for produced units.
  894. REMAP_ALTERNATE, // Sidebar remap logic.
  895. 0x0000, // Vertical offset.
  896. 0x0000, // Primary weapon offset along turret centerline.
  897. 0x0000, // Primary weapon lateral offset along turret centerline.
  898. false, // Is this building a fake (decoy?)
  899. true, // Animation rate is regulated for constant speed?
  900. false, // Always use the given name for the building?
  901. false, // Is this a wall type structure?
  902. false, // Simple (one frame) damage imagery?
  903. false, // Is it invisible to radar?
  904. true, // Can the player select this?
  905. true, // Is this a legal target for attack or move?
  906. false, // Is this an insignificant building?
  907. true, // Theater specific graphic image?
  908. false, // Does it have a rotating turret?
  909. true, // Can the building be color remapped to indicate owner?
  910. RTTI_NONE, // The object type produced at this factory.
  911. DIR_N, // Starting idle frame to match construction.
  912. BSIZE_21, // SIZE: Building size.
  913. NULL, // Preferred exit cell list.
  914. (short const *)List21, // OCCUPYLIST: List of active foundation squares.
  915. (short const *)OListSAM // OVERLAPLIST:List of overlap cell offset.
  916. );
  917. static BuildingTypeClass const ClassAirStrip(
  918. STRUCT_AIRSTRIP,
  919. TXT_AIRSTRIP, // NAME: Short name of the structure.
  920. "AFLD", // NAME: Short name of the structure.
  921. FACING_S, // Foundation direction from center of building.
  922. XYP_COORD(0,0), // Exit point for produced units.
  923. REMAP_ALTERNATE, // Sidebar remap logic.
  924. 0x0000, // Vertical offset.
  925. 0x0000, // Primary weapon offset along turret centerline.
  926. 0x0000, // Primary weapon lateral offset along turret centerline.
  927. false, // Is this building a fake (decoy?)
  928. true, // Animation rate is regulated for constant speed?
  929. false, // Always use the given name for the building?
  930. false, // Is this a wall type structure?
  931. false, // Simple (one frame) damage imagery?
  932. false, // Is it invisible to radar?
  933. true, // Can the player select this?
  934. true, // Is this a legal target for attack or move?
  935. false, // Is this an insignificant building?
  936. false, // Theater specific graphic image?
  937. false, // Does it have a rotating turret?
  938. true, // Can the building be color remapped to indicate owner?
  939. RTTI_AIRCRAFTTYPE, // The object type produced at this factory.
  940. DIR_N, // Starting idle frame to match construction.
  941. BSIZE_32, // SIZE: Building size.
  942. NULL, // Preferred exit cell list.
  943. (short const *)List32, // OCCUPYLIST: List of active foundation squares.
  944. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  945. );
  946. static BuildingTypeClass const ClassPower(
  947. STRUCT_POWER,
  948. TXT_POWER, // NAME: Short name of the structure.
  949. "POWR", // NAME: Short name of the structure.
  950. FACING_S, // Foundation direction from center of building.
  951. XYP_COORD(0,0), // Exit point for produced units.
  952. REMAP_ALTERNATE, // Sidebar remap logic.
  953. 0x0000, // Vertical offset.
  954. 0x0000, // Primary weapon offset along turret centerline.
  955. 0x0000, // Primary weapon lateral offset along turret centerline.
  956. false, // Is this building a fake (decoy?)
  957. true, // Animation rate is regulated for constant speed?
  958. false, // Always use the given name for the building?
  959. false, // Is this a wall type structure?
  960. true, // Simple (one frame) damage imagery?
  961. false, // Is it invisible to radar?
  962. true, // Can the player select this?
  963. true, // Is this a legal target for attack or move?
  964. false, // Is this an insignificant building?
  965. false, // Theater specific graphic image?
  966. false, // Does it have a rotating turret?
  967. true, // Can the building be color remapped to indicate owner?
  968. RTTI_NONE, // The object type produced at this factory.
  969. DIR_N, // Starting idle frame to match construction.
  970. BSIZE_22, // SIZE: Building size.
  971. NULL, // Preferred exit cell list.
  972. (short const *)List22, // OCCUPYLIST: List of active foundation squares.
  973. (short const *)List22_1100 // OVERLAPLIST:List of overlap cell offset.
  974. );
  975. static BuildingTypeClass const ClassAdvancedPower(
  976. STRUCT_ADVANCED_POWER,
  977. TXT_ADVANCED_POWER, // NAME: Short name of the structure.
  978. "APWR", // NAME: Short name of the structure.
  979. FACING_S, // Foundation direction from center of building.
  980. XYP_COORD(0,0), // Exit point for produced units.
  981. REMAP_ALTERNATE, // Sidebar remap logic.
  982. 0x0000, // Vertical offset.
  983. 0x0000, // Primary weapon offset along turret centerline.
  984. 0x0000, // Primary weapon lateral offset along turret centerline.
  985. false, // Is this building a fake (decoy?)
  986. true, // Animation rate is regulated for constant speed?
  987. false, // Always use the given name for the building?
  988. false, // Is this a wall type structure?
  989. true, // Simple (one frame) damage imagery?
  990. false, // Is it invisible to radar?
  991. true, // Can the player select this?
  992. true, // Is this a legal target for attack or move?
  993. false, // Is this an insignificant building?
  994. false, // Theater specific graphic image?
  995. false, // Does it have a rotating turret?
  996. true, // Can the building be color remapped to indicate owner?
  997. RTTI_NONE, // The object type produced at this factory.
  998. DIR_N, // Starting idle frame to match construction.
  999. BSIZE_33, // SIZE: Building size.
  1000. NULL, // Preferred exit cell list.
  1001. (short const *)List000111111, // OCCUPYLIST: List of active foundation squares.
  1002. (short const *)OListTmpl // OVERLAPLIST:List of overlap cell offset.
  1003. );
  1004. static BuildingTypeClass const ClassSovietTech(
  1005. STRUCT_SOVIET_TECH,
  1006. TXT_SOVIET_TECH, // NAME: Short name of the structure.
  1007. "STEK", // NAME: Short name of the structure.
  1008. FACING_S, // Foundation direction from center of building.
  1009. XYP_COORD(0,0), // Exit point for produced units.
  1010. REMAP_ALTERNATE, // Sidebar remap logic.
  1011. 0x0000, // Vertical offset.
  1012. 0x0000, // Primary weapon offset along turret centerline.
  1013. 0x0000, // Primary weapon lateral offset along turret centerline.
  1014. false, // Is this building a fake (decoy?)
  1015. true, // Animation rate is regulated for constant speed?
  1016. false, // Always use the given name for the building?
  1017. false, // Is this a wall type structure?
  1018. true, // Simple (one frame) damage imagery?
  1019. false, // Is it invisible to radar?
  1020. true, // Can the player select this?
  1021. true, // Is this a legal target for attack or move?
  1022. false, // Is this an insignificant building?
  1023. false, // Theater specific graphic image?
  1024. false, // Does it have a rotating turret?
  1025. true, // Can the building be color remapped to indicate owner?
  1026. RTTI_NONE, // The object type produced at this factory.
  1027. DIR_N, // Starting idle frame to match construction.
  1028. BSIZE_33, // SIZE: Building size.
  1029. NULL, // Preferred exit cell list.
  1030. (short const *)List000111111, // OCCUPYLIST: List of active foundation squares.
  1031. (short const *)OListTmpl // OVERLAPLIST:List of overlap cell offset.
  1032. );
  1033. static BuildingTypeClass const ClassHospital(
  1034. STRUCT_HOSPITAL,
  1035. TXT_HOSPITAL, // NAME: Short name of the structure.
  1036. "HOSP", // NAME: Short name of the structure.
  1037. FACING_NONE, // Foundation direction from center of building.
  1038. XYP_COORD(0,0), // Exit point for produced units.
  1039. REMAP_ALTERNATE, // Sidebar remap logic.
  1040. 0x0000, // Vertical offset.
  1041. 0x0000, // Primary weapon offset along turret centerline.
  1042. 0x0000, // Primary weapon lateral offset along turret centerline.
  1043. false, // Is this building a fake (decoy?)
  1044. true, // Animation rate is regulated for constant speed?
  1045. false, // Always use the given name for the building?
  1046. false, // Is this a wall type structure?
  1047. false, // Simple (one frame) damage imagery?
  1048. false, // Is it invisible to radar?
  1049. true, // Can the player select this?
  1050. true, // Is this a legal target for attack or move?
  1051. false, // Is this an insignificant building?
  1052. false, // Theater specific graphic image?
  1053. false, // Does it have a rotating turret?
  1054. true, // Can the building be color remapped to indicate owner?
  1055. RTTI_NONE, // The object type produced at this factory.
  1056. DIR_N, // Starting idle frame to match construction.
  1057. BSIZE_22, // SIZE: Building size.
  1058. NULL, // Preferred exit cell list.
  1059. (short const *)List2, // OCCUPYLIST: List of active foundation squares.
  1060. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1061. );
  1062. static BuildingTypeClass const ClassBioLab(
  1063. STRUCT_BIO_LAB,
  1064. TXT_BIO_LAB, // NAME: Short name of the structure.
  1065. "BIO", // NAME: Short name of the structure.
  1066. FACING_NONE, // Foundation direction from center of building.
  1067. XYP_COORD(0,0), // Exit point for produced units.
  1068. REMAP_ALTERNATE, // Sidebar remap logic.
  1069. 0x0000, // Vertical offset.
  1070. 0x0000, // Primary weapon offset along turret centerline.
  1071. 0x0000, // Primary weapon lateral offset along turret centerline.
  1072. false, // Is this building a fake (decoy?)
  1073. true, // Animation rate is regulated for constant speed?
  1074. true, // Always use the given name for the building?
  1075. false, // Is this a wall type structure?
  1076. false, // Simple (one frame) damage imagery?
  1077. false, // Is it invisible to radar?
  1078. true, // Can the player select this?
  1079. true, // Is this a legal target for attack or move?
  1080. false, // Is this an insignificant building?
  1081. false, // Theater specific graphic image?
  1082. false, // Does it have a rotating turret?
  1083. true, // Can the building be color remapped to indicate owner?
  1084. RTTI_NONE, // The object type produced at this factory.
  1085. DIR_N, // Starting idle frame to match construction.
  1086. BSIZE_22, // SIZE: Building size.
  1087. NULL, // Preferred exit cell list.
  1088. (short const *)List2, // OCCUPYLIST: List of active foundation squares.
  1089. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1090. );
  1091. static BuildingTypeClass const ClassBarracks(
  1092. STRUCT_BARRACKS,
  1093. TXT_BARRACKS, // NAME: Short name of the structure.
  1094. "BARR", // NAME: Short name of the structure.
  1095. FACING_NONE, // Foundation direction from center of building.
  1096. // XYP_COORD(24,47), // Exit point for produced units.
  1097. XYP_COORD(18,47), // Exit point for produced units.
  1098. REMAP_ALTERNATE, // Sidebar remap logic.
  1099. 0x0000, // Vertical offset.
  1100. 0x0000, // Primary weapon offset along turret centerline.
  1101. 0x0000, // Primary weapon lateral offset along turret centerline.
  1102. false, // Is this building a fake (decoy?)
  1103. true, // Animation rate is regulated for constant speed?
  1104. false, // Always use the given name for the building?
  1105. false, // Is this a wall type structure?
  1106. false, // Simple (one frame) damage imagery?
  1107. false, // Is it invisible to radar?
  1108. true, // Can the player select this?
  1109. true, // Is this a legal target for attack or move?
  1110. false, // Is this an insignificant building?
  1111. false, // Theater specific graphic image?
  1112. false, // Does it have a rotating turret?
  1113. true, // Can the building be color remapped to indicate owner?
  1114. RTTI_INFANTRYTYPE, // The object type produced at this factory.
  1115. DIR_N, // Starting idle frame to match construction.
  1116. BSIZE_22, // SIZE: Building size.
  1117. (short const *)ExitPyle, // Preferred exit cell list.
  1118. (short const *)List22, // OCCUPYLIST: List of active foundation squares.
  1119. NULL // OVERLAPLIST:List of overlap cell offset.
  1120. );
  1121. static BuildingTypeClass const ClassTent(
  1122. STRUCT_TENT,
  1123. TXT_BARRACKS, // NAME: Short name of the structure.
  1124. "TENT", // NAME: Short name of the structure.
  1125. FACING_NONE, // Foundation direction from center of building.
  1126. XYP_COORD(24,47), // Exit point for produced units.
  1127. REMAP_ALTERNATE, // Sidebar remap logic.
  1128. 0x0000, // Vertical offset.
  1129. 0x0000, // Primary weapon offset along turret centerline.
  1130. 0x0000, // Primary weapon lateral offset along turret centerline.
  1131. false, // Is this building a fake (decoy?)
  1132. true, // Animation rate is regulated for constant speed?
  1133. false, // Always use the given name for the building?
  1134. false, // Is this a wall type structure?
  1135. false, // Simple (one frame) damage imagery?
  1136. false, // Is it invisible to radar?
  1137. true, // Can the player select this?
  1138. true, // Is this a legal target for attack or move?
  1139. false, // Is this an insignificant building?
  1140. false, // Theater specific graphic image?
  1141. false, // Does it have a rotating turret?
  1142. true, // Can the building be color remapped to indicate owner?
  1143. RTTI_INFANTRYTYPE, // The object type produced at this factory.
  1144. DIR_N, // Starting idle frame to match construction.
  1145. BSIZE_22, // SIZE: Building size.
  1146. (short const *)ExitPyle, // Preferred exit cell list.
  1147. (short const *)List22, // OCCUPYLIST: List of active foundation squares.
  1148. NULL // OVERLAPLIST:List of overlap cell offset.
  1149. );
  1150. static BuildingTypeClass const ClassKennel(
  1151. STRUCT_KENNEL,
  1152. TXT_KENNEL, // NAME: Short name of the structure.
  1153. "KENN", // NAME: Short name of the structure.
  1154. FACING_NONE, // Foundation direction from center of building.
  1155. XYP_COORD(8,16), // Exit point for produced units.
  1156. REMAP_ALTERNATE, // Sidebar remap logic.
  1157. 0x0000, // Vertical offset.
  1158. 0x0000, // Primary weapon offset along turret centerline.
  1159. 0x0000, // Primary weapon lateral offset along turret centerline.
  1160. false, // Is this building a fake (decoy?)
  1161. true, // Animation rate is regulated for constant speed?
  1162. false, // Always use the given name for the building?
  1163. false, // Is this a wall type structure?
  1164. false, // Simple (one frame) damage imagery?
  1165. false, // Is it invisible to radar?
  1166. true, // Can the player select this?
  1167. true, // Is this a legal target for attack or move?
  1168. false, // Is this an insignificant building?
  1169. false, // Theater specific graphic image?
  1170. false, // Does it have a rotating turret?
  1171. true, // Can the building be color remapped to indicate owner?
  1172. RTTI_INFANTRYTYPE, // The object type produced at this factory.
  1173. DIR_N, // Starting idle frame to match construction.
  1174. BSIZE_11, // SIZE: Building size.
  1175. NULL, // Preferred exit cell list.
  1176. // (short const *)ExitPyle, // Preferred exit cell list.
  1177. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1178. NULL // OVERLAPLIST:List of overlap cell offset.
  1179. );
  1180. static BuildingTypeClass const ClassFakeShipYard(
  1181. STRUCT_FAKE_YARD,
  1182. TXT_FAKE_YARD, // NAME: Short name of the structure.
  1183. "SYRF", // NAME: Short name of the structure.
  1184. FACING_NONE, // Foundation direction from center of building.
  1185. XYP_COORD(22+(CELL_PIXEL_W/2), ((CELL_PIXEL_H*2)-(CELL_PIXEL_H/2))), // Exit point for produced units.
  1186. REMAP_ALTERNATE, // Sidebar remap logic.
  1187. 0x0000, // Vertical offset.
  1188. 0x0000, // Primary weapon offset along turret centerline.
  1189. 0x0000, // Primary weapon lateral offset along turret centerline.
  1190. true, // Is this building a fake (decoy?)
  1191. false, // Animation rate is regulated for constant speed?
  1192. false, // Always use the given name for the building?
  1193. false, // Is this a wall type structure?
  1194. false, // Simple (one frame) damage imagery?
  1195. false, // Is it invisible to radar?
  1196. true, // Can the player select this?
  1197. true, // Is this a legal target for attack or move?
  1198. false, // Is this an insignificant building?
  1199. false, // Theater specific graphic image?
  1200. false, // Does it have a rotating turret?
  1201. true, // Can the building be color remapped to indicate owner?
  1202. RTTI_NONE, // The object type produced at this factory.
  1203. DIR_N, // Starting idle frame to match construction.
  1204. BSIZE_33, // SIZE: Building size.
  1205. (short const *)ExitWeap, // Preferred exit cell list.
  1206. (short const *)ListSPen, // OCCUPYLIST: List of active foundation squares.
  1207. (short const *)OListSPen // OVERLAPLIST:List of overlap cell offset.
  1208. );
  1209. static BuildingTypeClass const ClassFakeSubPen(
  1210. STRUCT_FAKE_PEN,
  1211. TXT_FAKE_PEN, // NAME: Short name of the structure.
  1212. "SPEF", // NAME: Short name of the structure.
  1213. FACING_NONE, // Foundation direction from center of building.
  1214. XYP_COORD(22+(CELL_PIXEL_W/2), ((CELL_PIXEL_H*2)-(CELL_PIXEL_H/2))), // Exit point for produced units.
  1215. REMAP_ALTERNATE, // Sidebar remap logic.
  1216. 0x0000, // Vertical offset.
  1217. 0x0000, // Primary weapon offset along turret centerline.
  1218. 0x0000, // Primary weapon lateral offset along turret centerline.
  1219. true, // Is this building a fake (decoy?)
  1220. false, // Animation rate is regulated for constant speed?
  1221. false, // Always use the given name for the building?
  1222. false, // Is this a wall type structure?
  1223. false, // Simple (one frame) damage imagery?
  1224. false, // Is it invisible to radar?
  1225. true, // Can the player select this?
  1226. true, // Is this a legal target for attack or move?
  1227. false, // Is this an insignificant building?
  1228. false, // Theater specific graphic image?
  1229. false, // Does it have a rotating turret?
  1230. true, // Can the building be color remapped to indicate owner?
  1231. RTTI_NONE, // The object type produced at this factory.
  1232. DIR_N, // Starting idle frame to match construction.
  1233. BSIZE_33, // SIZE: Building size.
  1234. (short const *)ExitSub, // Preferred exit cell list.
  1235. (short const *)ListSPen, // OCCUPYLIST: List of active foundation squares.
  1236. (short const *)OListSPen // OVERLAPLIST:List of overlap cell offset.
  1237. );
  1238. static BuildingTypeClass const ClassFakeCommand(
  1239. STRUCT_FAKE_RADAR,
  1240. TXT_FAKE_RADAR, // NAME: Short name of the structure.
  1241. "DOMF", // NAME: Short name of the structure.
  1242. FACING_NONE, // Foundation direction from center of building.
  1243. XYP_COORD(0,0), // Exit point for produced units.
  1244. REMAP_ALTERNATE, // Sidebar remap logic.
  1245. 0x0000, // Vertical offset.
  1246. 0x0000, // Primary weapon offset along turret centerline.
  1247. 0x0000, // Primary weapon lateral offset along turret centerline.
  1248. true, // Is this building a fake (decoy?)
  1249. true, // Animation rate is regulated for constant speed?
  1250. false, // Always use the given name for the building?
  1251. false, // Is this a wall type structure?
  1252. false, // Simple (one frame) damage imagery?
  1253. false, // Is it invisible to radar?
  1254. true, // Can the player select this?
  1255. true, // Is this a legal target for attack or move?
  1256. false, // Is this an insignificant building?
  1257. false, // Theater specific graphic image?
  1258. false, // Does it have a rotating turret?
  1259. true, // Can the building be color remapped to indicate owner?
  1260. RTTI_NONE, // The object type produced at this factory.
  1261. DIR_N, // Starting idle frame to match construction.
  1262. BSIZE_22, // SIZE: Building size.
  1263. NULL, // Preferred exit cell list.
  1264. (short const *)ComList, // OCCUPYLIST: List of active foundation squares.
  1265. (short const *)OComList // OVERLAPLIST:List of overlap cell offset.
  1266. );
  1267. static BuildingTypeClass const ClassRepair(
  1268. STRUCT_REPAIR,
  1269. TXT_FIX_IT, // NAME: Short name of the structure.
  1270. "FIX", // NAME: Short name of the structure.
  1271. FACING_NONE, // Foundation direction from center of building.
  1272. XYP_COORD(0,0), // Exit point for produced units.
  1273. REMAP_ALTERNATE, // Sidebar remap logic.
  1274. 0x0000, // Vertical offset.
  1275. 0x0000, // Primary weapon offset along turret centerline.
  1276. 0x0000, // Primary weapon lateral offset along turret centerline.
  1277. false, // Is this building a fake (decoy?)
  1278. true, // Animation rate is regulated for constant speed?
  1279. false, // Always use the given name for the building?
  1280. false, // Is this a wall type structure?
  1281. false, // Simple (one frame) damage imagery?
  1282. false, // Is it invisible to radar?
  1283. true, // Can the player select this?
  1284. true, // Is this a legal target for attack or move?
  1285. false, // Is this an insignificant building?
  1286. false, // Theater specific graphic image?
  1287. false, // Does it have a rotating turret?
  1288. true, // Can the building be color remapped to indicate owner?
  1289. RTTI_NONE, // The object type produced at this factory.
  1290. DIR_N, // Starting idle frame to match construction.
  1291. BSIZE_33, // SIZE: Building size.
  1292. NULL, // Preferred exit cell list.
  1293. (short const *)ListFix, // OCCUPYLIST: List of active foundation squares.
  1294. (short const *)OListFix // OVERLAPLIST:List of overlap cell offset.
  1295. );
  1296. static BuildingTypeClass const ClassV01(
  1297. STRUCT_V01,
  1298. TXT_CIV1, // NAME: Short name of the structure.
  1299. "V01", // NAME: Short name of the structure.
  1300. FACING_S, // Foundation direction from center of building.
  1301. XYP_COORD(0,0), // Exit point for produced units.
  1302. REMAP_ALTERNATE, // Sidebar remap logic.
  1303. 0x0000, // Vertical offset.
  1304. 0x0000, // Primary weapon offset along turret centerline.
  1305. 0x0000, // Primary weapon lateral offset along turret centerline.
  1306. false, // Is this building a fake (decoy?)
  1307. true, // Animation rate is regulated for constant speed?
  1308. true, // Always use the given name for the building?
  1309. false, // Is this a wall type structure?
  1310. true, // Simple (one frame) damage imagery?
  1311. true, // Is it invisible to radar?
  1312. true, // Can the player select this?
  1313. true, // Is this a legal target for attack or move?
  1314. true, // Is this an insignificant building?
  1315. true, // Theater specific graphic image?
  1316. false, // Does it have a rotating turret?
  1317. false, // Can the building be color remapped to indicate owner?
  1318. RTTI_NONE, // The object type produced at this factory.
  1319. DIR_N, // Starting idle frame to match construction.
  1320. BSIZE_22, // SIZE: Building size.
  1321. NULL, // Preferred exit cell list.
  1322. (short const *)List0011, // OCCUPYLIST: List of active foundation squares.
  1323. (short const *)List1100 // OVERLAPLIST:List of overlap cell offset.
  1324. );
  1325. static BuildingTypeClass const ClassV02(
  1326. STRUCT_V02,
  1327. TXT_CIV2, // NAME: Short name of the structure.
  1328. "V02", // NAME: Short name of the structure.
  1329. FACING_S, // Foundation direction from center of building.
  1330. XYP_COORD(0,0), // Exit point for produced units.
  1331. REMAP_ALTERNATE, // Sidebar remap logic.
  1332. 0x0000, // Vertical offset.
  1333. 0x0000, // Primary weapon offset along turret centerline.
  1334. 0x0000, // Primary weapon lateral offset along turret centerline.
  1335. false, // Is this building a fake (decoy?)
  1336. true, // Animation rate is regulated for constant speed?
  1337. true, // Always use the given name for the building?
  1338. false, // Is this a wall type structure?
  1339. true, // Simple (one frame) damage imagery?
  1340. true, // Is it invisible to radar?
  1341. true, // Can the player select this?
  1342. true, // Is this a legal target for attack or move?
  1343. true, // Is this an insignificant building?
  1344. true, // Theater specific graphic image?
  1345. false, // Does it have a rotating turret?
  1346. false, // Can the building be color remapped to indicate owner?
  1347. RTTI_NONE, // The object type produced at this factory.
  1348. DIR_N, // Starting idle frame to match construction.
  1349. BSIZE_22, // SIZE: Building size.
  1350. NULL, // Preferred exit cell list.
  1351. (short const *)List0011, // OCCUPYLIST: List of active foundation squares.
  1352. (short const *)List1100 // OVERLAPLIST:List of overlap cell offset.
  1353. );
  1354. static BuildingTypeClass const ClassV03(
  1355. STRUCT_V03,
  1356. TXT_CIV3, // NAME: Short name of the structure.
  1357. "V03", // NAME: Short name of the structure.
  1358. FACING_S, // Foundation direction from center of building.
  1359. XYP_COORD(0,0), // Exit point for produced units.
  1360. REMAP_ALTERNATE, // Sidebar remap logic.
  1361. 0x0000, // Vertical offset.
  1362. 0x0000, // Primary weapon offset along turret centerline.
  1363. 0x0000, // Primary weapon lateral offset along turret centerline.
  1364. false, // Is this building a fake (decoy?)
  1365. true, // Animation rate is regulated for constant speed?
  1366. true, // Always use the given name for the building?
  1367. false, // Is this a wall type structure?
  1368. true, // Simple (one frame) damage imagery?
  1369. true, // Is it invisible to radar?
  1370. true, // Can the player select this?
  1371. true, // Is this a legal target for attack or move?
  1372. true, // Is this an insignificant building?
  1373. true, // Theater specific graphic image?
  1374. false, // Does it have a rotating turret?
  1375. false, // Can the building be color remapped to indicate owner?
  1376. RTTI_NONE, // The object type produced at this factory.
  1377. DIR_N, // Starting idle frame to match construction.
  1378. BSIZE_22, // SIZE: Building size.
  1379. NULL, // Preferred exit cell list.
  1380. (short const *)List0111, // OCCUPYLIST: List of active foundation squares.
  1381. (short const *)List1000 // OVERLAPLIST:List of overlap cell offset.
  1382. );
  1383. static BuildingTypeClass const ClassV04(
  1384. STRUCT_V04,
  1385. TXT_CIV4, // NAME: Short name of the structure.
  1386. "V04", // NAME: Short name of the structure.
  1387. FACING_S, // Foundation direction from center of building.
  1388. XYP_COORD(0,0), // Exit point for produced units.
  1389. REMAP_ALTERNATE, // Sidebar remap logic.
  1390. 0x0000, // Vertical offset.
  1391. 0x0000, // Primary weapon offset along turret centerline.
  1392. 0x0000, // Primary weapon lateral offset along turret centerline.
  1393. false, // Is this building a fake (decoy?)
  1394. true, // Animation rate is regulated for constant speed?
  1395. true, // Always use the given name for the building?
  1396. false, // Is this a wall type structure?
  1397. true, // Simple (one frame) damage imagery?
  1398. true, // Is it invisible to radar?
  1399. true, // Can the player select this?
  1400. true, // Is this a legal target for attack or move?
  1401. true, // Is this an insignificant building?
  1402. true, // Theater specific graphic image?
  1403. false, // Does it have a rotating turret?
  1404. false, // Can the building be color remapped to indicate owner?
  1405. RTTI_NONE, // The object type produced at this factory.
  1406. DIR_N, // Starting idle frame to match construction.
  1407. BSIZE_22, // SIZE: Building size.
  1408. NULL, // Preferred exit cell list.
  1409. (short const *)List0011, // OCCUPYLIST: List of active foundation squares.
  1410. (short const *)List1100 // OVERLAPLIST:List of overlap cell offset.
  1411. );
  1412. static BuildingTypeClass const ClassV05(
  1413. STRUCT_V05,
  1414. TXT_CIV5, // NAME: Short name of the structure.
  1415. "V05", // NAME: Short name of the structure.
  1416. FACING_NONE, // Foundation direction from center of building.
  1417. XYP_COORD(0,0), // Exit point for produced units.
  1418. REMAP_ALTERNATE, // Sidebar remap logic.
  1419. 0x0000, // Vertical offset.
  1420. 0x0000, // Primary weapon offset along turret centerline.
  1421. 0x0000, // Primary weapon lateral offset along turret centerline.
  1422. false, // Is this building a fake (decoy?)
  1423. true, // Animation rate is regulated for constant speed?
  1424. true, // Always use the given name for the building?
  1425. false, // Is this a wall type structure?
  1426. true, // Simple (one frame) damage imagery?
  1427. true, // Is it invisible to radar?
  1428. true, // Can the player select this?
  1429. true, // Is this a legal target for attack or move?
  1430. true, // Is this an insignificant building?
  1431. true, // Theater specific graphic image?
  1432. false, // Does it have a rotating turret?
  1433. false, // Can the building be color remapped to indicate owner?
  1434. RTTI_NONE, // The object type produced at this factory.
  1435. DIR_N, // Starting idle frame to match construction.
  1436. BSIZE_21, // SIZE: Building size.
  1437. NULL, // Preferred exit cell list.
  1438. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  1439. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1440. );
  1441. static BuildingTypeClass const ClassV06(
  1442. STRUCT_V06,
  1443. TXT_CIV6, // NAME: Short name of the structure.
  1444. "V06", // NAME: Short name of the structure.
  1445. FACING_NONE, // Foundation direction from center of building.
  1446. XYP_COORD(0,0), // Exit point for produced units.
  1447. REMAP_ALTERNATE, // Sidebar remap logic.
  1448. 0x0000, // Vertical offset.
  1449. 0x0000, // Primary weapon offset along turret centerline.
  1450. 0x0000, // Primary weapon lateral offset along turret centerline.
  1451. false, // Is this building a fake (decoy?)
  1452. true, // Animation rate is regulated for constant speed?
  1453. true, // Always use the given name for the building?
  1454. false, // Is this a wall type structure?
  1455. true, // Simple (one frame) damage imagery?
  1456. true, // Is it invisible to radar?
  1457. true, // Can the player select this?
  1458. true, // Is this a legal target for attack or move?
  1459. true, // Is this an insignificant building?
  1460. true, // Theater specific graphic image?
  1461. false, // Does it have a rotating turret?
  1462. false, // Can the building be color remapped to indicate owner?
  1463. RTTI_NONE, // The object type produced at this factory.
  1464. DIR_N, // Starting idle frame to match construction.
  1465. BSIZE_21, // SIZE: Building size.
  1466. NULL, // Preferred exit cell list.
  1467. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  1468. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1469. );
  1470. static BuildingTypeClass const ClassV07(
  1471. STRUCT_V07,
  1472. TXT_CIV7, // NAME: Short name of the structure.
  1473. "V07", // NAME: Short name of the structure.
  1474. FACING_NONE, // Foundation direction from center of building.
  1475. XYP_COORD(0,0), // Exit point for produced units.
  1476. REMAP_ALTERNATE, // Sidebar remap logic.
  1477. 0x0000, // Vertical offset.
  1478. 0x0000, // Primary weapon offset along turret centerline.
  1479. 0x0000, // Primary weapon lateral offset along turret centerline.
  1480. false, // Is this building a fake (decoy?)
  1481. true, // Animation rate is regulated for constant speed?
  1482. true, // Always use the given name for the building?
  1483. false, // Is this a wall type structure?
  1484. true, // Simple (one frame) damage imagery?
  1485. true, // Is it invisible to radar?
  1486. true, // Can the player select this?
  1487. true, // Is this a legal target for attack or move?
  1488. true, // Is this an insignificant building?
  1489. true, // Theater specific graphic image?
  1490. false, // Does it have a rotating turret?
  1491. false, // Can the building be color remapped to indicate owner?
  1492. RTTI_NONE, // The object type produced at this factory.
  1493. DIR_N, // Starting idle frame to match construction.
  1494. BSIZE_21, // SIZE: Building size.
  1495. NULL, // Preferred exit cell list.
  1496. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  1497. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1498. );
  1499. static BuildingTypeClass const ClassV08(
  1500. STRUCT_V08,
  1501. TXT_CIV8, // NAME: Short name of the structure.
  1502. "V08", // NAME: Short name of the structure.
  1503. FACING_NONE, // Foundation direction from center of building.
  1504. XYP_COORD(0,0), // Exit point for produced units.
  1505. REMAP_ALTERNATE, // Sidebar remap logic.
  1506. 0x0000, // Vertical offset.
  1507. 0x0000, // Primary weapon offset along turret centerline.
  1508. 0x0000, // Primary weapon lateral offset along turret centerline.
  1509. false, // Is this building a fake (decoy?)
  1510. true, // Animation rate is regulated for constant speed?
  1511. true, // Always use the given name for the building?
  1512. false, // Is this a wall type structure?
  1513. true, // Simple (one frame) damage imagery?
  1514. true, // Is it invisible to radar?
  1515. true, // Can the player select this?
  1516. true, // Is this a legal target for attack or move?
  1517. true, // Is this an insignificant building?
  1518. true, // Theater specific graphic image?
  1519. false, // Does it have a rotating turret?
  1520. false, // Can the building be color remapped to indicate owner?
  1521. RTTI_NONE, // The object type produced at this factory.
  1522. DIR_N, // Starting idle frame to match construction.
  1523. BSIZE_11, // SIZE: Building size.
  1524. NULL, // Preferred exit cell list.
  1525. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1526. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1527. );
  1528. static BuildingTypeClass const ClassV09(
  1529. STRUCT_V09,
  1530. TXT_CIV9, // NAME: Short name of the structure.
  1531. "V09", // NAME: Short name of the structure.
  1532. FACING_NONE, // Foundation direction from center of building.
  1533. XYP_COORD(0,0), // Exit point for produced units.
  1534. REMAP_ALTERNATE, // Sidebar remap logic.
  1535. 0x0000, // Vertical offset.
  1536. 0x0000, // Primary weapon offset along turret centerline.
  1537. 0x0000, // Primary weapon lateral offset along turret centerline.
  1538. false, // Is this building a fake (decoy?)
  1539. true, // Animation rate is regulated for constant speed?
  1540. true, // Always use the given name for the building?
  1541. false, // Is this a wall type structure?
  1542. true, // Simple (one frame) damage imagery?
  1543. true, // Is it invisible to radar?
  1544. true, // Can the player select this?
  1545. true, // Is this a legal target for attack or move?
  1546. true, // Is this an insignificant building?
  1547. true, // Theater specific graphic image?
  1548. false, // Does it have a rotating turret?
  1549. false, // Can the building be color remapped to indicate owner?
  1550. RTTI_NONE, // The object type produced at this factory.
  1551. DIR_N, // Starting idle frame to match construction.
  1552. BSIZE_11, // SIZE: Building size.
  1553. NULL, // Preferred exit cell list.
  1554. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1555. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1556. );
  1557. static BuildingTypeClass const ClassV10(
  1558. STRUCT_V10,
  1559. TXT_CIV10, // NAME: Short name of the structure.
  1560. "V10", // NAME: Short name of the structure.
  1561. FACING_NONE, // Foundation direction from center of building.
  1562. XYP_COORD(0,0), // Exit point for produced units.
  1563. REMAP_ALTERNATE, // Sidebar remap logic.
  1564. 0x0000, // Vertical offset.
  1565. 0x0000, // Primary weapon offset along turret centerline.
  1566. 0x0000, // Primary weapon lateral offset along turret centerline.
  1567. false, // Is this building a fake (decoy?)
  1568. true, // Animation rate is regulated for constant speed?
  1569. true, // Always use the given name for the building?
  1570. false, // Is this a wall type structure?
  1571. true, // Simple (one frame) damage imagery?
  1572. true, // Is it invisible to radar?
  1573. true, // Can the player select this?
  1574. true, // Is this a legal target for attack or move?
  1575. true, // Is this an insignificant building?
  1576. true, // Theater specific graphic image?
  1577. false, // Does it have a rotating turret?
  1578. false, // Can the building be color remapped to indicate owner?
  1579. RTTI_NONE, // The object type produced at this factory.
  1580. DIR_N, // Starting idle frame to match construction.
  1581. BSIZE_11, // SIZE: Building size.
  1582. NULL, // Preferred exit cell list.
  1583. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1584. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1585. );
  1586. static BuildingTypeClass const ClassV11(
  1587. STRUCT_V11,
  1588. TXT_CIV11, // NAME: Short name of the structure.
  1589. "V11", // NAME: Short name of the structure.
  1590. FACING_NONE, // Foundation direction from center of building.
  1591. XYP_COORD(0,0), // Exit point for produced units.
  1592. REMAP_ALTERNATE, // Sidebar remap logic.
  1593. 0x0000, // Vertical offset.
  1594. 0x0000, // Primary weapon offset along turret centerline.
  1595. 0x0000, // Primary weapon lateral offset along turret centerline.
  1596. false, // Is this building a fake (decoy?)
  1597. true, // Animation rate is regulated for constant speed?
  1598. true, // Always use the given name for the building?
  1599. false, // Is this a wall type structure?
  1600. true, // Simple (one frame) damage imagery?
  1601. true, // Is it invisible to radar?
  1602. true, // Can the player select this?
  1603. true, // Is this a legal target for attack or move?
  1604. true, // Is this an insignificant building?
  1605. true, // Theater specific graphic image?
  1606. false, // Does it have a rotating turret?
  1607. false, // Can the building be color remapped to indicate owner?
  1608. RTTI_NONE, // The object type produced at this factory.
  1609. DIR_N, // Starting idle frame to match construction.
  1610. BSIZE_11, // SIZE: Building size.
  1611. NULL, // Preferred exit cell list.
  1612. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1613. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1614. );
  1615. static BuildingTypeClass const ClassV12(
  1616. STRUCT_V12,
  1617. TXT_CIV12, // NAME: Short name of the structure.
  1618. "V12", // NAME: Short name of the structure.
  1619. FACING_NONE, // Foundation direction from center of building.
  1620. XYP_COORD(0,0), // Exit point for produced units.
  1621. REMAP_ALTERNATE, // Sidebar remap logic.
  1622. 0x0000, // Vertical offset.
  1623. 0x0000, // Primary weapon offset along turret centerline.
  1624. 0x0000, // Primary weapon lateral offset along turret centerline.
  1625. false, // Is this building a fake (decoy?)
  1626. true, // Animation rate is regulated for constant speed?
  1627. true, // Always use the given name for the building?
  1628. false, // Is this a wall type structure?
  1629. true, // Simple (one frame) damage imagery?
  1630. true, // Is it invisible to radar?
  1631. true, // Can the player select this?
  1632. true, // Is this a legal target for attack or move?
  1633. true, // Is this an insignificant building?
  1634. true, // Theater specific graphic image?
  1635. false, // Does it have a rotating turret?
  1636. false, // Can the building be color remapped to indicate owner?
  1637. RTTI_NONE, // The object type produced at this factory.
  1638. DIR_N, // Starting idle frame to match construction.
  1639. BSIZE_11, // SIZE: Building size.
  1640. NULL, // Preferred exit cell list.
  1641. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1642. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1643. );
  1644. static BuildingTypeClass const ClassV13(
  1645. STRUCT_V13,
  1646. TXT_CIV13, // NAME: Short name of the structure.
  1647. "V13", // NAME: Short name of the structure.
  1648. FACING_NONE, // Foundation direction from center of building.
  1649. XYP_COORD(0,0), // Exit point for produced units.
  1650. REMAP_ALTERNATE, // Sidebar remap logic.
  1651. 0x0000, // Vertical offset.
  1652. 0x0000, // Primary weapon offset along turret centerline.
  1653. 0x0000, // Primary weapon lateral offset along turret centerline.
  1654. false, // Is this building a fake (decoy?)
  1655. true, // Animation rate is regulated for constant speed?
  1656. true, // Always use the given name for the building?
  1657. false, // Is this a wall type structure?
  1658. true, // Simple (one frame) damage imagery?
  1659. true, // Is it invisible to radar?
  1660. true, // Can the player select this?
  1661. true, // Is this a legal target for attack or move?
  1662. true, // Is this an insignificant building?
  1663. true, // Theater specific graphic image?
  1664. false, // Does it have a rotating turret?
  1665. false, // Can the building be color remapped to indicate owner?
  1666. RTTI_NONE, // The object type produced at this factory.
  1667. DIR_N, // Starting idle frame to match construction.
  1668. BSIZE_11, // SIZE: Building size.
  1669. NULL, // Preferred exit cell list.
  1670. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1671. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1672. );
  1673. static BuildingTypeClass const ClassV14(
  1674. STRUCT_V14,
  1675. TXT_CIV14, // NAME: Short name of the structure.
  1676. "V14", // NAME: Short name of the structure.
  1677. FACING_NONE, // Foundation direction from center of building.
  1678. XYP_COORD(0,0), // Exit point for produced units.
  1679. REMAP_ALTERNATE, // Sidebar remap logic.
  1680. 0x0000, // Vertical offset.
  1681. 0x0000, // Primary weapon offset along turret centerline.
  1682. 0x0000, // Primary weapon lateral offset along turret centerline.
  1683. false, // Is this building a fake (decoy?)
  1684. true, // Animation rate is regulated for constant speed?
  1685. true, // Always use the given name for the building?
  1686. false, // Is this a wall type structure?
  1687. true, // Simple (one frame) damage imagery?
  1688. true, // Is it invisible to radar?
  1689. true, // Can the player select this?
  1690. true, // Is this a legal target for attack or move?
  1691. true, // Is this an insignificant building?
  1692. true, // Theater specific graphic image?
  1693. false, // Does it have a rotating turret?
  1694. false, // Can the building be color remapped to indicate owner?
  1695. RTTI_NONE, // The object type produced at this factory.
  1696. DIR_N, // Starting idle frame to match construction.
  1697. BSIZE_11, // SIZE: Building size.
  1698. NULL, // Preferred exit cell list.
  1699. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1700. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1701. );
  1702. static BuildingTypeClass const ClassV15(
  1703. STRUCT_V15,
  1704. TXT_CIV15, // NAME: Short name of the structure.
  1705. "V15", // NAME: Short name of the structure.
  1706. FACING_NONE, // Foundation direction from center of building.
  1707. XYP_COORD(0,0), // Exit point for produced units.
  1708. REMAP_ALTERNATE, // Sidebar remap logic.
  1709. 0x0000, // Vertical offset.
  1710. 0x0000, // Primary weapon offset along turret centerline.
  1711. 0x0000, // Primary weapon lateral offset along turret centerline.
  1712. false, // Is this building a fake (decoy?)
  1713. true, // Animation rate is regulated for constant speed?
  1714. true, // Always use the given name for the building?
  1715. false, // Is this a wall type structure?
  1716. true, // Simple (one frame) damage imagery?
  1717. true, // Is it invisible to radar?
  1718. true, // Can the player select this?
  1719. true, // Is this a legal target for attack or move?
  1720. true, // Is this an insignificant building?
  1721. true, // Theater specific graphic image?
  1722. false, // Does it have a rotating turret?
  1723. false, // Can the building be color remapped to indicate owner?
  1724. RTTI_NONE, // The object type produced at this factory.
  1725. DIR_N, // Starting idle frame to match construction.
  1726. BSIZE_11, // SIZE: Building size.
  1727. NULL, // Preferred exit cell list.
  1728. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1729. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1730. );
  1731. static BuildingTypeClass const ClassV16(
  1732. STRUCT_V16,
  1733. TXT_CIV16, // NAME: Short name of the structure.
  1734. "V16", // NAME: Short name of the structure.
  1735. FACING_NONE, // Foundation direction from center of building.
  1736. XYP_COORD(0,0), // Exit point for produced units.
  1737. REMAP_ALTERNATE, // Sidebar remap logic.
  1738. 0x0000, // Vertical offset.
  1739. 0x0000, // Primary weapon offset along turret centerline.
  1740. 0x0000, // Primary weapon lateral offset along turret centerline.
  1741. false, // Is this building a fake (decoy?)
  1742. true, // Animation rate is regulated for constant speed?
  1743. true, // Always use the given name for the building?
  1744. false, // Is this a wall type structure?
  1745. true, // Simple (one frame) damage imagery?
  1746. true, // Is it invisible to radar?
  1747. true, // Can the player select this?
  1748. true, // Is this a legal target for attack or move?
  1749. true, // Is this an insignificant building?
  1750. true, // Theater specific graphic image?
  1751. false, // Does it have a rotating turret?
  1752. false, // Can the building be color remapped to indicate owner?
  1753. RTTI_NONE, // The object type produced at this factory.
  1754. DIR_N, // Starting idle frame to match construction.
  1755. BSIZE_11, // SIZE: Building size.
  1756. NULL, // Preferred exit cell list.
  1757. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1758. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1759. );
  1760. static BuildingTypeClass const ClassV17(
  1761. STRUCT_V17,
  1762. TXT_CIV17, // NAME: Short name of the structure.
  1763. "V17", // NAME: Short name of the structure.
  1764. FACING_NONE, // Foundation direction from center of building.
  1765. XYP_COORD(0,0), // Exit point for produced units.
  1766. REMAP_ALTERNATE, // Sidebar remap logic.
  1767. 0x0000, // Vertical offset.
  1768. 0x0000, // Primary weapon offset along turret centerline.
  1769. 0x0000, // Primary weapon lateral offset along turret centerline.
  1770. false, // Is this building a fake (decoy?)
  1771. true, // Animation rate is regulated for constant speed?
  1772. true, // Always use the given name for the building?
  1773. false, // Is this a wall type structure?
  1774. true, // Simple (one frame) damage imagery?
  1775. true, // Is it invisible to radar?
  1776. true, // Can the player select this?
  1777. true, // Is this a legal target for attack or move?
  1778. true, // Is this an insignificant building?
  1779. true, // Theater specific graphic image?
  1780. false, // Does it have a rotating turret?
  1781. false, // Can the building be color remapped to indicate owner?
  1782. RTTI_NONE, // The object type produced at this factory.
  1783. DIR_N, // Starting idle frame to match construction.
  1784. BSIZE_11, // SIZE: Building size.
  1785. NULL, // Preferred exit cell list.
  1786. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1787. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1788. );
  1789. static BuildingTypeClass const ClassV18(
  1790. STRUCT_V18,
  1791. TXT_CIV18, // NAME: Short name of the structure.
  1792. "V18", // NAME: Short name of the structure.
  1793. FACING_NONE, // Foundation direction from center of building.
  1794. XYP_COORD(0,0), // Exit point for produced units.
  1795. REMAP_ALTERNATE, // Sidebar remap logic.
  1796. 0x0000, // Vertical offset.
  1797. 0x0000, // Primary weapon offset along turret centerline.
  1798. 0x0000, // Primary weapon lateral offset along turret centerline.
  1799. false, // Is this building a fake (decoy?)
  1800. true, // Animation rate is regulated for constant speed?
  1801. true, // Always use the given name for the building?
  1802. false, // Is this a wall type structure?
  1803. true, // Simple (one frame) damage imagery?
  1804. true, // Is it invisible to radar?
  1805. true, // Can the player select this?
  1806. true, // Is this a legal target for attack or move?
  1807. true, // Is this an insignificant building?
  1808. true, // Theater specific graphic image?
  1809. false, // Does it have a rotating turret?
  1810. false, // Can the building be color remapped to indicate owner?
  1811. RTTI_NONE, // The object type produced at this factory.
  1812. DIR_N, // Starting idle frame to match construction.
  1813. BSIZE_11, // SIZE: Building size.
  1814. NULL, // Preferred exit cell list.
  1815. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1816. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1817. );
  1818. static BuildingTypeClass const ClassV19(
  1819. STRUCT_PUMP,
  1820. TXT_PUMP, // NAME: Short name of the structure.
  1821. "V19", // NAME: Short name of the structure.
  1822. FACING_NONE, // Foundation direction from center of building.
  1823. XYP_COORD(0,0), // Exit point for produced units.
  1824. REMAP_ALTERNATE, // Sidebar remap logic.
  1825. 0x0000, // Vertical offset.
  1826. 0x0000, // Primary weapon offset along turret centerline.
  1827. 0x0000, // Primary weapon lateral offset along turret centerline.
  1828. false, // Is this building a fake (decoy?)
  1829. true, // Animation rate is regulated for constant speed?
  1830. true, // Always use the given name for the building?
  1831. false, // Is this a wall type structure?
  1832. false, // Simple (one frame) damage imagery?
  1833. false, // Is it invisible to radar?
  1834. true, // Can the player select this?
  1835. true, // Is this a legal target for attack or move?
  1836. false, // Is this an insignificant building?
  1837. false, // Theater specific graphic image?
  1838. false, // Does it have a rotating turret?
  1839. false, // Can the building be color remapped to indicate owner?
  1840. RTTI_NONE, // The object type produced at this factory.
  1841. DIR_N, // Starting idle frame to match construction.
  1842. BSIZE_11, // SIZE: Building size.
  1843. NULL, // Preferred exit cell list.
  1844. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1845. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1846. );
  1847. static BuildingTypeClass const ClassV20(
  1848. STRUCT_V20,
  1849. TXT_CIV20, // NAME: Short name of the structure.
  1850. "V20", // NAME: Short name of the structure.
  1851. FACING_S, // Foundation direction from center of building.
  1852. XYP_COORD(0,0), // Exit point for produced units.
  1853. REMAP_ALTERNATE, // Sidebar remap logic.
  1854. 0x0000, // Vertical offset.
  1855. 0x0000, // Primary weapon offset along turret centerline.
  1856. 0x0000, // Primary weapon lateral offset along turret centerline.
  1857. false, // Is this building a fake (decoy?)
  1858. true, // Animation rate is regulated for constant speed?
  1859. true, // Always use the given name for the building?
  1860. false, // Is this a wall type structure?
  1861. false, // Simple (one frame) damage imagery?
  1862. false, // Is it invisible to radar?
  1863. true, // Can the player select this?
  1864. true, // Is this a legal target for attack or move?
  1865. false, // Is this an insignificant building?
  1866. true, // Theater specific graphic image?
  1867. false, // Does it have a rotating turret?
  1868. false, // Can the building be color remapped to indicate owner?
  1869. RTTI_NONE, // The object type produced at this factory.
  1870. DIR_N, // Starting idle frame to match construction.
  1871. BSIZE_22, // SIZE: Building size.
  1872. NULL, // Preferred exit cell list.
  1873. (short const *)List0011, // OCCUPYLIST: List of active foundation squares.
  1874. (short const *)List1100 // OVERLAPLIST:List of overlap cell offset.
  1875. );
  1876. static BuildingTypeClass const ClassV21(
  1877. STRUCT_V21,
  1878. TXT_CIV21, // NAME: Short name of the structure.
  1879. "V21", // NAME: Short name of the structure.
  1880. FACING_NONE, // Foundation direction from center of building.
  1881. XYP_COORD(0,0), // Exit point for produced units.
  1882. REMAP_ALTERNATE, // Sidebar remap logic.
  1883. 0x0000, // Vertical offset.
  1884. 0x0000, // Primary weapon offset along turret centerline.
  1885. 0x0000, // Primary weapon lateral offset along turret centerline.
  1886. false, // Is this building a fake (decoy?)
  1887. true, // Animation rate is regulated for constant speed?
  1888. true, // Always use the given name for the building?
  1889. false, // Is this a wall type structure?
  1890. false, // Simple (one frame) damage imagery?
  1891. false, // Is it invisible to radar?
  1892. true, // Can the player select this?
  1893. true, // Is this a legal target for attack or move?
  1894. false, // Is this an insignificant building?
  1895. true, // Theater specific graphic image?
  1896. false, // Does it have a rotating turret?
  1897. false, // Can the building be color remapped to indicate owner?
  1898. RTTI_NONE, // The object type produced at this factory.
  1899. DIR_N, // Starting idle frame to match construction.
  1900. BSIZE_22, // SIZE: Building size.
  1901. NULL, // Preferred exit cell list.
  1902. (short const *)List1101, // OCCUPYLIST: List of active foundation squares.
  1903. (short const *)List0010 // OVERLAPLIST:List of overlap cell offset.
  1904. );
  1905. static BuildingTypeClass const ClassV22(
  1906. STRUCT_V22,
  1907. TXT_CIV22, // NAME: Short name of the structure.
  1908. "V22", // NAME: Short name of the structure.
  1909. FACING_NONE, // Foundation direction from center of building.
  1910. XYP_COORD(0,0), // Exit point for produced units.
  1911. REMAP_ALTERNATE, // Sidebar remap logic.
  1912. 0x0000, // Vertical offset.
  1913. 0x0000, // Primary weapon offset along turret centerline.
  1914. 0x0000, // Primary weapon lateral offset along turret centerline.
  1915. false, // Is this building a fake (decoy?)
  1916. true, // Animation rate is regulated for constant speed?
  1917. true, // Always use the given name for the building?
  1918. false, // Is this a wall type structure?
  1919. false, // Simple (one frame) damage imagery?
  1920. false, // Is it invisible to radar?
  1921. true, // Can the player select this?
  1922. true, // Is this a legal target for attack or move?
  1923. false, // Is this an insignificant building?
  1924. true, // Theater specific graphic image?
  1925. false, // Does it have a rotating turret?
  1926. false, // Can the building be color remapped to indicate owner?
  1927. RTTI_NONE, // The object type produced at this factory.
  1928. DIR_N, // Starting idle frame to match construction.
  1929. BSIZE_21, // SIZE: Building size.
  1930. NULL, // Preferred exit cell list.
  1931. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  1932. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1933. );
  1934. static BuildingTypeClass const ClassV23(
  1935. STRUCT_V23,
  1936. TXT_CIV23, // NAME: Short name of the structure.
  1937. "V23", // NAME: Short name of the structure.
  1938. FACING_NONE, // Foundation direction from center of building.
  1939. XYP_COORD(0,0), // Exit point for produced units.
  1940. REMAP_ALTERNATE, // Sidebar remap logic.
  1941. 0x0000, // Vertical offset.
  1942. 0x0000, // Primary weapon offset along turret centerline.
  1943. 0x0000, // Primary weapon lateral offset along turret centerline.
  1944. false, // Is this building a fake (decoy?)
  1945. true, // Animation rate is regulated for constant speed?
  1946. true, // Always use the given name for the building?
  1947. false, // Is this a wall type structure?
  1948. false, // Simple (one frame) damage imagery?
  1949. false, // Is it invisible to radar?
  1950. true, // Can the player select this?
  1951. true, // Is this a legal target for attack or move?
  1952. false, // Is this an insignificant building?
  1953. true, // Theater specific graphic image?
  1954. false, // Does it have a rotating turret?
  1955. false, // Can the building be color remapped to indicate owner?
  1956. RTTI_NONE, // The object type produced at this factory.
  1957. DIR_N, // Starting idle frame to match construction.
  1958. BSIZE_11, // SIZE: Building size.
  1959. NULL, // Preferred exit cell list.
  1960. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  1961. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  1962. );
  1963. static BuildingTypeClass const ClassV24(
  1964. STRUCT_V24,
  1965. TXT_CIV24, // NAME: Short name of the structure.
  1966. "V24", // NAME: Short name of the structure.
  1967. FACING_S, // Foundation direction from center of building.
  1968. XYP_COORD(0,0), // Exit point for produced units.
  1969. REMAP_ALTERNATE, // Sidebar remap logic.
  1970. 0x0000, // Vertical offset.
  1971. 0x0000, // Primary weapon offset along turret centerline.
  1972. 0x0000, // Primary weapon lateral offset along turret centerline.
  1973. false, // Is this building a fake (decoy?)
  1974. true, // Animation rate is regulated for constant speed?
  1975. true, // Always use the given name for the building?
  1976. false, // Is this a wall type structure?
  1977. true, // Simple (one frame) damage imagery?
  1978. false, // Is it invisible to radar?
  1979. true, // Can the player select this?
  1980. true, // Is this a legal target for attack or move?
  1981. false, // Is this an insignificant building?
  1982. true, // Theater specific graphic image?
  1983. false, // Does it have a rotating turret?
  1984. false, // Can the building be color remapped to indicate owner?
  1985. RTTI_NONE, // The object type produced at this factory.
  1986. DIR_N, // Starting idle frame to match construction.
  1987. BSIZE_22, // SIZE: Building size.
  1988. NULL, // Preferred exit cell list.
  1989. (short const *)List0011, // OCCUPYLIST: List of active foundation squares.
  1990. (short const *)List1100 // OVERLAPLIST:List of overlap cell offset.
  1991. );
  1992. static BuildingTypeClass const ClassV25(
  1993. STRUCT_V25,
  1994. TXT_CIV25, // NAME: Short name of the structure.
  1995. "V25", // NAME: Short name of the structure.
  1996. FACING_S, // Foundation direction from center of building.
  1997. XYP_COORD(0,0), // Exit point for produced units.
  1998. REMAP_ALTERNATE, // Sidebar remap logic.
  1999. 0x0000, // Vertical offset.
  2000. 0x0000, // Primary weapon offset along turret centerline.
  2001. 0x0000, // Primary weapon lateral offset along turret centerline.
  2002. false, // Is this building a fake (decoy?)
  2003. true, // Animation rate is regulated for constant speed?
  2004. true, // Always use the given name for the building?
  2005. false, // Is this a wall type structure?
  2006. true, // Simple (one frame) damage imagery?
  2007. false, // Is it invisible to radar?
  2008. true, // Can the player select this?
  2009. true, // Is this a legal target for attack or move?
  2010. false, // Is this an insignificant building?
  2011. true, // Theater specific graphic image?
  2012. false, // Does it have a rotating turret?
  2013. false, // Can the building be color remapped to indicate owner?
  2014. RTTI_NONE, // The object type produced at this factory.
  2015. DIR_N, // Starting idle frame to match construction.
  2016. BSIZE_22, // SIZE: Building size.
  2017. NULL, // Preferred exit cell list.
  2018. (short const *)List0111, // OCCUPYLIST: List of active foundation squares.
  2019. (short const *)List1000 // OVERLAPLIST:List of overlap cell offset.
  2020. );
  2021. static BuildingTypeClass const ClassV26(
  2022. STRUCT_V26,
  2023. TXT_CIV26, // NAME: Short name of the structure.
  2024. "V26", // NAME: Short name of the structure.
  2025. FACING_NONE, // Foundation direction from center of building.
  2026. XYP_COORD(0,0), // Exit point for produced units.
  2027. REMAP_ALTERNATE, // Sidebar remap logic.
  2028. 0x0000, // Vertical offset.
  2029. 0x0000, // Primary weapon offset along turret centerline.
  2030. 0x0000, // Primary weapon lateral offset along turret centerline.
  2031. false, // Is this building a fake (decoy?)
  2032. true, // Animation rate is regulated for constant speed?
  2033. true, // Always use the given name for the building?
  2034. false, // Is this a wall type structure?
  2035. true, // Simple (one frame) damage imagery?
  2036. false, // Is it invisible to radar?
  2037. true, // Can the player select this?
  2038. true, // Is this a legal target for attack or move?
  2039. false, // Is this an insignificant building?
  2040. true, // Theater specific graphic image?
  2041. false, // Does it have a rotating turret?
  2042. false, // Can the building be color remapped to indicate owner?
  2043. RTTI_NONE, // The object type produced at this factory.
  2044. DIR_N, // Starting idle frame to match construction.
  2045. BSIZE_21, // SIZE: Building size.
  2046. NULL, // Preferred exit cell list.
  2047. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  2048. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2049. );
  2050. static BuildingTypeClass const ClassV27(
  2051. STRUCT_V27,
  2052. TXT_CIV27, // NAME: Short name of the structure.
  2053. "V27", // NAME: Short name of the structure.
  2054. FACING_NONE, // Foundation direction from center of building.
  2055. XYP_COORD(0,0), // Exit point for produced units.
  2056. REMAP_ALTERNATE, // Sidebar remap logic.
  2057. 0x0000, // Vertical offset.
  2058. 0x0000, // Primary weapon offset along turret centerline.
  2059. 0x0000, // Primary weapon lateral offset along turret centerline.
  2060. false, // Is this building a fake (decoy?)
  2061. true, // Animation rate is regulated for constant speed?
  2062. true, // Always use the given name for the building?
  2063. false, // Is this a wall type structure?
  2064. true, // Simple (one frame) damage imagery?
  2065. false, // Is it invisible to radar?
  2066. true, // Can the player select this?
  2067. true, // Is this a legal target for attack or move?
  2068. false, // Is this an insignificant building?
  2069. true, // Theater specific graphic image?
  2070. false, // Does it have a rotating turret?
  2071. false, // Can the building be color remapped to indicate owner?
  2072. RTTI_NONE, // The object type produced at this factory.
  2073. DIR_N, // Starting idle frame to match construction.
  2074. BSIZE_11, // SIZE: Building size.
  2075. NULL, // Preferred exit cell list.
  2076. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2077. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2078. );
  2079. static BuildingTypeClass const ClassV28(
  2080. STRUCT_V28,
  2081. TXT_CIV28, // NAME: Short name of the structure.
  2082. "V28", // NAME: Short name of the structure.
  2083. FACING_NONE, // Foundation direction from center of building.
  2084. XYP_COORD(0,0), // Exit point for produced units.
  2085. REMAP_ALTERNATE, // Sidebar remap logic.
  2086. 0x0000, // Vertical offset.
  2087. 0x0000, // Primary weapon offset along turret centerline.
  2088. 0x0000, // Primary weapon lateral offset along turret centerline.
  2089. false, // Is this building a fake (decoy?)
  2090. true, // Animation rate is regulated for constant speed?
  2091. true, // Always use the given name for the building?
  2092. false, // Is this a wall type structure?
  2093. true, // Simple (one frame) damage imagery?
  2094. false, // Is it invisible to radar?
  2095. true, // Can the player select this?
  2096. true, // Is this a legal target for attack or move?
  2097. false, // Is this an insignificant building?
  2098. true, // Theater specific graphic image?
  2099. false, // Does it have a rotating turret?
  2100. false, // Can the building be color remapped to indicate owner?
  2101. RTTI_NONE, // The object type produced at this factory.
  2102. DIR_N, // Starting idle frame to match construction.
  2103. BSIZE_11, // SIZE: Building size.
  2104. NULL, // Preferred exit cell list.
  2105. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2106. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2107. );
  2108. static BuildingTypeClass const ClassV29(
  2109. STRUCT_V29,
  2110. TXT_CIV29, // NAME: Short name of the structure.
  2111. "V29", // NAME: Short name of the structure.
  2112. FACING_NONE, // Foundation direction from center of building.
  2113. XYP_COORD(0,0), // Exit point for produced units.
  2114. REMAP_ALTERNATE, // Sidebar remap logic.
  2115. 0x0000, // Vertical offset.
  2116. 0x0000, // Primary weapon offset along turret centerline.
  2117. 0x0000, // Primary weapon lateral offset along turret centerline.
  2118. false, // Is this building a fake (decoy?)
  2119. true, // Animation rate is regulated for constant speed?
  2120. true, // Always use the given name for the building?
  2121. false, // Is this a wall type structure?
  2122. true, // Simple (one frame) damage imagery?
  2123. false, // Is it invisible to radar?
  2124. true, // Can the player select this?
  2125. true, // Is this a legal target for attack or move?
  2126. false, // Is this an insignificant building?
  2127. true, // Theater specific graphic image?
  2128. false, // Does it have a rotating turret?
  2129. false, // Can the building be color remapped to indicate owner?
  2130. RTTI_NONE, // The object type produced at this factory.
  2131. DIR_N, // Starting idle frame to match construction.
  2132. BSIZE_11, // SIZE: Building size.
  2133. NULL, // Preferred exit cell list.
  2134. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2135. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2136. );
  2137. static BuildingTypeClass const ClassV30(
  2138. STRUCT_V30,
  2139. TXT_CIV30, // NAME: Short name of the structure.
  2140. "V30", // NAME: Short name of the structure.
  2141. FACING_NONE, // Foundation direction from center of building.
  2142. XYP_COORD(0,0), // Exit point for produced units.
  2143. REMAP_ALTERNATE, // Sidebar remap logic.
  2144. 0x0000, // Vertical offset.
  2145. 0x0000, // Primary weapon offset along turret centerline.
  2146. 0x0000, // Primary weapon lateral offset along turret centerline.
  2147. false, // Is this building a fake (decoy?)
  2148. true, // Animation rate is regulated for constant speed?
  2149. true, // Always use the given name for the building?
  2150. false, // Is this a wall type structure?
  2151. true, // Simple (one frame) damage imagery?
  2152. false, // Is it invisible to radar?
  2153. true, // Can the player select this?
  2154. true, // Is this a legal target for attack or move?
  2155. false, // Is this an insignificant building?
  2156. true, // Theater specific graphic image?
  2157. false, // Does it have a rotating turret?
  2158. false, // Can the building be color remapped to indicate owner?
  2159. RTTI_NONE, // The object type produced at this factory.
  2160. DIR_N, // Starting idle frame to match construction.
  2161. BSIZE_21, // SIZE: Building size.
  2162. NULL, // Preferred exit cell list.
  2163. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  2164. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2165. );
  2166. static BuildingTypeClass const ClassV31(
  2167. STRUCT_V31,
  2168. TXT_CIV31, // NAME: Short name of the structure.
  2169. "V31", // NAME: Short name of the structure.
  2170. FACING_NONE, // Foundation direction from center of building.
  2171. XYP_COORD(0,0), // Exit point for produced units.
  2172. REMAP_ALTERNATE, // Sidebar remap logic.
  2173. 0x0000, // Vertical offset.
  2174. 0x0000, // Primary weapon offset along turret centerline.
  2175. 0x0000, // Primary weapon lateral offset along turret centerline.
  2176. false, // Is this building a fake (decoy?)
  2177. true, // Animation rate is regulated for constant speed?
  2178. true, // Always use the given name for the building?
  2179. false, // Is this a wall type structure?
  2180. true, // Simple (one frame) damage imagery?
  2181. false, // Is it invisible to radar?
  2182. true, // Can the player select this?
  2183. true, // Is this a legal target for attack or move?
  2184. false, // Is this an insignificant building?
  2185. true, // Theater specific graphic image?
  2186. false, // Does it have a rotating turret?
  2187. false, // Can the building be color remapped to indicate owner?
  2188. RTTI_NONE, // The object type produced at this factory.
  2189. DIR_N, // Starting idle frame to match construction.
  2190. BSIZE_21, // SIZE: Building size.
  2191. NULL, // Preferred exit cell list.
  2192. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  2193. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2194. );
  2195. static BuildingTypeClass const ClassV32(
  2196. STRUCT_V32,
  2197. TXT_CIV32, // NAME: Short name of the structure.
  2198. "V32", // NAME: Short name of the structure.
  2199. FACING_NONE, // Foundation direction from center of building.
  2200. XYP_COORD(0,0), // Exit point for produced units.
  2201. REMAP_ALTERNATE, // Sidebar remap logic.
  2202. 0x0000, // Vertical offset.
  2203. 0x0000, // Primary weapon offset along turret centerline.
  2204. 0x0000, // Primary weapon lateral offset along turret centerline.
  2205. false, // Is this building a fake (decoy?)
  2206. true, // Animation rate is regulated for constant speed?
  2207. true, // Always use the given name for the building?
  2208. false, // Is this a wall type structure?
  2209. true, // Simple (one frame) damage imagery?
  2210. false, // Is it invisible to radar?
  2211. true, // Can the player select this?
  2212. true, // Is this a legal target for attack or move?
  2213. false, // Is this an insignificant building?
  2214. true, // Theater specific graphic image?
  2215. false, // Does it have a rotating turret?
  2216. false, // Can the building be color remapped to indicate owner?
  2217. RTTI_NONE, // The object type produced at this factory.
  2218. DIR_N, // Starting idle frame to match construction.
  2219. BSIZE_21, // SIZE: Building size.
  2220. NULL, // Preferred exit cell list.
  2221. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  2222. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2223. );
  2224. static BuildingTypeClass const ClassV33(
  2225. STRUCT_V33,
  2226. TXT_CIV33, // NAME: Short name of the structure.
  2227. "V33", // NAME: Short name of the structure.
  2228. FACING_NONE, // Foundation direction from center of building.
  2229. XYP_COORD(0,0), // Exit point for produced units.
  2230. REMAP_ALTERNATE, // Sidebar remap logic.
  2231. 0x0000, // Vertical offset.
  2232. 0x0000, // Primary weapon offset along turret centerline.
  2233. 0x0000, // Primary weapon lateral offset along turret centerline.
  2234. false, // Is this building a fake (decoy?)
  2235. true, // Animation rate is regulated for constant speed?
  2236. true, // Always use the given name for the building?
  2237. false, // Is this a wall type structure?
  2238. true, // Simple (one frame) damage imagery?
  2239. false, // Is it invisible to radar?
  2240. true, // Can the player select this?
  2241. true, // Is this a legal target for attack or move?
  2242. false, // Is this an insignificant building?
  2243. true, // Theater specific graphic image?
  2244. false, // Does it have a rotating turret?
  2245. false, // Can the building be color remapped to indicate owner?
  2246. RTTI_NONE, // The object type produced at this factory.
  2247. DIR_N, // Starting idle frame to match construction.
  2248. BSIZE_21, // SIZE: Building size.
  2249. NULL, // Preferred exit cell list.
  2250. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  2251. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2252. );
  2253. static BuildingTypeClass const ClassV34(
  2254. STRUCT_V34,
  2255. TXT_CIV34, // NAME: Short name of the structure.
  2256. "V34", // NAME: Short name of the structure.
  2257. FACING_NONE, // Foundation direction from center of building.
  2258. XYP_COORD(0,0), // Exit point for produced units.
  2259. REMAP_ALTERNATE, // Sidebar remap logic.
  2260. 0x0000, // Vertical offset.
  2261. 0x0000, // Primary weapon offset along turret centerline.
  2262. 0x0000, // Primary weapon lateral offset along turret centerline.
  2263. false, // Is this building a fake (decoy?)
  2264. true, // Animation rate is regulated for constant speed?
  2265. true, // Always use the given name for the building?
  2266. false, // Is this a wall type structure?
  2267. true, // Simple (one frame) damage imagery?
  2268. false, // Is it invisible to radar?
  2269. true, // Can the player select this?
  2270. true, // Is this a legal target for attack or move?
  2271. false, // Is this an insignificant building?
  2272. true, // Theater specific graphic image?
  2273. false, // Does it have a rotating turret?
  2274. false, // Can the building be color remapped to indicate owner?
  2275. RTTI_NONE, // The object type produced at this factory.
  2276. DIR_N, // Starting idle frame to match construction.
  2277. BSIZE_11, // SIZE: Building size.
  2278. NULL, // Preferred exit cell list.
  2279. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2280. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2281. );
  2282. static BuildingTypeClass const ClassV35(
  2283. STRUCT_V35,
  2284. TXT_CIV35, // NAME: Short name of the structure.
  2285. "V35", // NAME: Short name of the structure.
  2286. FACING_NONE, // Foundation direction from center of building.
  2287. XYP_COORD(0,0), // Exit point for produced units.
  2288. REMAP_ALTERNATE, // Sidebar remap logic.
  2289. 0x0000, // Vertical offset.
  2290. 0x0000, // Primary weapon offset along turret centerline.
  2291. 0x0000, // Primary weapon lateral offset along turret centerline.
  2292. false, // Is this building a fake (decoy?)
  2293. true, // Animation rate is regulated for constant speed?
  2294. true, // Always use the given name for the building?
  2295. false, // Is this a wall type structure?
  2296. true, // Simple (one frame) damage imagery?
  2297. false, // Is it invisible to radar?
  2298. true, // Can the player select this?
  2299. true, // Is this a legal target for attack or move?
  2300. false, // Is this an insignificant building?
  2301. true, // Theater specific graphic image?
  2302. false, // Does it have a rotating turret?
  2303. false, // Can the building be color remapped to indicate owner?
  2304. RTTI_NONE, // The object type produced at this factory.
  2305. DIR_N, // Starting idle frame to match construction.
  2306. BSIZE_11, // SIZE: Building size.
  2307. NULL, // Preferred exit cell list.
  2308. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2309. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2310. );
  2311. static BuildingTypeClass const ClassV36(
  2312. STRUCT_V36,
  2313. TXT_CIV36, // NAME: Short name of the structure.
  2314. "V36", // NAME: Short name of the structure.
  2315. FACING_NONE, // Foundation direction from center of building.
  2316. XYP_COORD(0,0), // Exit point for produced units.
  2317. REMAP_ALTERNATE, // Sidebar remap logic.
  2318. 0x0000, // Vertical offset.
  2319. 0x0000, // Primary weapon offset along turret centerline.
  2320. 0x0000, // Primary weapon lateral offset along turret centerline.
  2321. false, // Is this building a fake (decoy?)
  2322. true, // Animation rate is regulated for constant speed?
  2323. true, // Always use the given name for the building?
  2324. false, // Is this a wall type structure?
  2325. true, // Simple (one frame) damage imagery?
  2326. false, // Is it invisible to radar?
  2327. true, // Can the player select this?
  2328. true, // Is this a legal target for attack or move?
  2329. false, // Is this an insignificant building?
  2330. true, // Theater specific graphic image?
  2331. false, // Does it have a rotating turret?
  2332. false, // Can the building be color remapped to indicate owner?
  2333. RTTI_NONE, // The object type produced at this factory.
  2334. DIR_N, // Starting idle frame to match construction.
  2335. BSIZE_11, // SIZE: Building size.
  2336. NULL, // Preferred exit cell list.
  2337. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2338. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2339. );
  2340. static BuildingTypeClass const ClassV37(
  2341. STRUCT_V37,
  2342. TXT_CIV37, // NAME: Short name of the structure.
  2343. "V37", // NAME: Short name of the structure.
  2344. FACING_NONE, // Foundation direction from center of building.
  2345. XYP_COORD(0,0), // Exit point for produced units.
  2346. REMAP_ALTERNATE, // Sidebar remap logic.
  2347. 0x0000, // Vertical offset.
  2348. 0x0000, // Primary weapon offset along turret centerline.
  2349. 0x0000, // Primary weapon lateral offset along turret centerline.
  2350. false, // Is this building a fake (decoy?)
  2351. true, // Animation rate is regulated for constant speed?
  2352. true, // Always use the given name for the building?
  2353. false, // Is this a wall type structure?
  2354. true, // Simple (one frame) damage imagery?
  2355. false, // Is it invisible to radar?
  2356. true, // Can the player select this?
  2357. true, // Is this a legal target for attack or move?
  2358. false, // Is this an insignificant building?
  2359. true, // Theater specific graphic image?
  2360. false, // Does it have a rotating turret?
  2361. false, // Can the building be color remapped to indicate owner?
  2362. RTTI_NONE, // The object type produced at this factory.
  2363. DIR_N, // Starting idle frame to match construction.
  2364. BSIZE_42, // SIZE: Building size.
  2365. NULL, // Preferred exit cell list.
  2366. (short const *)ListWestwood, // OCCUPYLIST: List of active foundation squares.
  2367. (short const *)OListWestwood // OVERLAPLIST:List of overlap cell offset.
  2368. );
  2369. static BuildingTypeClass const ClassMission(
  2370. STRUCT_MISSION,
  2371. TXT_CIVMISS, // NAME: Short name of the structure.
  2372. "MISS", // NAME: Short name of the structure.
  2373. FACING_NONE, // Foundation direction from center of building.
  2374. XYP_COORD(0,0), // Exit point for produced units.
  2375. REMAP_ALTERNATE, // Sidebar remap logic.
  2376. 0x0000, // Vertical offset.
  2377. 0x0000, // Primary weapon offset along turret centerline.
  2378. 0x0000, // Primary weapon lateral offset along turret centerline.
  2379. false, // Is this building a fake (decoy?)
  2380. true, // Animation rate is regulated for constant speed?
  2381. true, // Always use the given name for the building?
  2382. false, // Is this a wall type structure?
  2383. true, // Simple (one frame) damage imagery?
  2384. false, // Is it invisible to radar?
  2385. true, // Can the player select this?
  2386. true, // Is this a legal target for attack or move?
  2387. false, // Is this an insignificant building?
  2388. false, // Theater specific graphic image?
  2389. false, // Does it have a rotating turret?
  2390. true, // Can the building be color remapped to indicate owner?
  2391. RTTI_NONE, // The object type produced at this factory.
  2392. DIR_N, // Starting idle frame to match construction.
  2393. BSIZE_32, // SIZE: Building size.
  2394. NULL, // Preferred exit cell list.
  2395. (short const *)List32, // OCCUPYLIST: List of active foundation squares.
  2396. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2397. );
  2398. // Sandbag wall
  2399. static BuildingTypeClass const Sandbag(
  2400. STRUCT_SANDBAG_WALL,
  2401. TXT_SANDBAG_WALL, // NAME: Short name of the structure.
  2402. "SBAG", // NAME: Short name of the structure.
  2403. FACING_NONE, // Foundation direction from center of building.
  2404. XYP_COORD(0,0), // Exit point for produced units.
  2405. REMAP_NONE, // Sidebar remap logic.
  2406. 0x0000, // Vertical offset.
  2407. 0x0000, // Primary weapon offset along turret centerline.
  2408. 0x0000, // Primary weapon lateral offset along turret centerline.
  2409. false, // Is this building a fake (decoy?)
  2410. false, // Animation rate is regulated for constant speed?
  2411. true, // Always use the given name for the building?
  2412. true, // Is this a wall type structure?
  2413. false, // Simple (one frame) damage imagery?
  2414. false, // Is it invisible to radar?
  2415. false, // Can the player select this?
  2416. true, // Is this a legal target for attack or move?
  2417. true, // Is this an insignificant building?
  2418. false, // Theater specific graphic image?
  2419. false, // Does it have a rotating turret?
  2420. false, // Can the building be color remapped to indicate owner?
  2421. RTTI_NONE, // The object type produced at this factory.
  2422. DIR_N, // Starting idle frame to match construction.
  2423. BSIZE_11, // SIZE: Building size.
  2424. NULL, // Preferred exit cell list.
  2425. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2426. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2427. );
  2428. // Cyclone fence
  2429. static BuildingTypeClass const Cyclone(
  2430. STRUCT_CYCLONE_WALL,
  2431. TXT_CYCLONE_WALL, // NAME: Short name of the structure.
  2432. "CYCL", // NAME: Short name of the structure.
  2433. FACING_NONE, // Foundation direction from center of building.
  2434. XYP_COORD(0,0), // Exit point for produced units.
  2435. REMAP_NONE, // Sidebar remap logic.
  2436. 0x0000, // Vertical offset.
  2437. 0x0000, // Primary weapon offset along turret centerline.
  2438. 0x0000, // Primary weapon lateral offset along turret centerline.
  2439. false, // Is this building a fake (decoy?)
  2440. false, // Animation rate is regulated for constant speed?
  2441. true, // Always use the given name for the building?
  2442. true, // Is this a wall type structure?
  2443. false, // Simple (one frame) damage imagery?
  2444. false, // Is it invisible to radar?
  2445. false, // Can the player select this?
  2446. true, // Is this a legal target for attack or move?
  2447. true, // Is this an insignificant building?
  2448. false, // Theater specific graphic image?
  2449. false, // Does it have a rotating turret?
  2450. false, // Can the building be color remapped to indicate owner?
  2451. RTTI_NONE, // The object type produced at this factory.
  2452. DIR_N, // Starting idle frame to match construction.
  2453. BSIZE_11, // SIZE: Building size.
  2454. NULL, // Preferred exit cell list.
  2455. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2456. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2457. );
  2458. // Brick wall
  2459. static BuildingTypeClass const Brick(
  2460. STRUCT_BRICK_WALL,
  2461. TXT_BRICK_WALL, // NAME: Short name of the structure.
  2462. "BRIK", // NAME: Short name of the structure.
  2463. FACING_NONE, // Foundation direction from center of building.
  2464. XYP_COORD(0,0), // Exit point for produced units.
  2465. REMAP_NONE, // Sidebar remap logic.
  2466. 0x0000, // Vertical offset.
  2467. 0x0000, // Primary weapon offset along turret centerline.
  2468. 0x0000, // Primary weapon lateral offset along turret centerline.
  2469. false, // Is this building a fake (decoy?)
  2470. false, // Animation rate is regulated for constant speed?
  2471. true, // Always use the given name for the building?
  2472. true, // Is this a wall type structure?
  2473. false, // Simple (one frame) damage imagery?
  2474. false, // Is it invisible to radar?
  2475. false, // Can the player select this?
  2476. true, // Is this a legal target for attack or move?
  2477. true, // Is this an insignificant building?
  2478. false, // Theater specific graphic image?
  2479. false, // Does it have a rotating turret?
  2480. false, // Can the building be color remapped to indicate owner?
  2481. RTTI_NONE, // The object type produced at this factory.
  2482. DIR_N, // Starting idle frame to match construction.
  2483. BSIZE_11, // SIZE: Building size.
  2484. NULL, // Preferred exit cell list.
  2485. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2486. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2487. );
  2488. // Barbwire wall
  2489. static BuildingTypeClass const Barbwire(
  2490. STRUCT_BARBWIRE_WALL,
  2491. TXT_BARBWIRE_WALL, // NAME: Short name of the structure.
  2492. "BARB", // NAME: Short name of the structure.
  2493. FACING_NONE, // Foundation direction from center of building.
  2494. XYP_COORD(0,0), // Exit point for produced units.
  2495. REMAP_NONE, // Sidebar remap logic.
  2496. 0x0000, // Vertical offset.
  2497. 0x0000, // Primary weapon offset along turret centerline.
  2498. 0x0000, // Primary weapon lateral offset along turret centerline.
  2499. false, // Is this building a fake (decoy?)
  2500. false, // Animation rate is regulated for constant speed?
  2501. true, // Always use the given name for the building?
  2502. true, // Is this a wall type structure?
  2503. false, // Simple (one frame) damage imagery?
  2504. false, // Is it invisible to radar?
  2505. false, // Can the player select this?
  2506. true, // Is this a legal target for attack or move?
  2507. true, // Is this an insignificant building?
  2508. false, // Theater specific graphic image?
  2509. false, // Does it have a rotating turret?
  2510. false, // Can the building be color remapped to indicate owner?
  2511. RTTI_NONE, // The object type produced at this factory.
  2512. DIR_N, // Starting idle frame to match construction.
  2513. BSIZE_11, // SIZE: Building size.
  2514. NULL, // Preferred exit cell list.
  2515. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2516. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2517. );
  2518. // Wood wall
  2519. static BuildingTypeClass const Wood(
  2520. STRUCT_WOOD_WALL,
  2521. TXT_WOOD_WALL, // NAME: Short name of the structure.
  2522. "WOOD", // NAME: Short name of the structure.
  2523. FACING_NONE, // Foundation direction from center of building.
  2524. XYP_COORD(0,0), // Exit point for produced units.
  2525. REMAP_NONE, // Sidebar remap logic.
  2526. 0x0000, // Vertical offset.
  2527. 0x0000, // Primary weapon offset along turret centerline.
  2528. 0x0000, // Primary weapon lateral offset along turret centerline.
  2529. false, // Is this building a fake (decoy?)
  2530. false, // Animation rate is regulated for constant speed?
  2531. true, // Always use the given name for the building?
  2532. true, // Is this a wall type structure?
  2533. false, // Simple (one frame) damage imagery?
  2534. false, // Is it invisible to radar?
  2535. false, // Can the player select this?
  2536. true, // Is this a legal target for attack or move?
  2537. true, // Is this an insignificant building?
  2538. false, // Theater specific graphic image?
  2539. false, // Does it have a rotating turret?
  2540. false, // Can the building be color remapped to indicate owner?
  2541. RTTI_NONE, // The object type produced at this factory.
  2542. DIR_N, // Starting idle frame to match construction.
  2543. BSIZE_11, // SIZE: Building size.
  2544. NULL, // Preferred exit cell list.
  2545. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2546. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2547. );
  2548. static BuildingTypeClass const Fence(
  2549. STRUCT_FENCE,
  2550. TXT_FENCE, // NAME: Short name of the structure.
  2551. "FENC", // NAME: Short name of the structure.
  2552. FACING_NONE, // Foundation direction from center of building.
  2553. XYP_COORD(0,0), // Exit point for produced units.
  2554. REMAP_NONE, // Sidebar remap logic.
  2555. 0x0000, // Vertical offset.
  2556. 0x0000, // Primary weapon offset along turret centerline.
  2557. 0x0000, // Primary weapon lateral offset along turret centerline.
  2558. false, // Is this building a fake (decoy?)
  2559. false, // Animation rate is regulated for constant speed?
  2560. true, // Always use the given name for the building?
  2561. true, // Is this a wall type structure?
  2562. false, // Simple (one frame) damage imagery?
  2563. false, // Is it invisible to radar?
  2564. false, // Can the player select this?
  2565. true, // Is this a legal target for attack or move?
  2566. true, // Is this an insignificant building?
  2567. false, // Theater specific graphic image?
  2568. false, // Does it have a rotating turret?
  2569. false, // Can the building be color remapped to indicate owner?
  2570. RTTI_NONE, // The object type produced at this factory.
  2571. DIR_N, // Starting idle frame to match construction.
  2572. BSIZE_11, // SIZE: Building size.
  2573. NULL, // Preferred exit cell list.
  2574. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2575. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2576. );
  2577. #ifdef FIXIT_ANTS
  2578. static BuildingTypeClass const ClassQueen(
  2579. STRUCT_QUEEN,
  2580. TXT_NONE, // NAME: Short name of the structure.
  2581. "QUEE", // NAME: Short name of the structure.
  2582. FACING_NONE, // Foundation direction from center of building.
  2583. XYP_COORD(24,47), // Exit point for produced units.
  2584. REMAP_ALTERNATE, // Sidebar remap logic.
  2585. 0x0000, // Vertical offset.
  2586. 0x0000, // Primary weapon offset along turret centerline.
  2587. 0x0000, // Primary weapon lateral offset along turret centerline.
  2588. false, // Is this building a fake (decoy?)
  2589. true, // Animation rate is regulated for constant speed?
  2590. true, // Always use the given name for the building?
  2591. false, // Is this a wall type structure?
  2592. false, // Simple (one frame) damage imagery?
  2593. false, // Is it invisible to radar?
  2594. true, // Can the player select this?
  2595. true, // Is this a legal target for attack or move?
  2596. false, // Is this an insignificant building?
  2597. false, // Theater specific graphic image?
  2598. false, // Does it have a rotating turret?
  2599. true, // Can the building be color remapped to indicate owner?
  2600. RTTI_NONE, // The object type produced at this factory.
  2601. DIR_N, // Starting idle frame to match construction.
  2602. BSIZE_21, // SIZE: Building size.
  2603. NULL, // Preferred exit cell list.
  2604. (short const *)List11, // OCCUPYLIST: List of active foundation squares.
  2605. NULL // OVERLAPLIST:List of overlap cell offset.
  2606. );
  2607. static BuildingTypeClass const ClassLarva1(
  2608. STRUCT_LARVA1,
  2609. TXT_NONE, // NAME: Short name of the structure.
  2610. "LAR1", // NAME: Short name of the structure.
  2611. FACING_NONE, // Foundation direction from center of building.
  2612. XYP_COORD(0,0), // Exit point for produced units.
  2613. REMAP_ALTERNATE, // Sidebar remap logic.
  2614. 0x0000, // Vertical offset.
  2615. 0x0000, // Primary weapon offset along turret centerline.
  2616. 0x0000, // Primary weapon lateral offset along turret centerline.
  2617. false, // Is this building a fake (decoy?)
  2618. false, // Animation rate is regulated for constant speed?
  2619. true, // Always use the given name for the building?
  2620. false, // Is this a wall type structure?
  2621. true, // Simple (one frame) damage imagery?
  2622. true, // Is it invisible to radar?
  2623. true, // Can the player select this?
  2624. true, // Is this a legal target for attack or move?
  2625. true, // Is this an insignificant building?
  2626. false, // Theater specific graphic image?
  2627. false, // Does it have a rotating turret?
  2628. false, // Can the building be color remapped to indicate owner?
  2629. RTTI_NONE, // The object type produced at this factory.
  2630. DIR_N, // Starting idle frame to match construction.
  2631. BSIZE_11, // SIZE: Building size.
  2632. NULL, // Preferred exit cell list.
  2633. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2634. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2635. );
  2636. static BuildingTypeClass const ClassLarva2(
  2637. STRUCT_LARVA2,
  2638. TXT_NONE, // NAME: Short name of the structure.
  2639. "LAR2", // NAME: Short name of the structure.
  2640. FACING_NONE, // Foundation direction from center of building.
  2641. XYP_COORD(0,0), // Exit point for produced units.
  2642. REMAP_ALTERNATE, // Sidebar remap logic.
  2643. 0x0000, // Vertical offset.
  2644. 0x0000, // Primary weapon offset along turret centerline.
  2645. 0x0000, // Primary weapon lateral offset along turret centerline.
  2646. false, // Is this building a fake (decoy?)
  2647. false, // Animation rate is regulated for constant speed?
  2648. true, // Always use the given name for the building?
  2649. false, // Is this a wall type structure?
  2650. true, // Simple (one frame) damage imagery?
  2651. true, // Is it invisible to radar?
  2652. true, // Can the player select this?
  2653. true, // Is this a legal target for attack or move?
  2654. true, // Is this an insignificant building?
  2655. false, // Theater specific graphic image?
  2656. false, // Does it have a rotating turret?
  2657. false, // Can the building be color remapped to indicate owner?
  2658. RTTI_NONE, // The object type produced at this factory.
  2659. DIR_N, // Starting idle frame to match construction.
  2660. BSIZE_11, // SIZE: Building size.
  2661. NULL, // Preferred exit cell list.
  2662. (short const *)List1, // OCCUPYLIST: List of active foundation squares.
  2663. (short const *)NULL // OVERLAPLIST:List of overlap cell offset.
  2664. );
  2665. #endif
  2666. void const * BuildingTypeClass::WarFactoryOverlay;
  2667. void const * LightningShapes;
  2668. /***********************************************************************************************
  2669. * BuildingTypeClass::BuildingTypeClass -- This is the constructor for the building types. *
  2670. * *
  2671. * This is the constructor used to create the building types. *
  2672. * *
  2673. * INPUT: see below... *
  2674. * *
  2675. * OUTPUT: none *
  2676. * *
  2677. * WARNINGS: none *
  2678. * *
  2679. * HISTORY: *
  2680. * 07/29/1994 JLB : Created. *
  2681. *=============================================================================================*/
  2682. BuildingTypeClass::BuildingTypeClass(
  2683. StructType type,
  2684. int name,
  2685. char const * ininame,
  2686. FacingType foundation,
  2687. COORDINATE exitpoint,
  2688. RemapType remap,
  2689. int verticaloffset,
  2690. int primaryoffset,
  2691. int primarylateral,
  2692. bool is_fake,
  2693. bool is_regulated,
  2694. bool is_nominal,
  2695. bool is_wall,
  2696. bool is_simpledamage,
  2697. bool is_stealthy,
  2698. bool is_selectable,
  2699. bool is_legal_target,
  2700. bool is_insignificant,
  2701. bool is_theater,
  2702. bool is_turret_equipped,
  2703. bool is_remappable,
  2704. RTTIType tobuild,
  2705. DirType sframe,
  2706. BSizeType size,
  2707. short const * exitlist,
  2708. short const * sizelist,
  2709. short const * overlap) :
  2710. TechnoTypeClass(RTTI_BUILDINGTYPE,
  2711. int(type),
  2712. name,
  2713. ininame,
  2714. remap,
  2715. verticaloffset,
  2716. primaryoffset,
  2717. primarylateral,
  2718. primaryoffset,
  2719. primarylateral,
  2720. is_nominal,
  2721. is_stealthy,
  2722. is_selectable,
  2723. is_legal_target,
  2724. is_insignificant,
  2725. false,
  2726. is_theater,
  2727. is_turret_equipped,
  2728. is_remappable,
  2729. true,
  2730. (is_turret_equipped ? 32 : 1),
  2731. SPEED_NONE),
  2732. IsBase(true),
  2733. IsFake(is_fake),
  2734. IsBibbed(false),
  2735. IsWall(is_wall),
  2736. IsSimpleDamage(is_simpledamage),
  2737. IsCaptureable(false),
  2738. IsRegulated(is_regulated),
  2739. IsPowered(false),
  2740. IsUnsellable(false),
  2741. FoundationFace(foundation),
  2742. Adjacent(1),
  2743. ToBuild(tobuild),
  2744. ExitCoordinate(exitpoint),
  2745. ExitList(exitlist),
  2746. Type(type),
  2747. StartFace(sframe),
  2748. Capacity(0),
  2749. Power(0),
  2750. Drain(0),
  2751. Size(size),
  2752. OccupyList(sizelist),
  2753. OverlapList(overlap),
  2754. BuildupData(0)
  2755. {
  2756. Anims[BSTATE_CONSTRUCTION].Start = 0;
  2757. Anims[BSTATE_CONSTRUCTION].Count = 1;
  2758. Anims[BSTATE_CONSTRUCTION].Rate = 0;
  2759. Anims[BSTATE_IDLE].Start = 0;
  2760. Anims[BSTATE_IDLE].Count = 1;
  2761. Anims[BSTATE_IDLE].Rate = 0;
  2762. Anims[BSTATE_ACTIVE].Start = 0;
  2763. Anims[BSTATE_ACTIVE].Count = 1;
  2764. Anims[BSTATE_ACTIVE].Rate = 0;
  2765. Anims[BSTATE_AUX1].Start = 0;
  2766. Anims[BSTATE_AUX1].Count = 1;
  2767. Anims[BSTATE_AUX1].Rate = 0;
  2768. Anims[BSTATE_AUX2].Start = 0;
  2769. Anims[BSTATE_AUX2].Count = 1;
  2770. Anims[BSTATE_AUX2].Rate = 0;
  2771. }
  2772. /***********************************************************************************************
  2773. * BuildingTypeClass::operator new -- Allocates a building type object from the special heap. *
  2774. * *
  2775. * This routine will allocate a building type object from the special heap used just for *
  2776. * allocation of object of this type. *
  2777. * *
  2778. * INPUT: none *
  2779. * *
  2780. * OUTPUT: Returns with a pointer to the newly allocated object. If the allocation could not *
  2781. * succeed, then NULL will be returned. *
  2782. * *
  2783. * WARNINGS: none *
  2784. * *
  2785. * HISTORY: *
  2786. * 07/06/1996 JLB : Created. *
  2787. *=============================================================================================*/
  2788. void * BuildingTypeClass::operator new(size_t)
  2789. {
  2790. return(BuildingTypes.Alloc());
  2791. }
  2792. /***********************************************************************************************
  2793. * BuildingTypeClass::operator delete -- Deletes a building type object from the special heap. *
  2794. * *
  2795. * This will delete a previously allocated building type object. The memory is returned *
  2796. * to the special heap that is used for that purpose. *
  2797. * *
  2798. * INPUT: ptr -- Pointer to the building type object to return to the special heap. *
  2799. * *
  2800. * OUTPUT: none *
  2801. * *
  2802. * WARNINGS: none *
  2803. * *
  2804. * HISTORY: *
  2805. * 07/06/1996 JLB : Created. *
  2806. *=============================================================================================*/
  2807. void BuildingTypeClass::operator delete(void * ptr)
  2808. {
  2809. BuildingTypes.Free((BuildingTypeClass *)ptr);
  2810. }
  2811. /***********************************************************************************************
  2812. * BuildingTypeClass::Init_Heap -- Initialize the heap as necessary for the building type obje *
  2813. * *
  2814. * This routine performs the necessary heap initializations. Since we know exactly what *
  2815. * building type objects will be needed, they are pre-allocated at this time. *
  2816. * *
  2817. * INPUT: none *
  2818. * *
  2819. * OUTPUT: none *
  2820. * *
  2821. * WARNINGS: Call this routine only once. *
  2822. * *
  2823. * HISTORY: *
  2824. * 07/06/1996 JLB : Created. *
  2825. *=============================================================================================*/
  2826. void BuildingTypeClass::Init_Heap(void)
  2827. {
  2828. /*
  2829. ** These building type class objects must be allocated in the exact order that they
  2830. ** are specified in the StructType enumeration. This is necessary because the heap
  2831. ** allocation block index serves double duty as the type number index.
  2832. */
  2833. new BuildingTypeClass(ClassAdvancedTech); // STRUCT_ADVANCED_TECH
  2834. new BuildingTypeClass(ClassIronCurtain); // STRUCT_IRON_CURTAIN
  2835. new BuildingTypeClass(ClassWeapon); // STRUCT_WEAP
  2836. new BuildingTypeClass(ClassChronosphere); // STRUCT_CHRONOSPHERE
  2837. new BuildingTypeClass(ClassPillbox); // STRUCT_PILLBOX
  2838. new BuildingTypeClass(ClassCamoPillbox); // STRUCT_CAMOPILLBOX
  2839. new BuildingTypeClass(ClassCommand); // STRUCT_RADAR
  2840. new BuildingTypeClass(ClassGapGenerator); // STRUCT_GAP
  2841. new BuildingTypeClass(ClassTurret); // STRUCT_TURRET
  2842. new BuildingTypeClass(ClassAAGun); // STRUCT_AAGUN
  2843. new BuildingTypeClass(ClassFlameTurret); // STRUCT_FLAME_TURRET
  2844. new BuildingTypeClass(ClassConst); // STRUCT_CONST
  2845. new BuildingTypeClass(ClassRefinery); // STRUCT_REFINERY
  2846. new BuildingTypeClass(ClassStorage); // STRUCT_STORAGE
  2847. new BuildingTypeClass(ClassHelipad); // STRUCT_HELIPAD
  2848. new BuildingTypeClass(ClassSAM); // STRUCT_SAM
  2849. new BuildingTypeClass(ClassAirStrip); // STRUCT_AIRSTRIP
  2850. new BuildingTypeClass(ClassPower); // STRUCT_POWER
  2851. new BuildingTypeClass(ClassAdvancedPower);// STRUCT_ADVANCED_POWER
  2852. new BuildingTypeClass(ClassSovietTech); // STRUCT_SOVIET_TECH
  2853. new BuildingTypeClass(ClassHospital); // STRUCT_HOSPITAL
  2854. new BuildingTypeClass(ClassBarracks); // STRUCT_BARRACKS
  2855. new BuildingTypeClass(ClassTent); // STRUCT_TENT
  2856. new BuildingTypeClass(ClassKennel); // STRUCT_KENNEL
  2857. new BuildingTypeClass(ClassRepair); // STRUCT_REPAIR
  2858. new BuildingTypeClass(ClassBioLab); // STRUCT_BIO_LAB
  2859. new BuildingTypeClass(ClassMission); // STRUCT_MISSION
  2860. new BuildingTypeClass(ClassShipYard); // STRUCT_SHIP_YARD
  2861. new BuildingTypeClass(ClassSubPen); // STRUCT_SUB_PEN
  2862. new BuildingTypeClass(ClassMissileSilo); // STRUCT_MSLO
  2863. new BuildingTypeClass(ClassForwardCom); // STRUCT_FORWARD_COM
  2864. new BuildingTypeClass(ClassTesla); // STRUCT_TESLA
  2865. new BuildingTypeClass(ClassFakeWeapon); // STRUCT_FAKEWEAP
  2866. new BuildingTypeClass(ClassFakeConst); // STRUCT_FAKECONST
  2867. new BuildingTypeClass(ClassFakeShipYard); // STRUCT_FAKE_YARD
  2868. new BuildingTypeClass(ClassFakeSubPen); // STRUCT_FAKE_PEN
  2869. new BuildingTypeClass(ClassFakeCommand); // STRUCT_FAKE_RADAR
  2870. new BuildingTypeClass(Sandbag); // STRUCT_SANDBAG_WALL
  2871. new BuildingTypeClass(Cyclone); // STRUCT_CYCLONE_WALL
  2872. new BuildingTypeClass(Brick); // STRUCT_BRICK_WALL
  2873. new BuildingTypeClass(Barbwire); // STRUCT_BARBWIRE_WALL
  2874. new BuildingTypeClass(Wood); // STRUCT_WOOD_WALL
  2875. new BuildingTypeClass(Fence); // STRUCT_FENCE
  2876. new BuildingTypeClass(ClassAVMine); // STRUCT_AVMINE
  2877. new BuildingTypeClass(ClassAPMine); // STRUCT_APMINE
  2878. new BuildingTypeClass(ClassV01); // STRUCT_V1
  2879. new BuildingTypeClass(ClassV02); // STRUCT_V2
  2880. new BuildingTypeClass(ClassV03); // STRUCT_V3
  2881. new BuildingTypeClass(ClassV04); // STRUCT_V4
  2882. new BuildingTypeClass(ClassV05); // STRUCT_V5
  2883. new BuildingTypeClass(ClassV06); // STRUCT_V6
  2884. new BuildingTypeClass(ClassV07); // STRUCT_V7
  2885. new BuildingTypeClass(ClassV08); // STRUCT_V8
  2886. new BuildingTypeClass(ClassV09); // STRUCT_V9
  2887. new BuildingTypeClass(ClassV10); // STRUCT_V10
  2888. new BuildingTypeClass(ClassV11); // STRUCT_V11
  2889. new BuildingTypeClass(ClassV12); // STRUCT_V12
  2890. new BuildingTypeClass(ClassV13); // STRUCT_V13
  2891. new BuildingTypeClass(ClassV14); // STRUCT_V14
  2892. new BuildingTypeClass(ClassV15); // STRUCT_V15
  2893. new BuildingTypeClass(ClassV16); // STRUCT_V16
  2894. new BuildingTypeClass(ClassV17); // STRUCT_V17
  2895. new BuildingTypeClass(ClassV18); // STRUCT_V18
  2896. new BuildingTypeClass(ClassV19); // STRUCT_PUMP
  2897. new BuildingTypeClass(ClassV20); // STRUCT_V20
  2898. new BuildingTypeClass(ClassV21); // STRUCT_V21
  2899. new BuildingTypeClass(ClassV22); // STRUCT_V22
  2900. new BuildingTypeClass(ClassV23); // STRUCT_V23
  2901. new BuildingTypeClass(ClassV24); // STRUCT_V24
  2902. new BuildingTypeClass(ClassV25); // STRUCT_V25
  2903. new BuildingTypeClass(ClassV26); // STRUCT_V26
  2904. new BuildingTypeClass(ClassV27); // STRUCT_V27
  2905. new BuildingTypeClass(ClassV28); // STRUCT_V28
  2906. new BuildingTypeClass(ClassV29); // STRUCT_V29
  2907. new BuildingTypeClass(ClassV30); // STRUCT_V30
  2908. new BuildingTypeClass(ClassV31); // STRUCT_V31
  2909. new BuildingTypeClass(ClassV32); // STRUCT_V32
  2910. new BuildingTypeClass(ClassV33); // STRUCT_V33
  2911. new BuildingTypeClass(ClassV34); // STRUCT_V34
  2912. new BuildingTypeClass(ClassV35); // STRUCT_V35
  2913. new BuildingTypeClass(ClassV36); // STRUCT_V36
  2914. new BuildingTypeClass(ClassV37); // STRUCT_V37
  2915. new BuildingTypeClass(ClassBarrel); // STRUCT_BARREL
  2916. new BuildingTypeClass(ClassBarrel3); // STRUCT_BARREL3
  2917. #ifdef FIXIT_ANTS
  2918. new BuildingTypeClass(ClassQueen); // STRUCT_QUEEN
  2919. new BuildingTypeClass(ClassLarva1); // STRUCT_LARVA1
  2920. new BuildingTypeClass(ClassLarva2); // STRUCT_LARVA2
  2921. #endif
  2922. }
  2923. /***********************************************************************************************
  2924. * BuildingTypeClass::One_Time -- Performs special one time action for buildings. *
  2925. * *
  2926. * This routine is used to do the one time action necessary to handle building type class *
  2927. * objects. This entails loading of the building shapes and the brain file used by *
  2928. * buildings. *
  2929. * *
  2930. * INPUT: none *
  2931. * *
  2932. * OUTPUT: none *
  2933. * *
  2934. * WARNINGS: This routine should only be called ONCE. *
  2935. * *
  2936. * HISTORY: *
  2937. * 05/28/1994 JLB : Created. *
  2938. * 06/11/1994 JLB : Updated construction time and frame count logic. *
  2939. *=============================================================================================*/
  2940. void BuildingTypeClass::One_Time(void)
  2941. {
  2942. static const struct {
  2943. StructType Class; // Building class number.
  2944. BStateType Stage; // Animation sequence to assign animation range to.
  2945. int Start; // Starting frame number.
  2946. int Length; // Number of frames (-1 means use all frames).
  2947. int Rate; // Rate of animation.
  2948. } _anims[] = {
  2949. {STRUCT_CHRONOSPHERE, BSTATE_IDLE, 0, 4, 3}, // idling
  2950. {STRUCT_CHRONOSPHERE, BSTATE_ACTIVE, 4, 16,3}, // charging up and activating
  2951. {STRUCT_MSLO, BSTATE_IDLE, 0, 0, 0},
  2952. {STRUCT_MSLO, BSTATE_ACTIVE, 0, 5, 2}, // door opening
  2953. {STRUCT_MSLO, BSTATE_AUX1, 4, 1, 0}, // door held open
  2954. {STRUCT_MSLO, BSTATE_AUX2, 5, 3, 2}, // door closing
  2955. {STRUCT_CAMOPILLBOX, BSTATE_ACTIVE, 0, 2, 1},
  2956. {STRUCT_GAP, BSTATE_IDLE, 0, 32,3},
  2957. {STRUCT_AIRSTRIP, BSTATE_IDLE, 0, 0, 0},
  2958. {STRUCT_AIRSTRIP, BSTATE_AUX1, 0, 8, 3},
  2959. {STRUCT_BARRACKS, BSTATE_ACTIVE, 0, 10,3},
  2960. {STRUCT_BARRACKS, BSTATE_IDLE, 0, 10,3},
  2961. {STRUCT_TENT, BSTATE_ACTIVE, 0, 10,3},
  2962. {STRUCT_TENT, BSTATE_IDLE, 0, 10,3},
  2963. #ifdef FIXIT_ANTS
  2964. {STRUCT_QUEEN, BSTATE_IDLE, 0, 10,3},
  2965. #endif
  2966. {STRUCT_CONST, BSTATE_ACTIVE, 0, 26,3},
  2967. {STRUCT_FAKECONST, BSTATE_ACTIVE, 0, 26,3},
  2968. {STRUCT_HELIPAD, BSTATE_ACTIVE, 0, 7, 4},
  2969. {STRUCT_HELIPAD, BSTATE_IDLE, 0, 0, 0},
  2970. {STRUCT_HOSPITAL, BSTATE_IDLE, 0, 4, 3},
  2971. {STRUCT_PUMP, BSTATE_IDLE, 0, 14,4},
  2972. {STRUCT_REPAIR, BSTATE_ACTIVE, 0, 7, 2},
  2973. {STRUCT_REPAIR, BSTATE_IDLE, 0, 1, 0},
  2974. {STRUCT_V20, BSTATE_IDLE, 0, 3, 3},
  2975. {STRUCT_V21, BSTATE_IDLE, 0, 3, 3},
  2976. {STRUCT_V22, BSTATE_IDLE, 0, 3, 3},
  2977. {STRUCT_V23, BSTATE_IDLE, 0, 3, 3},
  2978. {STRUCT_WEAP, BSTATE_ACTIVE, 0, 1, 0},
  2979. {STRUCT_WEAP, BSTATE_IDLE, 0, 1, 0},
  2980. {STRUCT_FAKEWEAP, BSTATE_ACTIVE, 0, 1, 0},
  2981. {STRUCT_FAKEWEAP, BSTATE_IDLE, 0, 1, 0},
  2982. {STRUCT_IRON_CURTAIN, BSTATE_ACTIVE, 0, 11,3},
  2983. {STRUCT_TESLA, BSTATE_ACTIVE, 0, 10,2},
  2984. {STRUCT_AIRSTRIP, BSTATE_IDLE, 0, 8, 3}
  2985. };
  2986. for (int sindex = STRUCT_FIRST; sindex < STRUCT_COUNT; sindex++) {
  2987. char fullname[_MAX_FNAME+_MAX_EXT];
  2988. char buffer[_MAX_FNAME];
  2989. BuildingTypeClass const & building = As_Reference((StructType)sindex);
  2990. /*
  2991. ** Fetch the sidebar cameo image for this building.
  2992. */
  2993. if (building.Level != -1) {
  2994. // if (building.IsBuildable) {
  2995. sprintf(buffer, "%sICON", building.Graphic_Name());
  2996. if (building.IsFake) {
  2997. buffer[3] = 'F';
  2998. }
  2999. _makepath(fullname, NULL, NULL, buffer, ".SHP");
  3000. ((void const *&)building.CameoData) = MFCD::Retrieve(fullname);
  3001. }
  3002. /*
  3003. ** Fetch the construction animation for this building.
  3004. */
  3005. sprintf(buffer, "%sMAKE", building.Graphic_Name());
  3006. _makepath(fullname, NULL, NULL, buffer, ".SHP");
  3007. void const * dataptr;
  3008. dataptr = MFCD::Retrieve(fullname);
  3009. ((void const *&)building.BuildupData) = dataptr;
  3010. if (dataptr != NULL) {
  3011. int timedelay = 1;
  3012. int count = Get_Build_Frame_Count(dataptr);
  3013. if (count > 0) {
  3014. timedelay = (Rule.BuildupTime * TICKS_PER_MINUTE) / count;
  3015. }
  3016. building.Init_Anim(BSTATE_CONSTRUCTION, 0, count, timedelay);
  3017. }
  3018. /*
  3019. ** Fetch the normal game shape for this building.
  3020. */
  3021. _makepath(fullname, NULL, NULL, building.Graphic_Name(), ".SHP");
  3022. ((void const *&)building.ImageData) = MFCD::Retrieve(fullname);
  3023. }
  3024. // Try to load weap2.shp and tesla coil's lightning shapes
  3025. char fullname[_MAX_FNAME+_MAX_EXT];
  3026. _makepath(fullname, NULL, NULL, (char const *)"WEAP2",".SHP");
  3027. WarFactoryOverlay = MFCD::Retrieve(fullname);
  3028. _makepath(fullname, NULL, NULL, (char const *)"LITNING",".SHP");
  3029. LightningShapes = MFCD::Retrieve(fullname);
  3030. /*
  3031. ** Install all the special animation sequences for the different building types.
  3032. */
  3033. for (unsigned index = 0; index < (sizeof(_anims) / sizeof(_anims[0])); index++) {
  3034. As_Reference(_anims[index].Class).Init_Anim(_anims[index].Stage, _anims[index].Start, _anims[index].Length, _anims[index].Rate);
  3035. }
  3036. }
  3037. /***********************************************************************************************
  3038. * Struct_From_Name -- Find BData structure from its name. *
  3039. * *
  3040. * This routine will convert an ASCII name for a building class into *
  3041. * the actual building class it represents. *
  3042. * *
  3043. * INPUT: name -- ASCII representation of a building class. *
  3044. * *
  3045. * OUTPUT: Returns with the actual building class number that the string *
  3046. * represents. *
  3047. * *
  3048. * WARNINGS: none *
  3049. * *
  3050. * HISTORY: *
  3051. * 10/07/1992 JLB : Created. *
  3052. * 05/02/1994 JLB : Converted to member function. *
  3053. *=============================================================================================*/
  3054. StructType BuildingTypeClass::From_Name(char const * name)
  3055. {
  3056. if (name != NULL) {
  3057. for (int classid = STRUCT_FIRST; classid < STRUCT_COUNT; classid++) {
  3058. if (stricmp(As_Reference((StructType)classid).IniName, name) == 0) {
  3059. return((StructType)classid);
  3060. }
  3061. }
  3062. }
  3063. return(STRUCT_NONE);
  3064. }
  3065. #ifdef SCENARIO_EDITOR
  3066. /***********************************************************************************************
  3067. * BuildingTypeClass::Display -- Renders a generic view of building. *
  3068. * *
  3069. * This routine is used to display a generic representation of the *
  3070. * building. Typical use of this occurs with the scenario editor. *
  3071. * *
  3072. * INPUT: x,y -- Coordinate to display the building (centered). *
  3073. * *
  3074. * window -- The window the building should be rendered *
  3075. * relative to. *
  3076. * *
  3077. * house -- The house color to use for the building. *
  3078. * *
  3079. * OUTPUT: none *
  3080. * *
  3081. * WARNINGS: none *
  3082. * *
  3083. * HISTORY: *
  3084. * 05/23/1994 JLB : Created. *
  3085. *=============================================================================================*/
  3086. void BuildingTypeClass::Display(int x, int y, WindowNumberType window, HousesType ) const
  3087. {
  3088. void const * ptr = Get_Cameo_Data();
  3089. if (ptr == NULL) {
  3090. IsTheaterShape = IsTheater;
  3091. ptr = Get_Image_Data();
  3092. }
  3093. CC_Draw_Shape(ptr, 0, x, y, window, SHAPE_CENTER|SHAPE_WIN_REL);
  3094. IsTheaterShape = false;
  3095. }
  3096. /***********************************************************************************************
  3097. * BuildingTypeClass::Prep_For_Add -- Prepares scenario editor for adding a *
  3098. * *
  3099. * This routine is used to prepare the scenario editor for the addition *
  3100. * of a building object to the game. *
  3101. * *
  3102. * INPUT: none *
  3103. * *
  3104. * OUTPUT: none *
  3105. * *
  3106. * WARNINGS: none *
  3107. * *
  3108. * HISTORY: *
  3109. * 05/23/1994 JLB : Created. *
  3110. * 06/04/1994 JLB : Uses map editing interface routines. *
  3111. *=============================================================================================*/
  3112. void BuildingTypeClass::Prep_For_Add(void)
  3113. {
  3114. for (StructType index = STRUCT_FIRST; index < STRUCT_COUNT; index++) {
  3115. if (As_Reference(index).Get_Image_Data()) {
  3116. Map.Add_To_List(&As_Reference(index));
  3117. }
  3118. }
  3119. }
  3120. #endif
  3121. /***********************************************************************************************
  3122. * BuildingTypeClass::Create_And_Place -- Creates and places a building object onto the map. *
  3123. * *
  3124. * This routine is used by the scenario editor to create and place buildings on the map. *
  3125. * *
  3126. * INPUT: cell -- The cell that the building is to be placed upon. *
  3127. * *
  3128. * house -- The owner of the building. *
  3129. * *
  3130. * OUTPUT: bool; Was the building successfully created and placed on the map? *
  3131. * *
  3132. * WARNINGS: none *
  3133. * *
  3134. * HISTORY: *
  3135. * 05/28/1994 JLB : Created. *
  3136. *=============================================================================================*/
  3137. bool BuildingTypeClass::Create_And_Place(CELL cell, HousesType house) const
  3138. {
  3139. BuildingClass * ptr;
  3140. ptr = new BuildingClass(Type, house);
  3141. if (ptr != NULL) {
  3142. return(ptr->Unlimbo(Cell_Coord(cell), DIR_N));
  3143. }
  3144. return(false);
  3145. }
  3146. /***********************************************************************************************
  3147. * BuildingTypeClass::Create_One_Of -- Creates a building of this type. *
  3148. * *
  3149. * This routine will create a building object of this type. The building object is in a *
  3150. * limbo state. It is presumed that the building object will be unlimboed at the correct *
  3151. * place and time. Typical use is when the building is created in a factory situation *
  3152. * and will be placed on the map when construction completes. *
  3153. * *
  3154. * INPUT: house -- Pointer to the house that is to be the owner of the building. *
  3155. * *
  3156. * OUTPUT: Returns with a pointer to the building. If the building could not be created *
  3157. * then a NULL is returned. *
  3158. * *
  3159. * WARNINGS: none *
  3160. * *
  3161. * HISTORY: *
  3162. * 06/07/1994 JLB : Created. *
  3163. *=============================================================================================*/
  3164. ObjectClass * BuildingTypeClass::Create_One_Of(HouseClass * house) const
  3165. {
  3166. HousesType htype = HOUSE_NEUTRAL;
  3167. if (house != NULL) {
  3168. htype = house->Class->House;
  3169. }
  3170. return(new BuildingClass(Type, htype));
  3171. }
  3172. /***********************************************************************************************
  3173. * BuildingTypeClass::Init_Anim -- Initialize an animation control for a building. *
  3174. * *
  3175. * This routine will initialize one animation control element for a *
  3176. * specified building. This modifies a "const" class and thus must *
  3177. * perform some strategic casting to get away with this. *
  3178. * *
  3179. * INPUT: state -- The animation state to apply these data values to. *
  3180. * *
  3181. * start -- Starting frame for the building's animation. *
  3182. * *
  3183. * count -- The number of frames in this animation. *
  3184. * *
  3185. * rate -- The countdown timer between animation frames. *
  3186. * *
  3187. * OUTPUT: none *
  3188. * *
  3189. * WARNINGS: none *
  3190. * *
  3191. * HISTORY: *
  3192. * 04/18/1994 JLB : Created. *
  3193. *=============================================================================================*/
  3194. void BuildingTypeClass::Init_Anim(BStateType state, int start, int count, int rate) const
  3195. {
  3196. ((int &)Anims[state].Start) = start;
  3197. ((int &)Anims[state].Count) = count;
  3198. ((int &)Anims[state].Rate) = rate;
  3199. }
  3200. /***********************************************************************************************
  3201. * BuildingTypeClass::Init -- Performs theater specific initialization. *
  3202. * *
  3203. * This routine is used to perform any initialization that is custom per theater. *
  3204. * Typically, this is fetching the building shape data for those building types that have *
  3205. * theater specific art. *
  3206. * *
  3207. * INPUT: theater -- The theater to base this initialization on. *
  3208. * *
  3209. * OUTPUT: none *
  3210. * *
  3211. * WARNINGS: none *
  3212. * *
  3213. * HISTORY: *
  3214. * 01/21/1995 JLB : Created. *
  3215. *=============================================================================================*/
  3216. void BuildingTypeClass::Init(TheaterType theater)
  3217. {
  3218. if (theater != LastTheater) {
  3219. char fullname[_MAX_FNAME+_MAX_EXT];
  3220. for (int sindex = STRUCT_FIRST; sindex < STRUCT_COUNT; sindex++) {
  3221. BuildingTypeClass const * classptr = &As_Reference((StructType)sindex);
  3222. if (classptr->IsTheater) {
  3223. _makepath(fullname, NULL, NULL, classptr->Graphic_Name(), Theaters[theater].Suffix);
  3224. ((void const *&)classptr->ImageData) = MFCD::Retrieve(fullname);
  3225. /*
  3226. ** Buildup data is probably theater specific as well. Fetch a pointer to the
  3227. ** data at this time as well.
  3228. */
  3229. sprintf(fullname, "%sMAKE.%s", classptr->Graphic_Name(), Theaters[theater].Suffix);
  3230. ((void const *&)classptr->BuildupData) = MFCD::Retrieve(fullname);
  3231. if (classptr->BuildupData) {
  3232. int timedelay = 1;
  3233. int count = Get_Build_Frame_Count(classptr->BuildupData);
  3234. if (count != 0) {
  3235. timedelay = (5 * TICKS_PER_SECOND) / count;
  3236. }
  3237. classptr->Init_Anim(BSTATE_CONSTRUCTION, 0, count, timedelay);
  3238. }
  3239. }
  3240. }
  3241. }
  3242. }
  3243. /***********************************************************************************************
  3244. * BuildingTypeClass::Dimensions -- Fetches the pixel dimensions of the building. *
  3245. * *
  3246. * This routine will fetch the dimensions of the building (in pixels). These dimensions are *
  3247. * used to render the selection rectangle and the health bar. *
  3248. * *
  3249. * INPUT: width -- Reference to the pixel width (to be filled in). *
  3250. * *
  3251. * height -- Reference to the pixel height (to be filled in). *
  3252. * *
  3253. * OUTPUT: none *
  3254. * *
  3255. * WARNINGS: none *
  3256. * *
  3257. * HISTORY: *
  3258. * 01/23/1995 JLB : Created. *
  3259. *=============================================================================================*/
  3260. void BuildingTypeClass::Dimensions(int &width, int &height) const
  3261. {
  3262. width = Width() * ICON_PIXEL_W;
  3263. width -= (width/5);
  3264. height = Height() * ICON_PIXEL_H;
  3265. height -= (height/5);
  3266. }
  3267. /***********************************************************************************************
  3268. * BuildingTypeClass::As_Reference -- Fetches reference to the building type specified. *
  3269. * *
  3270. * This routine will fetch a reference to the BuildingTypeClass as indicated by the *
  3271. * building type number specified. *
  3272. * *
  3273. * INPUT: type -- The building type number to convert into a BuildingTypeClass reference. *
  3274. * *
  3275. * OUTPUT: Returns with a reference to the building type class as indicated by the *
  3276. * parameter. *
  3277. * *
  3278. * WARNINGS: none *
  3279. * *
  3280. * HISTORY: *
  3281. * 01/23/1995 JLB : Created. *
  3282. *=============================================================================================*/
  3283. BuildingTypeClass & BuildingTypeClass::As_Reference(StructType type)
  3284. {
  3285. return(*BuildingTypes.Ptr(type));
  3286. }
  3287. /***********************************************************************************************
  3288. * BuildingTypeClass::Occupy_List -- Fetches the occupy list for the building. *
  3289. * *
  3290. * Use this routine to fetch the occupy list pointer for the building. The occupy list is *
  3291. * used to determine what cells the building occupies and thus precludes other buildings *
  3292. * or objects from using. *
  3293. * *
  3294. * INPUT: placement -- Is this for placement legality checking only? The normal condition *
  3295. * is for marking occupation flags. *
  3296. * *
  3297. * OUTPUT: Returns with a pointer to a cell offset list to be used to determine what cells *
  3298. * this building occupies. *
  3299. * *
  3300. * WARNINGS: none *
  3301. * *
  3302. * HISTORY: *
  3303. * 01/23/1995 JLB : Created. *
  3304. *=============================================================================================*/
  3305. short const * BuildingTypeClass::Occupy_List(bool placement) const
  3306. {
  3307. SmudgeType bib = SMUDGE_NONE;
  3308. CELL cell=0;
  3309. if (placement && Bib_And_Offset(bib, cell)) {
  3310. SmudgeTypeClass const & smudge = SmudgeTypeClass::As_Reference(bib);
  3311. static short _list[25];
  3312. short * dest = &_list[0];
  3313. /*
  3314. ** Copy the bib overlap list into the working buffer.
  3315. */
  3316. short const * src = smudge.Occupy_List();
  3317. while (*src != REFRESH_EOL) {
  3318. *dest++ = (*src++) + cell;
  3319. }
  3320. /*
  3321. ** Append the building occupy list to this working buffer.
  3322. */
  3323. src = OccupyList;
  3324. while (src && *src != REFRESH_EOL) {
  3325. *dest++ = *src++;
  3326. }
  3327. *dest = REFRESH_EOL;
  3328. return(&_list[0]);
  3329. }
  3330. if (OccupyList != NULL) {
  3331. return(OccupyList);
  3332. }
  3333. static short const _templap[] = {REFRESH_EOL};
  3334. return(&_templap[0]);
  3335. }
  3336. /***********************************************************************************************
  3337. * BuildingTypeClass::Overlap_List -- Fetches the overlap list for the building. *
  3338. * *
  3339. * This routine will fetch the overlap list for the building. The overlap list is used *
  3340. * to determine what cells the building's graphics cover, but is not considered to occupy *
  3341. * for movement purposes. *
  3342. * *
  3343. * INPUT: none *
  3344. * *
  3345. * OUTPUT: Returns with a pointer to the cell offset list that is used to determine the *
  3346. * cells that this building overlaps. *
  3347. * *
  3348. * WARNINGS: none *
  3349. * *
  3350. * HISTORY: *
  3351. * 01/23/1995 JLB : Created. *
  3352. *=============================================================================================*/
  3353. short const * BuildingTypeClass::Overlap_List(void) const
  3354. {
  3355. if (OverlapList != NULL) {
  3356. return(OverlapList);
  3357. }
  3358. static short const _templap[] = {REFRESH_EOL};
  3359. return(&_templap[0]);
  3360. }
  3361. /***********************************************************************************************
  3362. * BuildingTypeClass::Width -- Determines width of building in icons. *
  3363. * *
  3364. * Use this routine to determine the width of the building type in icons. *
  3365. * *
  3366. * INPUT: none *
  3367. * *
  3368. * OUTPUT: Returns with the building width in icons. *
  3369. * *
  3370. * WARNINGS: none *
  3371. * *
  3372. * HISTORY: *
  3373. * 02/23/1995 JLB : Created. *
  3374. *=============================================================================================*/
  3375. int BuildingTypeClass::Width(void) const
  3376. {
  3377. static int width[BSIZE_COUNT] = {
  3378. 1,
  3379. 2,
  3380. 1,
  3381. 2,
  3382. 2,
  3383. 3,
  3384. 3,
  3385. 4,
  3386. 5
  3387. };
  3388. return(width[Size]);
  3389. }
  3390. /***********************************************************************************************
  3391. * BuildingTypeClass::Height -- Determines the height of the building in icons. *
  3392. * *
  3393. * Use this routine to find the height of the building in icons. *
  3394. * *
  3395. * INPUT: none *
  3396. * *
  3397. * OUTPUT: Returns with the building height in icons. *
  3398. * *
  3399. * WARNINGS: none *
  3400. * *
  3401. * HISTORY: *
  3402. * 02/23/1995 JLB : Created. *
  3403. *=============================================================================================*/
  3404. int BuildingTypeClass::Height(bool bib) const
  3405. {
  3406. static int height[BSIZE_COUNT] = {
  3407. 1,
  3408. 1,
  3409. 2,
  3410. 2,
  3411. 3,
  3412. 2,
  3413. 3,
  3414. 2,
  3415. 5
  3416. };
  3417. return(height[Size] + ((bib && IsBibbed) ? 1 : 0));
  3418. }
  3419. /***********************************************************************************************
  3420. * BuildingTypeClass::Bib_And_Offset -- Determines the bib and appropriate cell offset. *
  3421. * *
  3422. * This routine is used to determine what (if any) bib should be used for this building *
  3423. * and also the cell offset for the upper left corner of the bib smudge type. *
  3424. * *
  3425. * INPUT: bib -- Reference to the bib that should be used for this building. *
  3426. * *
  3427. * cell -- The cell offset for the upper left corner of the bib. This offset is *
  3428. * relative to the upper left corner of the building. *
  3429. * *
  3430. * OUTPUT: Is a bib required for this building? If the result is true, then the correct *
  3431. * bib and cell offset will be filled in. *
  3432. * *
  3433. * WARNINGS: none *
  3434. * *
  3435. * HISTORY: *
  3436. * 05/23/1995 JLB : Created. *
  3437. *=============================================================================================*/
  3438. bool BuildingTypeClass::Bib_And_Offset(SmudgeType & bib, CELL & cell) const
  3439. {
  3440. bib = SMUDGE_NONE;
  3441. if (IsBibbed) {
  3442. switch (Width()) {
  3443. case 2:
  3444. bib = SMUDGE_BIB3;
  3445. break;
  3446. case 3:
  3447. bib = SMUDGE_BIB2;
  3448. break;
  3449. case 4:
  3450. bib = SMUDGE_BIB1;
  3451. break;
  3452. default:
  3453. bib = SMUDGE_NONE;
  3454. break;
  3455. }
  3456. /*
  3457. ** Adjust the bib position for special buildings that have the bib as part
  3458. ** of the building art itself.
  3459. */
  3460. if (bib != SMUDGE_NONE) {
  3461. cell += ((Height()-1)*MAP_CELL_W);
  3462. }
  3463. }
  3464. return(bib != SMUDGE_NONE);
  3465. }
  3466. /***********************************************************************************************
  3467. * BuildingTypeClass::Max_Pips -- Determines the maximum pips to display. *
  3468. * *
  3469. * Use this routine to determine the maximum number of pips to display on this building *
  3470. * when it is rendered. Typically, this is the tiberium capacity divided by 100. *
  3471. * *
  3472. * INPUT: none *
  3473. * *
  3474. * OUTPUT: Returns with the number of pips to display on this building when selected. *
  3475. * *
  3476. * WARNINGS: none *
  3477. * *
  3478. * HISTORY: *
  3479. * 06/29/1995 JLB : Created. *
  3480. *=============================================================================================*/
  3481. int BuildingTypeClass::Max_Pips(void) const
  3482. {
  3483. int maxpips = (Width() * ICON_PIXEL_W) / 4;
  3484. return(Bound((int)(Capacity/100), 0, maxpips));
  3485. }
  3486. /***********************************************************************************************
  3487. * BuildingTypeClass::Raw_Cost -- Fetches the raw (base) cost of this building type. *
  3488. * *
  3489. * This routine is used to fetch the real raw base cost of the building. The raw cost *
  3490. * is the cost of the building less any free unit that would come with the building *
  3491. * if it were built in the normal fashion. Specifically, the helicopter cost is subtracted *
  3492. * from the helipad and the harvester cost is subtracted from the refinery. This cost *
  3493. * is used for refunding. *
  3494. * *
  3495. * INPUT: none *
  3496. * *
  3497. * OUTPUT: Returns the raw (base) cost to build the building of this type. *
  3498. * *
  3499. * WARNINGS: none *
  3500. * *
  3501. * HISTORY: *
  3502. * 09/21/1995 JLB : Created. *
  3503. *=============================================================================================*/
  3504. int BuildingTypeClass::Raw_Cost(void) const
  3505. {
  3506. int cost = TechnoTypeClass::Raw_Cost();
  3507. if (Type == STRUCT_HELIPAD && !Rule.IsSeparate) {
  3508. cost -= (AircraftTypeClass::As_Reference(AIRCRAFT_HIND).Cost + AircraftTypeClass::As_Reference(AIRCRAFT_HIND).Cost)/2;
  3509. }
  3510. if (Type == STRUCT_REFINERY) {
  3511. cost -= UnitTypeClass::As_Reference(UNIT_HARVESTER).Cost;
  3512. }
  3513. return(cost);
  3514. }
  3515. /***********************************************************************************************
  3516. * BuildingTypeClass::Cost_Of -- Fetches the cost of this building. *
  3517. * *
  3518. * This routine will fetch the cost to build the building of this type. *
  3519. * *
  3520. * INPUT: none *
  3521. * *
  3522. * OUTPUT: Returns with the cost to produce this building. *
  3523. * *
  3524. * WARNINGS: none *
  3525. * *
  3526. * HISTORY: *
  3527. * 09/21/1995 JLB : Created. *
  3528. *=============================================================================================*/
  3529. int BuildingTypeClass::Cost_Of(void) const
  3530. {
  3531. if (Rule.IsSeparate && Type == STRUCT_HELIPAD) {
  3532. return(Raw_Cost());
  3533. }
  3534. return(TechnoTypeClass::Cost_Of());
  3535. }
  3536. /***********************************************************************************************
  3537. * BuildingTypeClass::Flush_For_Placement -- Tries to clear placement area for this building t *
  3538. * *
  3539. * This routine is called when a clear space for placement is desired at the cell location *
  3540. * specified. Typical use of this routine is by the computer when it wants to build up *
  3541. * its base. *
  3542. * *
  3543. * INPUT: cell -- The cell that the building of this type would like to be placed down at. *
  3544. * *
  3545. * house -- Pointer to the house that want to clear the foundation zone. *
  3546. * *
  3547. * OUTPUT: Placement is temporarily blocked, please try again later? *
  3548. * *
  3549. * WARNINGS: none *
  3550. * *
  3551. * HISTORY: *
  3552. * 09/27/1995 JLB : Created. *
  3553. *=============================================================================================*/
  3554. bool BuildingTypeClass::Flush_For_Placement(CELL cell, HouseClass * house) const
  3555. {
  3556. bool again = false;
  3557. if (cell > 0) {
  3558. short const * list = Occupy_List(true);
  3559. while (*list != REFRESH_EOL) {
  3560. CELL newcell = cell + *list++;
  3561. if (Map.In_Radar(newcell)) {
  3562. TechnoClass * occupier = Map[newcell].Cell_Techno();
  3563. if (occupier != NULL) {
  3564. again = true;
  3565. if (occupier->House->Is_Ally(house) && occupier->Is_Foot() && !Target_Legal(((FootClass *)occupier)->NavCom)) {
  3566. Map[newcell].Incoming(0, true);
  3567. } else {
  3568. // Base_Is_Attacked(occupier);
  3569. }
  3570. }
  3571. }
  3572. }
  3573. }
  3574. return(again);
  3575. }
  3576. /***********************************************************************************************
  3577. * BuildingTypeClass::Read_INI -- Fetch building type data from the INI database. *
  3578. * *
  3579. * This routine will fetch the building type class data from the INI database file. *
  3580. * *
  3581. * INPUT: ini -- Reference to the INI database that will be examined. *
  3582. * *
  3583. * OUTPUT: bool; Was the building entry found and the data extracted? *
  3584. * *
  3585. * WARNINGS: none *
  3586. * *
  3587. * HISTORY: *
  3588. * 07/19/1996 JLB : Created. *
  3589. *=============================================================================================*/
  3590. bool BuildingTypeClass::Read_INI(CCINIClass & ini)
  3591. {
  3592. if (TechnoTypeClass::Read_INI(ini)) {
  3593. Speed = ini.Get_Bool(Name(), "WaterBound", (Speed == SPEED_FLOAT)) ? SPEED_FLOAT : SPEED_NONE;
  3594. Capacity = ini.Get_Int(Name(), "Storage", Capacity);
  3595. Adjacent = ini.Get_Int(Name(), "Adjacent", Adjacent);
  3596. IsCaptureable = ini.Get_Bool(Name(), "Capturable", IsCaptureable);
  3597. IsPowered = ini.Get_Bool(Name(), "Powered", IsPowered);
  3598. IsBibbed = ini.Get_Bool(Name(), "Bib", IsBibbed);
  3599. IsUnsellable = ini.Get_Bool(Name(), "Unsellable", IsUnsellable);
  3600. IsBase = ini.Get_Bool(Name(), "BaseNormal", IsBase);
  3601. Power = ini.Get_Int(Name(), "Power", (Power > 0) ? Power : -Drain);
  3602. if (Power < 0) {
  3603. Drain = -Power;
  3604. Power = 0;
  3605. }
  3606. return(true);
  3607. }
  3608. return(false);
  3609. }
  3610. /***********************************************************************************************
  3611. * BuildingTypeClass::Coord_Fixup -- Adjusts coordinate to be legal for assignment. *
  3612. * *
  3613. * This routine will adjust the specified coordinate so that it will be legal for assignment*
  3614. * to this building. All buildings are given a coordinate that is in the upper left corner *
  3615. * of a cell. This routine will drop the fractional component of the coordinate. *
  3616. * *
  3617. * INPUT: coord -- The coordinate to fixup into a legal to assign value. *
  3618. * *
  3619. * OUTPUT: Returns with a coordinate that can be assigned to the building. *
  3620. * *
  3621. * WARNINGS: The coordinate is not examined to see if the cell is legal for placing the *
  3622. * building. It merely adjusts the coordinate so that is legal at first glance. *
  3623. * *
  3624. * HISTORY: *
  3625. * 08/14/1996 JLB : Created. *
  3626. *=============================================================================================*/
  3627. COORDINATE BuildingTypeClass::Coord_Fixup(COORDINATE coord) const
  3628. {
  3629. return Coord_Whole(coord);
  3630. }
  3631. /***********************************************************************************************
  3632. * BuildingTypeClass::Full_Name -- Fetches the name to give this building. *
  3633. * *
  3634. * This routine will return the displayable given name for this building type. Normally, *
  3635. * this is the official name as well, however in the case of civilian buildings, the *
  3636. * name will just be "Civilian Building" unless special options are in place. *
  3637. * *
  3638. * INPUT: none *
  3639. * *
  3640. * OUTPUT: Returns with the text number of the building type. *
  3641. * *
  3642. * WARNINGS: none *
  3643. * *
  3644. * HISTORY: *
  3645. * 10/02/1996 JLB : Created. *
  3646. *=============================================================================================*/
  3647. int BuildingTypeClass::Full_Name(void) const
  3648. {
  3649. if (Debug_Map || Rule.IsNamed || *this < STRUCT_V01 || *this > STRUCT_V37) {
  3650. return(TechnoTypeClass::Full_Name());
  3651. }
  3652. return(TXT_CIVILIAN_BUILDING);
  3653. }