CPreGameTextHandler.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  1. #include "stdafx.h"
  2. #include "CPreGameTextHandler.h"
  3. #include "CGameInfo.h"
  4. std::string CPreGameTextHandler::getTitle(std::string text)
  5. {
  6. std::string ret;
  7. int i=0;
  8. while ((text[i++]!='{'));
  9. while ((text[i]!='}') && (i<text.length()))
  10. ret+=text[i++];
  11. return ret;
  12. }
  13. std::string CPreGameTextHandler::getDescr(std::string text)
  14. {
  15. std::string ret;
  16. int i=0;
  17. while ((text[i++]!='}'));
  18. i+=2;
  19. while ((text[i]!='"') && (i<text.length()))
  20. ret+=text[i++];
  21. return ret;
  22. }
  23. void CPreGameTextHandler::loadTexts()
  24. {
  25. std::ifstream inp("H3bitmap.lod\\ZELP.TXT", std::ios::in|std::ios::binary);
  26. inp.seekg(0,std::ios::end); // na koniec
  27. int andame = inp.tellg(); // read length
  28. inp.seekg(0,std::ios::beg); // wracamy na poczatek
  29. char * bufor = new char[andame]; // allocate memory
  30. inp.read((char*)bufor, andame); // read map file to buffer
  31. inp.close();
  32. std::string buf = std::string(bufor);
  33. delete [andame] bufor;
  34. int i=0; //buf iterator
  35. int hmcr=0;
  36. for(i; i<andame; ++i)
  37. {
  38. if(buf[i]=='\r')
  39. ++hmcr;
  40. if(hmcr==3)
  41. break;
  42. }
  43. i+=3;
  44. int befi=i;
  45. for(i; i<andame; ++i)
  46. {
  47. if(buf[i]=='\t')
  48. break;
  49. }
  50. mainNewGame = buf.substr(befi, i-befi);
  51. ++i;
  52. hmcr = 0;
  53. for(i; i<andame; ++i)
  54. {
  55. if(buf[i]=='\r')
  56. ++hmcr;
  57. if(hmcr==1)
  58. break;
  59. }
  60. i+=3;
  61. befi=i;
  62. for(i; i<andame; ++i)
  63. {
  64. if(buf[i]=='\t')
  65. break;
  66. }
  67. mainLoadGame = buf.substr(befi, i-befi);
  68. ++i;
  69. hmcr = 0;
  70. for(i; i<andame; ++i)
  71. {
  72. if(buf[i]=='\r')
  73. ++hmcr;
  74. if(hmcr==1)
  75. break;
  76. }
  77. i+=3;
  78. befi=i;
  79. for(i; i<andame; ++i)
  80. {
  81. if(buf[i]=='\t')
  82. break;
  83. }
  84. mainHighScores = buf.substr(befi, i-befi);
  85. ++i;
  86. hmcr = 0;
  87. for(i; i<andame; ++i)
  88. {
  89. if(buf[i]=='\r')
  90. ++hmcr;
  91. if(hmcr==1)
  92. break;
  93. }
  94. i+=3;
  95. befi=i;
  96. for(i; i<andame; ++i)
  97. {
  98. if(buf[i]=='\t')
  99. break;
  100. }
  101. mainCredits = buf.substr(befi, i-befi);
  102. ++i;
  103. hmcr = 0;
  104. for(i; i<andame; ++i)
  105. {
  106. if(buf[i]=='\r')
  107. ++hmcr;
  108. if(hmcr==1)
  109. break;
  110. }
  111. i+=3;
  112. befi=i;
  113. for(i; i<andame; ++i)
  114. {
  115. if(buf[i]=='\t')
  116. break;
  117. }
  118. mainQuit = buf.substr(befi, i-befi);
  119. ++i;
  120. hmcr = 0;
  121. for(i; i<andame; ++i)
  122. {
  123. if(buf[i]=='\r')
  124. ++hmcr;
  125. if(hmcr==3)
  126. break;
  127. }
  128. i+=3;
  129. befi=i;
  130. for(i; i<andame; ++i)
  131. {
  132. if(buf[i]=='\t')
  133. break;
  134. }
  135. ngSingleScenario = buf.substr(befi, i-befi);
  136. ++i;
  137. hmcr = 0;
  138. for(i; i<andame; ++i)
  139. {
  140. if(buf[i]=='\r')
  141. ++hmcr;
  142. if(hmcr==1)
  143. break;
  144. }
  145. i+=3;
  146. befi=i;
  147. for(i; i<andame; ++i)
  148. {
  149. if(buf[i]=='\t')
  150. break;
  151. }
  152. ngCampain = buf.substr(befi, i-befi);
  153. ++i;
  154. hmcr = 0;
  155. for(i; i<andame; ++i)
  156. {
  157. if(buf[i]=='\r')
  158. ++hmcr;
  159. if(hmcr==1)
  160. break;
  161. }
  162. i+=3;
  163. befi=i;
  164. for(i; i<andame; ++i)
  165. {
  166. if(buf[i]=='\t')
  167. break;
  168. }
  169. ngMultiplayer = buf.substr(befi, i-befi);
  170. ++i;
  171. hmcr = 0;
  172. for(i; i<andame; ++i)
  173. {
  174. if(buf[i]=='\r')
  175. ++hmcr;
  176. if(hmcr==1)
  177. break;
  178. }
  179. i+=3;
  180. befi=i;
  181. for(i; i<andame; ++i)
  182. {
  183. if(buf[i]=='\t')
  184. break;
  185. }
  186. ngTutorial = buf.substr(befi, i-befi);
  187. ++i;
  188. hmcr = 0;
  189. for(i; i<andame; ++i)
  190. {
  191. if(buf[i]=='\r')
  192. ++hmcr;
  193. if(hmcr==1)
  194. break;
  195. }
  196. i+=3;
  197. befi=i;
  198. for(i; i<andame; ++i)
  199. {
  200. if(buf[i]=='\t')
  201. break;
  202. }
  203. ngBack = buf.substr(befi, i-befi);
  204. ++i;
  205. hmcr = 0;
  206. for(i; i<andame; ++i)
  207. {
  208. if(buf[i]=='\r')
  209. ++hmcr;
  210. if(hmcr==4)
  211. break;
  212. }
  213. i+=2;
  214. loadToIt(singleChooseScenario, buf, i);
  215. loadToIt(singleSetAdvOptions, buf, i);
  216. loadToIt(singleRandomMap, buf, i);
  217. loadToIt(singleScenarioName, buf, i);
  218. loadToIt(singleDescriptionTitle, buf, i);
  219. loadToIt(singleDescriptionText, buf, i);
  220. loadToIt(singleEasy, buf, i);
  221. loadToIt(singleNormal, buf, i);
  222. loadToIt(singleHard, buf, i);
  223. loadToIt(singleExpert, buf, i);
  224. loadToIt(singleImpossible, buf, i);
  225. loadToIt(singleAllyFlag[0], buf, i);
  226. loadToIt(singleAllyFlag[1], buf, i);
  227. loadToIt(singleAllyFlag[2], buf, i);
  228. loadToIt(singleAllyFlag[3], buf, i, 1);
  229. loadToIt(singleAllyFlag[4], buf, i, 1);
  230. loadToIt(singleAllyFlag[5], buf, i, 1);
  231. loadToIt(singleAllyFlag[6], buf, i, 1);
  232. loadToIt(singleAllyFlag[7], buf, i, 1);
  233. loadToIt(singleEnemyFlag[0], buf, i, 1);
  234. loadToIt(singleEnemyFlag[1], buf, i, 1);
  235. loadToIt(singleEnemyFlag[2], buf, i, 1);
  236. loadToIt(singleEnemyFlag[3], buf, i, 1);
  237. loadToIt(singleEnemyFlag[4], buf, i, 1);
  238. loadToIt(singleEnemyFlag[5], buf, i, 1);
  239. loadToIt(singleEnemyFlag[6], buf, i, 1);
  240. loadToIt(singleEnemyFlag[7], buf, i, 1);
  241. loadToIt(singleViewHideScenarioList, buf, i, 1);
  242. loadToIt(singleViewHideAdvOptions, buf, i, 1);
  243. loadToIt(singlePlayRandom, buf, i, 1);
  244. loadToIt(singleChatDesc, buf, i, 1);
  245. loadToIt(singleMapDifficulty, buf, i, 1);
  246. loadToIt(singleRating, buf, i, 1);
  247. loadToIt(singleMapPossibleDifficulties, buf, i, 1);
  248. loadToIt(singleVicCon, buf, i, 1);
  249. loadToIt(singleLossCon, buf, i, 1);
  250. loadToIt(singleSFilter, buf, i, 1);
  251. loadToIt(singleMFilter, buf, i, 1);
  252. loadToIt(singleLFilter, buf, i, 1);
  253. loadToIt(singleXLFilter, buf, i, 1);
  254. loadToIt(singleAllFilter, buf, i, 1);
  255. for(int vv=0; vv<18; ++vv)
  256. {
  257. loadToIt(singleScenarioNameNr[vv], buf, i, 1);
  258. }
  259. for(int vv=0; vv<18; ++vv)
  260. {
  261. loadToIt(singleEntryScenarioNameNr[vv], buf, i, 1);
  262. }
  263. std::string ff = singleEntryScenarioNameNr[4];
  264. loadToIt(singleTurnDuration, buf, i, 1);
  265. loadToIt(singleChatText, buf, i, 0);
  266. loadToIt(singleChatEntry, buf, i, 0);
  267. loadToIt(singleChatPlug, buf, i, 0);
  268. loadToIt(singleChatPlayer, buf, i, 0);
  269. loadToIt(singleChatPlayerSlider, buf, i, 0);
  270. loadToIt(singleRollover, buf, i, 0);
  271. loadToIt(singleNext, buf, i, 0);
  272. loadToIt(singleBegin, buf, i, 0);
  273. loadToIt(singleBack, buf, i, 0);
  274. loadToIt(singleSSExit, buf, i, 0);
  275. loadToIt(singleWhichMap, buf, i, 0);
  276. loadToIt(singleSortNumber, buf, i, 0);
  277. loadToIt(singleSortSize, buf, i, 0);
  278. loadToIt(singleSortVersion, buf, i, 0);
  279. loadToIt(singleSortAlpha, buf, i, 0);
  280. loadToIt(singleSortVictory, buf, i, 0);
  281. loadToIt(singleSortLoss, buf, i, 1);
  282. loadToIt(singleBriefing, buf, i, 1);
  283. loadToIt(singleSSHero, buf, i, 1);
  284. loadToIt(singleGoldpic, buf, i, 1);
  285. for(int vv=0; vv<8; ++vv)
  286. {
  287. loadToIt(singleHumanCPU[vv], buf, i, 1);
  288. }
  289. for(int vv=0; vv<8; ++vv)
  290. {
  291. loadToIt(singleHandicap[vv], buf, i, 1);
  292. }
  293. for(int vv=0; vv<8; ++vv)
  294. {
  295. loadToIt(singleTownLeft[vv], buf, i, 1);
  296. }
  297. for(int vv=0; vv<8; ++vv)
  298. {
  299. loadToIt(singleTownRite[vv], buf, i, 1);
  300. }
  301. for(int vv=0; vv<8; ++vv)
  302. {
  303. loadToIt(singleHeroLeft[vv], buf, i, 1);
  304. }
  305. for(int vv=0; vv<8; ++vv)
  306. {
  307. loadToIt(singleHeroRite[vv], buf, i, 1);
  308. }
  309. for(int vv=0; vv<8; ++vv)
  310. {
  311. loadToIt(singleResLeft[vv], buf, i, 1);
  312. }
  313. for(int vv=0; vv<8; ++vv)
  314. {
  315. loadToIt(singleResRite[vv], buf, i, 1);
  316. }
  317. for(int vv=0; vv<8; ++vv)
  318. {
  319. loadToIt(singleHeroSetting[vv], buf, i, 1);
  320. }
  321. for(int vv=0; vv<8; ++vv)
  322. {
  323. loadToIt(singleTownSetting[vv], buf, i, 1);
  324. }
  325. loadToIt(singleConstCreateMap, buf, i, 1);
  326. loadToIt(singleConstMapSizeLabel, buf, i, 1);
  327. loadToIt(singleConstSmallMap, buf, i, 1);
  328. loadToIt(singleConstMediumMap, buf, i, 1);
  329. loadToIt(singleConstLargeMap, buf, i, 1);
  330. loadToIt(singleConstHugeMap, buf, i, 1);
  331. loadToIt(singleConstMapLevels, buf, i, 1);
  332. loadToIt(singleConstHumanPositionsLabel, buf, i, 1);
  333. for(int vv=0; vv<8; ++vv)
  334. {
  335. loadToIt(singleConstNHumans[vv], buf, i, 1);
  336. }
  337. loadToIt(singleConstRandomHumans, buf, i, 1);
  338. loadToIt(singleConstHumanTeamsLabel, buf, i, 1);
  339. loadToIt(singleConstNoHumanTeams, buf, i, 1);
  340. for(int vv=0; vv<7; ++vv)
  341. {
  342. loadToIt(singleConstNHumanTeams[vv], buf, i, 1);
  343. }
  344. loadToIt(singleConstRandomHumanTeams, buf, i, 1);
  345. loadToIt(singleConstComputerPositionsLabel, buf, i, 1);
  346. loadToIt(singleConstNoComputers, buf, i, 1);
  347. for(int vv=0; vv<7; ++vv)
  348. {
  349. loadToIt(singleConstNComputers[vv], buf, i, 1);
  350. }
  351. loadToIt(singleConstRandomComputers, buf, i, 1);
  352. loadToIt(singleConstComputerTeamsLabel, buf, i, 1);
  353. loadToIt(singleConstNoComputerTeams, buf, i, 1);
  354. for(int vv=0; vv<6; ++vv)
  355. {
  356. loadToIt(singleConstNComputerTeams[vv], buf, i, 1);
  357. }
  358. loadToIt(singleConstRandomComputerTeams, buf, i, 1);
  359. loadToIt(singleConstWaterLabel, buf, i, 1);
  360. loadToIt(singleConstNoWater, buf, i, 1);
  361. loadToIt(singleConstNormalWater, buf, i, 1);
  362. loadToIt(singleConstIslands, buf, i, 1);
  363. loadToIt(singleConstRandomWater, buf, i, 1);
  364. loadToIt(singleConstMonsterStrengthLabel, buf, i, 1);
  365. loadToIt(singleConstWeakMonsters, buf, i, 1);
  366. loadToIt(singleConstNormalMonsters, buf, i, 1);
  367. loadToIt(singleConstStrongMonsters, buf, i, 1);
  368. loadToIt(singleConstRandomMonsters, buf, i, 1);
  369. loadToIt(singleConstShowSavedRandomMaps, buf, i, 1);
  370. loadToIt(singleSliderChatWindow, buf, i, 1);
  371. loadToIt(singleSliderFileMenu, buf, i, 1);
  372. loadToIt(singleSliderDuration, buf, i, 1);
  373. loadToIt(singlePlayerHandicapHeaderID, buf, i, 0);
  374. loadToIt(singleTurnDurationHeaderID, buf, i, 0);
  375. loadToIt(singleStartingTownHeaderID, buf, i, 0);
  376. loadToIt(singleStartingTownHeaderWConfluxID, buf, i, 0);
  377. loadToIt(singleStartingHeroHeaderID, buf, i, 0);
  378. loadToIt(singleStartingBonusHeaderID, buf, i, 0);
  379. hmcr = 0;
  380. for(i; i<andame; ++i)
  381. {
  382. if(buf[i]=='\r')
  383. ++hmcr;
  384. if(hmcr==3)
  385. break;
  386. }
  387. i+=2;
  388. loadToIt(multiOnlineService, buf, i, 0);
  389. loadToIt(multiHotSeat, buf, i, 0);
  390. loadToIt(multiIPX, buf, i, 0);
  391. loadToIt(multiTCPIP, buf, i, 0);
  392. loadToIt(multiModem, buf, i, 0);
  393. loadToIt(multiDirectConnection, buf, i, 0);
  394. loadToIt(multiHostGame, buf, i, 0);
  395. loadToIt(multiJoinGame, buf, i, 1);
  396. loadToIt(multiSearchGame, buf, i, 1);
  397. for(int vv=0; vv<12; ++vv)
  398. {
  399. loadToIt(multiGameNo[vv], buf, i, 1);
  400. }
  401. loadToIt(multiScrollGames, buf, i, 1);
  402. std::string dump;
  403. loadToIt(dump, buf, i, 1);
  404. loadToIt(multiCancel, buf, i, 0);
  405. loadLossConditions();
  406. loadVictoryConditions();
  407. }
  408. void CPreGameTextHandler::loadToIt(std::string &dest, std::string &src, int &iter, int mode)
  409. {
  410. switch(mode)
  411. {
  412. case 0:
  413. {
  414. int hmcr = 0;
  415. for(iter; iter<src.size(); ++iter)
  416. {
  417. if(src[iter]=='\t')
  418. ++hmcr;
  419. if(hmcr==1)
  420. break;
  421. }
  422. ++iter;
  423. int befi=iter;
  424. for(iter; iter<src.size(); ++iter)
  425. {
  426. if(src[iter]=='\t')
  427. break;
  428. }
  429. dest = src.substr(befi, iter-befi);
  430. ++iter;
  431. hmcr = 0;
  432. for(iter; iter<src.size(); ++iter)
  433. {
  434. if(src[iter]=='\r')
  435. ++hmcr;
  436. if(hmcr==1)
  437. break;
  438. }
  439. iter+=2;
  440. break;
  441. }
  442. case 1:
  443. {
  444. int hmcr = 0;
  445. for(iter; iter<src.size(); ++iter)
  446. {
  447. if(src[iter]=='\t')
  448. ++hmcr;
  449. if(hmcr==1)
  450. break;
  451. }
  452. ++iter;
  453. int befi=iter;
  454. for(iter; iter<src.size(); ++iter)
  455. {
  456. if(src[iter]=='\r')
  457. break;
  458. }
  459. dest = src.substr(befi, iter-befi);
  460. iter+=2;
  461. }
  462. }
  463. //loadLossConditions();
  464. //loadVictoryConditions(); //moved to loadTexts
  465. }
  466. void CPreGameTextHandler::loadVictoryConditions()
  467. {
  468. //std::ifstream inp("H3bitmap.lod\\VCDESC.TXT", std::ios::in|std::ios::binary);
  469. //inp.seekg(0,std::ios::end); // na koniec
  470. //int andame = inp.tellg(); // read length
  471. //inp.seekg(0,std::ios::beg); // wracamy na poczatek
  472. //char * bufor = new char[andame]; // allocate memory
  473. //inp.read((char*)bufor, andame); // read map file to buffer
  474. //inp.close();
  475. //std::string buf = std::string(bufor);
  476. //delete [andame] bufor;
  477. std::string buf = CGameInfo::mainObj->bitmaph->getTextFile("VCDESC.TXT");
  478. int andame = buf.size();
  479. int i=0; //buf iterator
  480. for(int gg=0; gg<14; ++gg)
  481. {
  482. int befi=i;
  483. for(i; i<andame; ++i)
  484. {
  485. if(buf[i]=='\r')
  486. break;
  487. }
  488. victoryConditions[gg] = buf.substr(befi, i-befi);
  489. i+=2;
  490. }
  491. }
  492. void CPreGameTextHandler::loadLossConditions()
  493. {
  494. //std::ifstream inp("H3bitmap.lod\\LCDESC.TXT", std::ios::in|std::ios::binary);
  495. //inp.seekg(0,std::ios::end); // na koniec
  496. //int andame = inp.tellg(); // read length
  497. //inp.seekg(0,std::ios::beg); // wracamy na poczatek
  498. //char * bufor = new char[andame]; // allocate memory
  499. //inp.read((char*)bufor, andame); // read map file to buffer
  500. //inp.close();
  501. //std::string buf = std::string(bufor);
  502. //delete [andame] bufor;
  503. std::string buf = CGameInfo::mainObj->bitmaph->getTextFile("LCDESC.TXT");
  504. int andame = buf.size();
  505. int i=0; //buf iterator
  506. for(int gg=0; gg<4; ++gg)
  507. {
  508. int befi=i;
  509. for(i; i<andame; ++i)
  510. {
  511. if(buf[i]=='\r')
  512. break;
  513. }
  514. lossCondtions[gg] = buf.substr(befi, i-befi);
  515. i+=2;
  516. }
  517. }