CPreGameTextHandler.cpp 14 KB

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