BDATA.CPP 196 KB

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