CPreGameTextHandler.cpp 14 KB

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