high.c 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /*
  2. Copyright (C) 2005, 2010 - Cryptic Sea
  3. This file is part of Gish.
  4. Gish is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. See the GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  15. */
  16. void highscoremenu(int levelnum)
  17. {
  18. int count,count2;
  19. int replaysaved;
  20. float bright;
  21. replaysaved=0;
  22. count2=-1;
  23. if (game.exit==4)
  24. {
  25. count2=10;
  26. while (count2>0 && game.time>highscore[levelnum][count2-1].time)
  27. count2--;
  28. if (count2!=10)
  29. {
  30. for (count=10;count>=count2;count--)
  31. {
  32. highscore[levelnum][count+1].time=highscore[levelnum][count].time;
  33. memcpy(highscore[levelnum][count+1].name,highscore[levelnum][count].name,32);
  34. }
  35. highscore[levelnum][count2].time=game.time;
  36. memcpy(highscore[levelnum][count2].name,player[playernum].name,32);
  37. }
  38. }
  39. resetmenuitems();
  40. while (!menuitem[0].active && !windowinfo.shutdown)
  41. {
  42. glClearColor(0.0f,0.0f,0.0f,0.0f);
  43. glClear(GL_COLOR_BUFFER_BIT);
  44. numofmenuitems=0;
  45. createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f);
  46. setmenuitem(MO_HOTKEY,SCAN_ESC);
  47. if (game.exit==4)
  48. if (!replaysaved)
  49. createmenuitem(TXT_SAVEREPLAY,96,356,16,1.0f,1.0f,1.0f,1.0f);
  50. if (game.exit!=4)
  51. {
  52. count=320;
  53. createmenuitem(TXT_LEVEL" 1",64,count,16,1.0f,1.0f,1.0f,1.0f);
  54. setmenuitem(MO_SET,&levelnum,1);
  55. count+=16;
  56. createmenuitem(TXT_LEVEL" 2",64,count,16,1.0f,1.0f,1.0f,1.0f);
  57. setmenuitem(MO_SET,&levelnum,2);
  58. count+=16;
  59. createmenuitem(TXT_LEVEL" 3",64,count,16,1.0f,1.0f,1.0f,1.0f);
  60. setmenuitem(MO_SET,&levelnum,3);
  61. count+=16;
  62. createmenuitem(TXT_LEVEL" 4",64,count,16,1.0f,1.0f,1.0f,1.0f);
  63. setmenuitem(MO_SET,&levelnum,4);
  64. count+=16;
  65. createmenuitem(TXT_LEVEL" 5",64,count,16,1.0f,1.0f,1.0f,1.0f);
  66. setmenuitem(MO_SET,&levelnum,5);
  67. count+=16;
  68. createmenuitem(TXT_LEVEL" 6",64,count,16,1.0f,1.0f,1.0f,1.0f);
  69. setmenuitem(MO_SET,&levelnum,6);
  70. count+=16;
  71. createmenuitem(TXT_LEVEL" 7",64,count,16,1.0f,1.0f,1.0f,1.0f);
  72. setmenuitem(MO_SET,&levelnum,7);
  73. count+=16;
  74. createmenuitem(TXT_LEVEL" 8",64,count,16,1.0f,1.0f,1.0f,1.0f);
  75. setmenuitem(MO_SET,&levelnum,8);
  76. count+=16;
  77. count=320;
  78. createmenuitem(TXT_LEVEL" 9",240,count,16,1.0f,1.0f,1.0f,1.0f);
  79. setmenuitem(MO_SET,&levelnum,9);
  80. count+=16;
  81. createmenuitem(TXT_LEVEL" 10",240,count,16,1.0f,1.0f,1.0f,1.0f);
  82. setmenuitem(MO_SET,&levelnum,10);
  83. count+=16;
  84. createmenuitem(TXT_LEVEL" 11",240,count,16,1.0f,1.0f,1.0f,1.0f);
  85. setmenuitem(MO_SET,&levelnum,11);
  86. count+=16;
  87. createmenuitem(TXT_LEVEL" 12",240,count,16,1.0f,1.0f,1.0f,1.0f);
  88. setmenuitem(MO_SET,&levelnum,12);
  89. count+=16;
  90. createmenuitem(TXT_LEVEL" 13",240,count,16,1.0f,1.0f,1.0f,1.0f);
  91. setmenuitem(MO_SET,&levelnum,13);
  92. count+=16;
  93. createmenuitem(TXT_LEVEL" 14",240,count,16,1.0f,1.0f,1.0f,1.0f);
  94. setmenuitem(MO_SET,&levelnum,14);
  95. count+=16;
  96. createmenuitem(TXT_LEVEL" 15",240,count,16,1.0f,1.0f,1.0f,1.0f);
  97. setmenuitem(MO_SET,&levelnum,15);
  98. count+=16;
  99. createmenuitem(TXT_LEVEL" 16",240,count,16,1.0f,1.0f,1.0f,1.0f);
  100. setmenuitem(MO_SET,&levelnum,16);
  101. count+=16;
  102. count=320;
  103. createmenuitem(TXT_LEVEL" 17",416,count,16,1.0f,1.0f,1.0f,1.0f);
  104. setmenuitem(MO_SET,&levelnum,17);
  105. count+=16;
  106. createmenuitem(TXT_LEVEL" 18",416,count,16,1.0f,1.0f,1.0f,1.0f);
  107. setmenuitem(MO_SET,&levelnum,18);
  108. count+=16;
  109. createmenuitem(TXT_LEVEL" 19",416,count,16,1.0f,1.0f,1.0f,1.0f);
  110. setmenuitem(MO_SET,&levelnum,19);
  111. count+=16;
  112. createmenuitem(TXT_LEVEL" 20",416,count,16,1.0f,1.0f,1.0f,1.0f);
  113. setmenuitem(MO_SET,&levelnum,20);
  114. count+=16;
  115. createmenuitem(TXT_LEVEL" 21",416,count,16,1.0f,1.0f,1.0f,1.0f);
  116. setmenuitem(MO_SET,&levelnum,21);
  117. count+=16;
  118. createmenuitem(TXT_LEVEL" 22",416,count,16,1.0f,1.0f,1.0f,1.0f);
  119. setmenuitem(MO_SET,&levelnum,22);
  120. count+=16;
  121. createmenuitem(TXT_LEVEL" 23",416,count,16,1.0f,1.0f,1.0f,1.0f);
  122. setmenuitem(MO_SET,&levelnum,23);
  123. count+=16;
  124. }
  125. checksystemmessages();
  126. checkkeyboard();
  127. checkmouse();
  128. checkjoystick();
  129. checkmenuitems();
  130. updateogg();
  131. checkmusic();
  132. game.songnum=8;
  133. soundsimulation(view.position,view.orientation);
  134. setuptextdisplay();
  135. glColor4f(1.0f,1.0f,1.0f,1.0f);
  136. displaybackground(580);
  137. drawtext(TXT_LEVEL_HIGHSCORE,(320|TEXT_CENTER),48,16,1.0f,1.0f,1.0f,1.0f,levelnum);
  138. drawtext(TXT_NAME,96+64,80,16,1.0f,1.0f,1.0f,1.0f);
  139. drawtext(TXT_TIME,96+320,80,16,1.0f,1.0f,1.0f,1.0f);
  140. for (count=0;count<10;count++)
  141. {
  142. if (count==count2 || count2==-1)
  143. bright=1.0f;
  144. else
  145. bright=0.5f;
  146. drawtext("/i.",96,112+count*16,16,bright,bright,bright,1.0f,count+1);
  147. drawtext(highscore[levelnum][count].name,96+64,112+count*16,16,bright,bright,bright,1.0f);
  148. if (((highscore[levelnum][count].time/50)%60)>=10)
  149. drawtext("/i:/i./i",96+320,112+count*16,16,bright,bright,bright,1.0f,(highscore[levelnum][count].time/3000),((highscore[levelnum][count].time/50)%60),((highscore[levelnum][count].time/5)%10));
  150. else
  151. drawtext("/i:0/i./i",96+320,112+count*16,16,bright,bright,bright,1.0f,(highscore[levelnum][count].time/3000),((highscore[levelnum][count].time/50)%60),((highscore[levelnum][count].time/5)%10));
  152. }
  153. if (game.exit==4)
  154. {
  155. drawtext(player[playernum].name,96+64,292,16,1.0f,1.0f,1.0f,1.0f);
  156. if (((game.time/50)%60)>=10)
  157. drawtext("/i:/i./i",96+320,292,16,1.0f,1.0f,1.0f,1.0f,(game.time/3000),((game.time/50)%60),((game.time/5)%10));
  158. else
  159. drawtext("/i:0/i./i",96+320,292,16,1.0f,1.0f,1.0f,1.0f,(game.time/3000),((game.time/50)%60),((game.time/5)%10));
  160. }
  161. if (game.exit==4)
  162. if (replaysaved)
  163. createmenuitem(TXT_REPLAYSAVED,96,356,16,1.0f,1.0f,1.0f,1.0f);
  164. drawmenuitems();
  165. drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f);
  166. SDL_GL_SwapBuffers();
  167. if (game.exit==4)
  168. if (menuitem[1].active)
  169. {
  170. savereplay(levelnum);
  171. replaysaved=1;
  172. menuitem[1].active=0;
  173. }
  174. }
  175. resetmenuitems();
  176. }
  177. void savescores(void)
  178. {
  179. int count,count2;
  180. int version;
  181. if ((fp=fopen("gish.his","wb"))!=NULL)
  182. {
  183. version=2;
  184. fwrite2(&version,4,1,fp);
  185. for (count=0;count<32;count++)
  186. for (count2=0;count2<16;count2++)
  187. {
  188. fwrite2(&highscore[count][count2].time,4,1,fp);
  189. fwrite2(highscore[count][count2].name,1,32,fp);
  190. }
  191. fclose(fp);
  192. }
  193. }
  194. void loadscores(void)
  195. {
  196. int count,count2;
  197. int version;
  198. for (count=0;count<32;count++)
  199. for (count2=0;count2<16;count2++)
  200. {
  201. highscore[count][count2].time=0;
  202. strcpy(highscore[count][count2].name,"Empty");
  203. }
  204. if ((fp=fopen("gish.his","rb"))!=NULL)
  205. {
  206. fread2(&version,4,1,fp);
  207. if (version==2)
  208. {
  209. for (count=0;count<32;count++)
  210. for (count2=0;count2<16;count2++)
  211. {
  212. fread2(&highscore[count][count2].time,4,1,fp);
  213. fread2(highscore[count][count2].name,1,32,fp);
  214. }
  215. }
  216. fclose(fp);
  217. }
  218. }