Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #include "text.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include "PHL.h"
  6. #include "game.h"
  7.  
  8. char gameLanguage;
  9. Message* saving;
  10. Message* saveError[3];
  11. Message* itemName[41];
  12. Message* found;
  13. Message* itemDescription[28];
  14. Message* dungeon[8];
  15.  
  16. void loadMessage(Message* m, FILE* f);
  17. void trimMessage(Message* m);
  18.  
  19. void textInit()
  20. {
  21.         gameLanguage = JAPANESE;
  22.        
  23.         saving = (Message*)malloc(sizeof(Message));
  24.        
  25.         int i;
  26.         for (i = 0; i < 3; i++) {
  27.                 saveError[i] = (Message*)malloc(sizeof(Message));
  28.         }
  29.        
  30.         for (i = 0; i < 8; i++) {
  31.                 dungeon[i] = (Message*)malloc(sizeof(Message));
  32.         }
  33.        
  34.         for (i = 0; i < 41; i++) {
  35.                 itemName[i] = (Message*)malloc(sizeof(Message));
  36.         }
  37.        
  38.         found = (Message*)malloc(sizeof(Message));
  39.                
  40.         for (i = 0; i < 28; i++) {
  41.                 itemDescription[i] = (Message*)malloc(sizeof(Message));
  42.         }
  43.        
  44.         //printf("\nText init");
  45. }
  46.  
  47. void textFree()
  48. {
  49.         free(saving);
  50.        
  51.         int i;
  52.         for (i = 0; i < 3; i++) {
  53.                 free(saveError[i]);
  54.         }
  55.        
  56.         for (i = 0; i < 8; i++) {
  57.                 free(dungeon[i]);
  58.         }
  59.        
  60.         for (i = 0; i < 41; i++) {
  61.                 free(itemName[i]);
  62.         }
  63.        
  64.         free(found);
  65.                
  66.         for (i = 0; i < 28; i++) {
  67.                 free(itemDescription[i]);
  68.         }
  69. }
  70.  
  71. void loadText()
  72. {
  73.         FILE* f;
  74.        
  75.         char fullPath[30];
  76.         #ifdef _3DS
  77.                 strcpy(fullPath, "romfs:/");
  78.         #elif defined(_SDL)
  79.         strcpy(fullPath, "data/");
  80.         #else
  81.                 strcpy(fullPath, "romfs/");
  82.         #endif
  83.        
  84.         if (gameLanguage == ENGLISH) {
  85.                 strcat(fullPath, "en.dat");
  86.         }else{
  87.                 strcat(fullPath, "jp.dat");
  88.         }
  89.        
  90.         //printf("\n");
  91.         //printf(fullPath);
  92.        
  93.         if ( (f = fopen(fullPath, "rb")) )
  94.         {
  95.                 //printf("\ntext.dat found");
  96.                
  97.                 //Load saving message          
  98.                 loadMessage(saving, f);
  99.                
  100.                 //printf("\n%d", saving->length);
  101.                
  102.                 //Load save error message
  103.                 int i;
  104.                 for (i = 0; i < 3; i++) {
  105.                         loadMessage(saveError[i], f);
  106.                 }
  107.                
  108.                 //Load dungeon intros
  109.                 for (i = 0; i < 8; i++) {
  110.                         loadMessage(dungeon[i], f);
  111.                 }
  112.                
  113.                 //Load item names
  114.                 for (i = 0; i < 41; i++) {
  115.                         loadMessage(itemName[i], f);
  116.                 }
  117.                
  118.                 //Found!
  119.                 loadMessage(found, f);
  120.                
  121.                 //Load item descriptions
  122.                 for (i = 0; i < 28; i++) {
  123.                         loadMessage(itemDescription[i], f);
  124.                 }
  125.                
  126.         }else{
  127.                 //printf("\ntext.dat was not found");
  128.         }
  129.        
  130.         fclose(f);
  131. }
  132.  
  133. //Returns the next character X position
  134. int drawText(Message* m, int x, int y)
  135. {
  136.         int textw = 20;
  137.         int texth = 32;
  138.        
  139.         int dx = x;
  140.        
  141.         int i;
  142.         for (i = 0; i < m->length; i++) {
  143.                 PHL_DrawSurfacePart(dx, y, m->x[i] * textw, m->y[i] * texth, textw, texth, images[imgFontKana]);
  144.                 dx += textw - 2;
  145.         }
  146.        
  147.         return dx;
  148. }
  149.  
  150. int drawCharacter(int cx, int cy, int x, int y)
  151. {
  152.         int textw = 20;
  153.         int texth = 32;
  154.        
  155.         PHL_DrawSurfacePart(x, y, cx * textw, cy * texth, textw, texth, images[imgFontKana]);
  156.        
  157.         return x + textw - 2;
  158. }
  159.  
  160. void drawTextCentered(Message* m, int x, int y)
  161. {
  162.         int textw = 20;
  163.         int texth = 32;
  164.        
  165.         x -= (m->length / 2) * (textw - 2);
  166.        
  167.         int i;
  168.         for (i = 0; i < m->length; i++) {
  169.                 PHL_DrawSurfacePart(x + (i * (textw - 2)), y, m->x[i] * textw, m->y[i] * texth, textw, texth, images[imgFontKana]);
  170.         }
  171. }
  172.  
  173. void setLanguage(char lan)
  174. {
  175.         gameLanguage = lan;
  176.         loadText();
  177. }
  178.  
  179. char getLanguage()
  180. {
  181.         return gameLanguage;
  182. }
  183.  
  184. void loadMessage(Message* m, FILE* f)
  185. {
  186.         unsigned char* buffer = (unsigned char*)malloc(sizeof(unsigned char) * 64);
  187.        
  188.         int cnt = fread(buffer, 1, 64, f);
  189.        
  190.         int i;
  191.         for (i = 0; i < cnt; i+=2) {
  192.                 m->x[i/2] = buffer[i];
  193.                 m->y[i/2] = buffer[i+1];
  194.         }
  195.         trimMessage(m);
  196.        
  197.         free(buffer);
  198. }
  199.  
  200. void trimMessage(Message* m)
  201. {
  202.         m->length = 32;
  203.        
  204.         int i; 
  205.         for (i = 31; i >= 0; i--)
  206.         {
  207.                 if (m->x[i] == 0 && m->y[i] == 0) {
  208.                         m->length -= 1;
  209.                 }else{
  210.                         i = -1;
  211.                 }
  212.         }
  213. }