home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame Game Cube 1: DOS / aztechhalloffamegamecubedisc1- / batlemm / bl_dos.c < prev    next >
C/C++ Source or Header  |  1995-04-16  |  54KB  |  1,923 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <graph.h>
  4. #include <conio.h>
  5. #include <malloc.h>
  6. #include <dos.h>
  7. #include <time.h>
  8. #include "keys.c"
  9. #include "palette.fct"
  10. #include "rotate.c"
  11. #include "sound.c"
  12. //#include "animate.c"
  13.  
  14. #define NUM_LINES     120
  15. #define TIME_SPEED     9
  16. #define SOUND_SPEED     10
  17. #define PALETTE_MASK     0x3c6
  18. #define PALETTE_REGISTER 0x3c8
  19. #define PALETTE_DATA     0x3c9
  20. #define PAUSE_KEY     153
  21.  
  22. /////////////////////////////////////////////////////////////////////////////
  23. //video_mem=(char far *)0xA0000000L;
  24. int PrevMode;
  25. char lem[2000];
  26. char bad_lemi[5][2000];
  27. long how_far;
  28. int curr_pal[768];
  29. FILE *fp;
  30. char mug[12696];
  31. char numbers[1440];
  32. char far *sounds[5];
  33. unsigned char lengths[5];
  34. char sound_num;
  35. int sound_timer;
  36. int sound_dist;
  37. int map_x,map_y;
  38. /////////////////////////////////////////////////////////////////////////////
  39. typedef struct
  40. {
  41. char far *line;
  42. }scroll_lines;
  43.  
  44. typedef struct
  45. {
  46. char  missle_graph[4][25];
  47. int   missle_pos[4][2];
  48. char  missle_speed[2];
  49. char  expl_graph[500];
  50. char  expl_frame;
  51. int   expl_pos[2];
  52. char  missle_start_sp[2];
  53. char  missle_fall;
  54. char  missle_range;
  55. }missle_typ;
  56.  
  57. typedef struct
  58. {
  59. char dir,frame,action,jump,fall;
  60. int x,y;
  61. char dead_alive;
  62. char *sprite_graph;
  63. char back_up;
  64. }sprite_typ;
  65.  
  66. typedef struct
  67. {
  68. sprite_typ *its_me;
  69. sprite_typ *kill_him;
  70. missle_typ *dodge_this;
  71. char move_or_not;
  72. char to_or_from;
  73. char shoot_or_not;
  74. char jump_or_not;
  75. char dodge_or_not;
  76. int how_far_to;
  77. int how_far_from;
  78. char keep_dir;
  79. long timer;
  80. char command;
  81. }brain_typ;
  82.  
  83. scroll_lines data[NUM_LINES];
  84.  
  85. typedef struct
  86. {
  87. FILE *level_graph;
  88. FILE *char_graphs[5];
  89. char main_char_gr;
  90. FILE *proj_graph[5];
  91. FILE *main_proj_gr;
  92. FILE *expl_graph[5];
  93. //FILE *main_expl_gr;
  94. //FILE *level_title;
  95. int start_seconds,
  96.     start_minutes,
  97.     start_hours;
  98. }level_typ;
  99. /////////////////////////////////////////////////////////////////////////////
  100. level_typ level;
  101. sprite_typ lemming;
  102. missle_typ green_ball;
  103. sprite_typ bad_lem[5];
  104. missle_typ blue_ball[5];
  105. brain_typ brains[5];
  106. /////////////////////////////////////////////////////////////////////////////
  107. void set_color(int index, char red, char green, char blue)
  108. {
  109. outp(PALETTE_MASK,0xff);
  110. outp(PALETTE_REGISTER,index);
  111. outp(PALETTE_DATA,red);
  112. outp(PALETTE_DATA,green);
  113. outp(PALETTE_DATA,blue);
  114. }
  115.  
  116. /////////////////////////////////////////////////////////////////////////////
  117. animate(char *filename, int num_frames)
  118. {
  119. char inp;
  120. int x,y,frame;
  121. char gr[30000];
  122.  
  123. //gr=(char *)malloc((unsigned int)30000);
  124.  
  125. //setvideomode(19);
  126.  
  127. for(x=0;x<256;x++)
  128.     set_color(x,pal[x*3+0],pal[x*3+1],pal[x*3+2]);
  129.  
  130. fp=fopen(filename,"rb");
  131. //printf("\r a");
  132.  
  133. for(frame=0;frame<num_frames;frame++)
  134. {
  135. //printf("\r                      1");
  136. fread(&gr,1,30000,fp);
  137. //printf("\r                      2");
  138. for(y=0;y<100;y++)
  139. //    for(x=0;x<200;x++)
  140. //    video_mem[x+y*320]=graph[y*200+x];
  141.     _fmemcpy((char far *)&video_mem[y*320+16010],(char far *)&gr[y*300],300);
  142. //printf("\r                      3");
  143. //inp=getch();
  144. }
  145.  
  146. printf("\r That is all. \n");
  147. fclose(fp);
  148.  
  149. //free(gr);
  150.  
  151. //setvideomode(3);
  152. }
  153.  
  154. /////////////////////////////////////////////////////////////////////////////
  155. void check_hit(sprite_typ *obj_me, missle_typ *obj_this,char which)
  156. {
  157. sprite_typ its_me;
  158. missle_typ dodge_this;
  159. long num,num2;
  160.  
  161. its_me       = *obj_me;
  162. dodge_this = *obj_this;
  163.  
  164. num  = (dodge_this.missle_pos[0][0]+2) - (its_me.x+5);
  165. num2 = (dodge_this.missle_pos[0][1]+2) - (its_me.y+5);
  166. if(num < 0)
  167.     num *= -1;
  168. if(num2< 0)
  169.     num2*= -1;
  170.  
  171. if(its_me.dead_alive)
  172.     {
  173.     set_color(255-which,85+rand()%3,0,0);
  174.     curr_pal[255-which+0]=85+rand()%3;
  175.     curr_pal[255-which+1]=0;
  176.     curr_pal[255-which+2]=0;
  177.     }
  178. if(num<=dodge_this.missle_range && num2<=dodge_this.missle_range && dodge_this.missle_speed[0])
  179.     {
  180.     its_me.back_up=0;
  181.     set_color(255-which,15,15,15);
  182.     curr_pal[255-which+0]=15;
  183.     curr_pal[255-which+1]=15;
  184.     curr_pal[255-which+2]=15;
  185.     fp=fopen("lem_dead.grf","rb");
  186.     fread(its_me.sprite_graph,1,400,fp);
  187.     fclose(fp);
  188.     its_me.frame=0;
  189.     its_me.action=0;
  190.     its_me.jump=0;
  191.     dodge_this.expl_pos[0]=dodge_this.missle_pos[0][0]-3;
  192.     dodge_this.expl_pos[1]=dodge_this.missle_pos[0][1]-5;
  193.     dodge_this.expl_frame=0;
  194.     dodge_this.missle_speed[0]=0;
  195.     Voc_Stop_Sound();
  196.     Voc_Play_Sound((char far *)sounds[0],lengths[0]);
  197.     }
  198. its_me.dead_alive=its_me.back_up;
  199. *obj_me=its_me;
  200. *obj_this=dodge_this;
  201. }
  202.  
  203. /////////////////////////////////////////////////////////////////////////////
  204.  
  205. char use_brains(brain_typ *think_o)
  206. {
  207. long num;
  208. long num2;
  209. brain_typ think;
  210.  
  211. think=*think_o;
  212.  
  213. think.command=0;
  214.  
  215. think.timer++;
  216. num=rand()%100;
  217.  
  218. if(think.timer>=10)
  219. {
  220. think.timer=0;
  221.  
  222. if(num < think.to_or_from)
  223. {
  224. if((think.kill_him->x) >= (think.its_me->x))
  225.     think.command=think.command | 0x10;
  226.  
  227. if((think.kill_him->x) <= (think.its_me->x))
  228.     think.command=think.command | 0x80;
  229. }
  230.  
  231. if(num > think.to_or_from)
  232. {
  233. if((think.kill_him->x) <= (think.its_me->x))
  234.     think.command=think.command | 0x10;
  235. if((think.kill_him->x) >= (think.its_me->x))
  236.     think.command=think.command | 0x80;
  237. }
  238.  
  239. if(rand()%100 > think.move_or_not)
  240.     think.command=think.command & 0x0F;
  241.  
  242. think.keep_dir=think.command & 0xF0;
  243. }
  244. if(think.its_me->dead_alive)
  245. if(rand()%100 < think.shoot_or_not)
  246.     {
  247.     if(think.kill_him->x < think.its_me->x)
  248.     think.its_me->dir=1;
  249.     else
  250.     think.its_me->dir=0;
  251.     think.command=think.command | 0x04;
  252.     }
  253.  
  254. if(rand()%100 < think.jump_or_not && data[think.its_me->y].line[think.its_me->x+10-10*think.its_me->dir]!=0)
  255.     think.command=think.command | 0x08;
  256.  
  257. num=(think.its_me->x)-(think.kill_him->x);
  258. if(num<0)
  259.     num*=-1;
  260.  
  261. //if(think->how_far_from > num)
  262. //    if(think->kill_him->x < think->its_me->x)
  263. //    {
  264. //    think->command=think->keep_dir & 0x0F;
  265. //    think->command=think->keep_dir | 0x10;
  266. //    }
  267. //    else
  268. //    {
  269. //    think->command=think->keep_dir & 0x0F;
  270. //    think->command=think->keep_dir | 0x80;
  271. //    }
  272.  
  273. //if(think->how_far_to < num)
  274. //    if(think->kill_him->x > think->its_me->x)
  275. //    {
  276. //    think->command=think->keep_dir & 0x0F;
  277. //    think->command=think->keep_dir | 0x10;
  278. //    }
  279. //    else
  280. //    {
  281. //    think->command=think->keep_dir & 0x0F;
  282. //    think->command=think->keep_dir | 0x80;
  283. //    }
  284.  
  285. num  = (think.dodge_this->missle_pos[0][0]+2) - (think.its_me->x+5);
  286. num2 = (think.dodge_this->missle_pos[0][1]+2) - (think.its_me->y+5);
  287. if(num<0)
  288.     num*=-1;
  289. if(num2<0)
  290.     num2=-1;
  291.  
  292. if(num<=15 && num2<=10 && (rand()%100)<=(think.dodge_or_not) && think.dodge_this->missle_speed[0]!=0)
  293.     think.command=think.command | 0x08;
  294.  
  295. if(num<=5 && num2<=5)
  296.     think.its_me->dead_alive=0;
  297.  
  298. //if(think->command & 0x80)
  299. //    video_mem[63680]=rand()%4+1;
  300. //if(think->command & 0x40)
  301. //    video_mem[63681]=rand()%4+1;
  302. //if(think->command & 0x20)
  303. //    video_mem[63682]=rand()%4+1;
  304. //if(think->command & 0x10)
  305. //    video_mem[63683]=rand()%4+1;
  306. //if(think->command & 0x08)
  307. //    video_mem[63684]=rand()%4+1;
  308. //if(think->command & 0x04)
  309. //    video_mem[63685]=rand()%4+1;
  310. //if(think->command & 0x02)
  311. //    video_mem[63686]=rand()%4+1;
  312. //if(think->command & 0x01)
  313. //    video_mem[63687]=rand()%4+1;
  314.  
  315. if(rand()%100<think.jump_or_not && data[think.its_me->y+15].line[think.its_me->x+12-14*think.its_me->dir]==0 && think.its_me->action==1)
  316.     think.command=think.command | 0x08;
  317.  
  318. think.command=think.command | think.keep_dir;
  319.  
  320. *think_o=think;
  321. return(think.command);
  322. }
  323.  
  324. /////////////////////////////////////////////////////////////////////////////
  325.  
  326. /////////////////////////////////////////////////////////////////////////////
  327. void move_missle(missle_typ *green_ball_o)
  328. {
  329.  
  330. missle_typ green_ball;
  331. green_ball=*green_ball_o;
  332.  
  333. if(green_ball.missle_speed[0])
  334. {
  335. green_ball.missle_pos[3][0]=green_ball.missle_pos[2][0];
  336. green_ball.missle_pos[3][1]=green_ball.missle_pos[2][1];
  337. green_ball.missle_pos[2][0]=green_ball.missle_pos[1][0];
  338. green_ball.missle_pos[2][1]=green_ball.missle_pos[1][1];
  339. green_ball.missle_pos[1][0]=green_ball.missle_pos[0][0];
  340. green_ball.missle_pos[1][1]=green_ball.missle_pos[0][1];
  341. green_ball.missle_pos[0][0]+=green_ball.missle_speed[0];
  342. green_ball.missle_pos[0][1]+=green_ball.missle_speed[1];
  343. }
  344.  
  345. if((data[green_ball.missle_pos[0][1]].line[green_ball.missle_pos[0][0]]) && green_ball.missle_speed[0]!=0)
  346.     {
  347.     if(green_ball.expl_frame>=5)
  348.     {
  349.     green_ball.expl_pos[0]=green_ball.missle_pos[0][0]-3;
  350.     green_ball.expl_pos[1]=green_ball.missle_pos[0][1]-5;
  351.     }
  352.     green_ball.expl_frame=0;
  353.     if(green_ball.missle_pos[0][0]>sound_dist-160 && green_ball.missle_pos[0][0]<sound_dist+160)
  354.     sound_num=1;
  355.     }
  356.  
  357. if((data[green_ball.missle_pos[0][1]].line[green_ball.missle_pos[0][0]]))
  358.     green_ball.missle_speed[0]=0;
  359.  
  360. if(green_ball.expl_frame<5)
  361.     green_ball.expl_frame++;
  362.  
  363. if(green_ball.missle_speed[0]!=0)
  364.     green_ball.missle_speed[1]+=green_ball.missle_fall;
  365.  
  366. if(green_ball.missle_pos[0][0]>630 || green_ball.missle_pos[0][0]<10)
  367.     green_ball.missle_speed[0] = 0;
  368. if(green_ball.missle_pos[0][1]>110 || green_ball.missle_pos[0][1]<10)
  369.     green_ball.missle_speed[0] = 0;
  370.  
  371. *green_ball_o=green_ball;
  372. }
  373. /////////////////////////////////////////////////////////////////////////////
  374. void draw_expl(missle_typ *object_o)
  375. {
  376. int p,num,curr_pict;
  377. missle_typ object;
  378.  
  379. object=*object_o;
  380.  
  381. for(num=0;num<10;num++)
  382. {
  383. //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  384. //for(p=0;p<10;p++)
  385.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+0]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+0];
  386.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+1]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+1];
  387.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+2]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+2];
  388.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+3]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+3];
  389.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+4]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+4];
  390.  
  391.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+5]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+5];
  392.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+6]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+6];
  393.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+7]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+7];
  394.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+8]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+8];
  395.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+9]+=object.expl_graph[object.expl_frame*100+(num<<1)+(num<<3)+9];
  396. }
  397.  
  398. //*object_o=object;
  399. }
  400. /////////////////////////////////////////////////////////////////////////////
  401. void undo_expl(missle_typ *object_o)
  402. {
  403. int p,num,curr_pict;
  404. missle_typ object;
  405.  
  406. object=*object_o;
  407.  
  408. for(num=0;num<10;num++)
  409. {
  410. //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  411. //for(p=0;p<10;p++)
  412.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]]-=object.expl_graph[object.expl_frame*100+num*10];
  413.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+1]-=object.expl_graph[object.expl_frame*100+num*10+1];
  414.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+2]-=object.expl_graph[object.expl_frame*100+num*10+2];
  415.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+3]-=object.expl_graph[object.expl_frame*100+num*10+3];
  416.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+4]-=object.expl_graph[object.expl_frame*100+num*10+4];
  417.  
  418.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+5]-=object.expl_graph[object.expl_frame*100+num*10+5];
  419.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+6]-=object.expl_graph[object.expl_frame*100+num*10+6];
  420.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+7]-=object.expl_graph[object.expl_frame*100+num*10+7];
  421.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+8]-=object.expl_graph[object.expl_frame*100+num*10+8];
  422.     data[(num+object.expl_pos[1])].line[object.expl_pos[0]+9]-=object.expl_graph[object.expl_frame*100+num*10+9];
  423. }
  424. }
  425.  
  426. /////////////////////////////////////////////////////////////////////////////
  427. void draw_missle(missle_typ *object)
  428. {
  429. int p,num,curr_pict;
  430. for(curr_pict=0;curr_pict<4;curr_pict++)
  431. {
  432. for(num=0;num<5;num++)
  433. {
  434. //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  435. //for(p=0;p<5;p++)
  436.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]]+=object->missle_graph[curr_pict][num*5];
  437.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]+1]+=object->missle_graph[curr_pict][1+num*5];
  438.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]+2]+=object->missle_graph[curr_pict][2+num*5];
  439.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]+3]+=object->missle_graph[curr_pict][3+num*5];
  440.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]+4]+=object->missle_graph[curr_pict][4+num*5];
  441. }
  442. }
  443. }
  444. /////////////////////////////////////////////////////////////////////////////
  445. void undo_missle(missle_typ *object)
  446. {
  447. int p,num,curr_pict;
  448. for(curr_pict=0;curr_pict<4;curr_pict++)
  449. {
  450. for(num=0;num<5;num++)
  451. {
  452. //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  453. //for(p=0;p<5;p++)
  454.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]]-=object->missle_graph[curr_pict][num*5];
  455.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]+1]-=object->missle_graph[curr_pict][num*5+1];
  456.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]+2]-=object->missle_graph[curr_pict][num*5+2];
  457.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]+3]-=object->missle_graph[curr_pict][num*5+3];
  458.     data[(num+object->missle_pos[curr_pict][1])].line[object->missle_pos[curr_pict][0]+4]-=object->missle_graph[curr_pict][num*5+4];
  459. }
  460. }
  461. }
  462.  
  463. /////////////////////////////////////////////////////////////////////////////
  464. void draw_sprite(sprite_typ *object_o)
  465. {
  466. int p,num;
  467. sprite_typ object;
  468.  
  469. object=*object_o;
  470.  
  471. if(object.dir==0)
  472. {
  473. for(num=0;num<10;num++)
  474. {
  475. //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  476. //for(p=0;p<10;p++)
  477.     data[(num+object.y)].line[object.x+0]+=object.sprite_graph[(num<<1)+(num<<3)+0+object.action*400+object.frame*100];
  478.     data[(num+object.y)].line[object.x+1]+=object.sprite_graph[(num<<1)+(num<<3)+1+object.action*400+object.frame*100];
  479.     data[(num+object.y)].line[object.x+2]+=object.sprite_graph[(num<<1)+(num<<3)+2+object.action*400+object.frame*100];
  480.     data[(num+object.y)].line[object.x+3]+=object.sprite_graph[(num<<1)+(num<<3)+3+object.action*400+object.frame*100];
  481.     data[(num+object.y)].line[object.x+4]+=object.sprite_graph[(num<<1)+(num<<3)+4+object.action*400+object.frame*100];
  482.  
  483.     data[(num+object.y)].line[object.x+5]+=object.sprite_graph[(num<<1)+(num<<3)+5+object.action*400+object.frame*100];
  484.     data[(num+object.y)].line[object.x+6]+=object.sprite_graph[(num<<1)+(num<<3)+6+object.action*400+object.frame*100];
  485.     data[(num+object.y)].line[object.x+7]+=object.sprite_graph[(num<<1)+(num<<3)+7+object.action*400+object.frame*100];
  486.     data[(num+object.y)].line[object.x+8]+=object.sprite_graph[(num<<1)+(num<<3)+8+object.action*400+object.frame*100];
  487.     data[(num+object.y)].line[object.x+9]+=object.sprite_graph[(num<<1)+(num<<3)+9+object.action*400+object.frame*100];
  488. }
  489. }
  490. else
  491.     {
  492.     for(num=0;num<10;num++)
  493.     {
  494.     //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  495. //    for(p=0;p<10;p++)
  496.     data[(num+object.y)].line[object.x+0]+=object.sprite_graph[(num<<1)+(num<<3)+9+object.action*400+object.frame*100];
  497.     data[(num+object.y)].line[object.x+1]+=object.sprite_graph[(num<<1)+(num<<3)+8+object.action*400+object.frame*100];
  498.     data[(num+object.y)].line[object.x+2]+=object.sprite_graph[(num<<1)+(num<<3)+7+object.action*400+object.frame*100];
  499.     data[(num+object.y)].line[object.x+3]+=object.sprite_graph[(num<<1)+(num<<3)+6+object.action*400+object.frame*100];
  500.     data[(num+object.y)].line[object.x+4]+=object.sprite_graph[(num<<1)+(num<<3)+5+object.action*400+object.frame*100];
  501.  
  502.     data[(num+object.y)].line[object.x+5]+=object.sprite_graph[(num<<1)+(num<<3)+4+object.action*400+object.frame*100];
  503.     data[(num+object.y)].line[object.x+6]+=object.sprite_graph[(num<<1)+(num<<3)+3+object.action*400+object.frame*100];
  504.     data[(num+object.y)].line[object.x+7]+=object.sprite_graph[(num<<1)+(num<<3)+2+object.action*400+object.frame*100];
  505.     data[(num+object.y)].line[object.x+8]+=object.sprite_graph[(num<<1)+(num<<3)+1+object.action*400+object.frame*100];
  506.     data[(num+object.y)].line[object.x+9]+=object.sprite_graph[(num<<1)+(num<<3)+object.action*400+object.frame*100];
  507.     }
  508.     }
  509. *object_o=object;
  510. }
  511. /////////////////////////////////////////////////////////////////////////////
  512. void undo_sprite(sprite_typ *object_o)
  513. {
  514. int p,num;
  515. sprite_typ object;
  516. object=*object_o;
  517.  
  518. if(object.dir==0)
  519. {
  520. for(num=0;num<10;num++)
  521. {
  522. //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  523. //for(p=0;p<10;p++)
  524. //    data[(num+object.y)].line[object.x+p]-=object.sprite_graph[num*10+p+object.action*400+object.frame*100];
  525.     data[(num+object.y)].line[object.x+0]-=object.sprite_graph[(num<<1)+(num<<3)+0+object.action*400+object.frame*100];
  526.     data[(num+object.y)].line[object.x+1]-=object.sprite_graph[(num<<1)+(num<<3)+1+object.action*400+object.frame*100];
  527.     data[(num+object.y)].line[object.x+2]-=object.sprite_graph[(num<<1)+(num<<3)+2+object.action*400+object.frame*100];
  528.     data[(num+object.y)].line[object.x+3]-=object.sprite_graph[(num<<1)+(num<<3)+3+object.action*400+object.frame*100];
  529.     data[(num+object.y)].line[object.x+4]-=object.sprite_graph[(num<<1)+(num<<3)+4+object.action*400+object.frame*100];
  530.  
  531.     data[(num+object.y)].line[object.x+5]-=object.sprite_graph[(num<<1)+(num<<3)+5+object.action*400+object.frame*100];
  532.     data[(num+object.y)].line[object.x+6]-=object.sprite_graph[(num<<1)+(num<<3)+6+object.action*400+object.frame*100];
  533.     data[(num+object.y)].line[object.x+7]-=object.sprite_graph[(num<<1)+(num<<3)+7+object.action*400+object.frame*100];
  534.     data[(num+object.y)].line[object.x+8]-=object.sprite_graph[(num<<1)+(num<<3)+8+object.action*400+object.frame*100];
  535.     data[(num+object.y)].line[object.x+9]-=object.sprite_graph[(num<<1)+(num<<3)+9+object.action*400+object.frame*100];
  536.  
  537. }
  538. }
  539. else
  540.     {
  541.     for(num=0;num<10;num++)
  542.     {
  543.     //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  544. //    for(p=0;p<10;p++)
  545. //    data[(num+object.y)].line[object.x+p]-=object.sprite_graph[num*10+(9-p)+object.action*400+object.frame*100];
  546.     data[(num+object.y)].line[object.x+0]-=object.sprite_graph[(num<<1)+(num<<3)+9+object.action*400+object.frame*100];
  547.     data[(num+object.y)].line[object.x+1]-=object.sprite_graph[(num<<1)+(num<<3)+8+object.action*400+object.frame*100];
  548.     data[(num+object.y)].line[object.x+2]-=object.sprite_graph[(num<<1)+(num<<3)+7+object.action*400+object.frame*100];
  549.     data[(num+object.y)].line[object.x+3]-=object.sprite_graph[(num<<1)+(num<<3)+6+object.action*400+object.frame*100];
  550.     data[(num+object.y)].line[object.x+4]-=object.sprite_graph[(num<<1)+(num<<3)+5+object.action*400+object.frame*100];
  551.  
  552.     data[(num+object.y)].line[object.x+5]-=object.sprite_graph[(num<<1)+(num<<3)+4+object.action*400+object.frame*100];
  553.     data[(num+object.y)].line[object.x+6]-=object.sprite_graph[(num<<1)+(num<<3)+3+object.action*400+object.frame*100];
  554.     data[(num+object.y)].line[object.x+7]-=object.sprite_graph[(num<<1)+(num<<3)+2+object.action*400+object.frame*100];
  555.     data[(num+object.y)].line[object.x+8]-=object.sprite_graph[(num<<1)+(num<<3)+1+object.action*400+object.frame*100];
  556.     data[(num+object.y)].line[object.x+9]-=object.sprite_graph[(num<<1)+(num<<3)+object.action*400+object.frame*100];
  557.  
  558.     }
  559.     }
  560. *object_o=object;
  561. }
  562. /////////////////////////////////////////////////////////////////////////////
  563. void draw_big_picture(int how_far)
  564. {
  565. int how_low,num;
  566. for(how_low=0;how_low<NUM_LINES;how_low+=20)
  567.     {
  568.     _fmemcpy((char far *)&video_mem[((how_low+20)<<6)+((how_low+20)<<8)],(char far *)&data[how_low].line[how_far],320);
  569.     _fmemcpy((char far *)&video_mem[((how_low+21)<<6)+((how_low+21)<<8)],(char far *)&data[how_low+1].line[how_far],320);
  570.     _fmemcpy((char far *)&video_mem[((how_low+22)<<6)+((how_low+22)<<8)],(char far *)&data[how_low+2].line[how_far],320);
  571.     _fmemcpy((char far *)&video_mem[((how_low+23)<<6)+((how_low+23)<<8)],(char far *)&data[how_low+3].line[how_far],320);
  572.     _fmemcpy((char far *)&video_mem[((how_low+24)<<6)+((how_low+24)<<8)],(char far *)&data[how_low+4].line[how_far],320);
  573.  
  574.     _fmemcpy((char far *)&video_mem[((how_low+25)<<6)+((how_low+25)<<8)],(char far *)&data[how_low+5].line[how_far],320);
  575.     _fmemcpy((char far *)&video_mem[((how_low+26)<<6)+((how_low+26)<<8)],(char far *)&data[how_low+6].line[how_far],320);
  576.     _fmemcpy((char far *)&video_mem[((how_low+27)<<6)+((how_low+27)<<8)],(char far *)&data[how_low+7].line[how_far],320);
  577.     _fmemcpy((char far *)&video_mem[((how_low+28)<<6)+((how_low+28)<<8)],(char far *)&data[how_low+8].line[how_far],320);
  578.     _fmemcpy((char far *)&video_mem[((how_low+29)<<6)+((how_low+29)<<8)],(char far *)&data[how_low+9].line[how_far],320);
  579.  
  580.     _fmemcpy((char far *)&video_mem[((how_low+30)<<6)+((how_low+30)<<8)],(char far *)&data[how_low+10].line[how_far],320);
  581.     _fmemcpy((char far *)&video_mem[((how_low+31)<<6)+((how_low+31)<<8)],(char far *)&data[how_low+11].line[how_far],320);
  582.     _fmemcpy((char far *)&video_mem[((how_low+32)<<6)+((how_low+32)<<8)],(char far *)&data[how_low+12].line[how_far],320);
  583.     _fmemcpy((char far *)&video_mem[((how_low+33)<<6)+((how_low+33)<<8)],(char far *)&data[how_low+13].line[how_far],320);
  584.     _fmemcpy((char far *)&video_mem[((how_low+34)<<6)+((how_low+34)<<8)],(char far *)&data[how_low+14].line[how_far],320);
  585.  
  586.     _fmemcpy((char far *)&video_mem[((how_low+35)<<6)+((how_low+35)<<8)],(char far *)&data[how_low+15].line[how_far],320);
  587.     _fmemcpy((char far *)&video_mem[((how_low+36)<<6)+((how_low+36)<<8)],(char far *)&data[how_low+16].line[how_far],320);
  588.     _fmemcpy((char far *)&video_mem[((how_low+37)<<6)+((how_low+37)<<8)],(char far *)&data[how_low+17].line[how_far],320);
  589.     _fmemcpy((char far *)&video_mem[((how_low+38)<<6)+((how_low+38)<<8)],(char far *)&data[how_low+18].line[how_far],320);
  590.     _fmemcpy((char far *)&video_mem[((how_low+39)<<6)+((how_low+39)<<8)],(char far *)&data[how_low+19].line[how_far],320);
  591.  
  592.     }
  593. }
  594. /////////////////////////////////////////////////////////////////////////////
  595. void setVGApalette(unsigned char *buffer)
  596. {
  597. union REGS reg;
  598. struct SREGS inreg;
  599.  
  600. reg.x.ax=0x1012;
  601. segread(&inreg);
  602. inreg.es=inreg.ds;
  603. reg.x.bx=0;
  604. reg.x.cx=256;
  605. reg.x.dx=(int)&buffer;
  606. int86x(0x10,®,®,&inreg);
  607. }
  608. /////////////////////////////////////////////////////////////////////////////
  609. void fade_in(char speed)
  610. {
  611. long pause,num;
  612. int x,y;
  613. for(x=0;x<255;x++)
  614.     {
  615.     for(pause=0;pause<speed*5;pause++)
  616.     {}
  617.     for(y=0;y<768;y++)
  618.     if(curr_pal[y]<pal[y])
  619.         curr_pal[y]+=1;
  620.     for(y=0;y<256;y++)
  621.     set_color(y,curr_pal[y*3],curr_pal[y*3+1],curr_pal[y*3+2]);
  622.     }
  623. }
  624.  
  625. void fade_out(char speed)
  626. {
  627. long pause;
  628. int x,y;
  629. for(x=0;x<63;x++)
  630.     {
  631.     for(pause=0;pause<32000;pause++)
  632.     {}
  633.     for(y=0;y<768;y++)
  634.     if(curr_pal[y]>0)
  635.         curr_pal[y]-=speed;
  636.     for(y=0;y<256;y++)
  637.     set_color(y,curr_pal[y*3],curr_pal[y*3+1],curr_pal[y*3+2]);
  638.     }
  639. }
  640.  
  641. /////////////////////////////////////////////////////////////////////////////
  642. void setvideomode(unsigned int mode)
  643. {
  644. union REGS regs;
  645.  
  646. regs.x.ax=mode;
  647. int86(0x10,®s,®s);
  648. }
  649. /////////////////////////////////////////////////////////////////////////////
  650. void move_sprite(sprite_typ *lemming_o,missle_typ *green_ball_o, char input)
  651. {
  652. sprite_typ lemming;
  653. missle_typ green_ball;
  654. long num;
  655.  
  656. lemming=*lemming_o;
  657. green_ball=*green_ball_o;
  658.  
  659. if((lemming.action)==4 && (lemming.frame)==3)
  660.     (lemming.action)=0;
  661. if((lemming.action)!=2 && lemming.action<5 && lemming.dead_alive)
  662.     (lemming.frame)++;
  663. if((lemming.action)==2)
  664.     if(lemming.jump==lemming.jump-lemming.jump%3)
  665.     (lemming.frame)++;
  666. if((lemming.frame)>3 && (lemming.dead_alive))
  667.     (lemming.frame)=0;
  668. if(lemming.dead_alive==0 && lemming.frame<3)
  669.     {
  670.     lemming.action=0;
  671.     lemming.frame++;
  672.     }
  673.  
  674. how_far=lemming.x-160;
  675. if((lemming.action)<4)
  676.     (lemming.action)=0;
  677. if((lemming.action)==4 && (lemming.frame)==4)
  678.     (lemming.action)=0;
  679.  
  680. if(lemming.dead_alive==1)
  681. {
  682. if(input & 0x80)
  683.     {
  684.     lemming.dir=1;
  685.     (lemming.action)=1;
  686.     }
  687. if(input & 0x10)
  688.     {
  689.     lemming.dir=0;
  690.     (lemming.action)=1;
  691.     }
  692. if(data[lemming.y].line[lemming.x+10-10*lemming.dir]!=0 && lemming.jump==0)
  693.     (lemming.action)=0;
  694.  
  695. if(((lemming.action)) && (input & 0x90))
  696.     {
  697.     if(data[lemming.y].line[lemming.x+10-10*lemming.dir]==0)
  698.     lemming.x=lemming.x+2-4*lemming.dir;              ///*******
  699.     }
  700. if((input & 0x08) && lemming.jump==0 && lemming.fall==0)
  701.     {
  702.     (lemming.frame)=0;
  703.     (lemming.action)=2;
  704.     lemming.jump=9;
  705.  
  706. //    if(ct_voice_status==0)
  707. //    {
  708.     if(lemming.x>sound_dist-160 && lemming.x<sound_dist+160);
  709.     sound_num=3;
  710. //    }
  711. //else
  712. //    {
  713. //    Voc_Stop_Sound();
  714. //    Voc_Play_Sound(sounds[3],lengths[3]);
  715. //    }
  716.     }
  717. if((input & 0x04) && (lemming.action)==0 && green_ball.missle_speed[0]==0 && green_ball.expl_frame>=5 && lemming.jump==0 && lemming.fall==0)
  718.     {
  719.     (lemming.frame)=0;
  720.     (lemming.action)=4;
  721.     green_ball.missle_pos[0][0]=lemming.x+10-10*lemming.dir;
  722.     green_ball.missle_pos[0][1]=lemming.y;
  723.     green_ball.missle_pos[1][0]=lemming.x+10-10*lemming.dir;
  724.     green_ball.missle_pos[1][1]=lemming.y;
  725.     green_ball.missle_pos[2][0]=lemming.x+10-10*lemming.dir;
  726.     green_ball.missle_pos[2][1]=lemming.y;
  727.     green_ball.missle_pos[3][0]=lemming.x+10-10*lemming.dir;
  728.     green_ball.missle_pos[3][1]=lemming.y;
  729.  
  730.     green_ball.missle_speed[0]=green_ball.missle_start_sp[0]-(green_ball.missle_start_sp[0]*2)*lemming.dir;
  731.     green_ball.missle_speed[1]=green_ball.missle_start_sp[1];
  732.  
  733. if(lemming.x>=sound_dist && lemming.x<=sound_dist+320)
  734. {
  735. Voc_Stop_Sound();
  736. Voc_Play_Sound((char far *)sounds[2],lengths[2]);
  737. }
  738.  
  739.     }
  740. }
  741.  
  742. if(how_far<0)
  743.     how_far=0;
  744. if(how_far>320)
  745.     how_far=320;
  746.  
  747. if(data[lemming.y+10].line[lemming.x+5]!=0)
  748.     lemming.fall=0;
  749. for(num=0;num<=(lemming.jump-(lemming.jump%2))/2;num++)
  750.     if(data[lemming.y-num].line[lemming.x+5]!=0)
  751.     lemming.jump=0;
  752.  
  753. //if(lemming.jump==lemming.jump-(lemming.jump%2))
  754.     lemming.y-=(lemming.jump-lemming.jump%2)/2;
  755.  
  756. if(lemming.jump)
  757.     {
  758.     (lemming.action)=2;
  759.     lemming.jump--;
  760.     }
  761. if(data[lemming.y+10].line[lemming.x+5]==0 && lemming.jump==0)
  762. {
  763. num=0;
  764. lemming.fall++;
  765. while(data[lemming.y+10+num].line[lemming.x+5]==00 && num<lemming.fall)
  766.     num++;
  767.  
  768.  
  769. lemming.y+=num;
  770. if(lemming.fall>2)
  771.     (lemming.action)=3;
  772. }
  773. if(data[lemming.y+9].line[lemming.x+5]!=0 && lemming.jump==0)
  774.     while(data[lemming.y+9].line[lemming.x+5]!=0)
  775.     lemming.y--;
  776. *lemming_o=lemming;
  777. *green_ball_o=green_ball;
  778.  
  779. }
  780. /////////////////////////////////////////////////////////////////////////////
  781. void pause_game(void)
  782. {
  783.  
  784. char red,green,blue;
  785. int num;
  786.  
  787. for(num=0;num<256;num++)
  788.     {
  789.     red   = curr_pal[num*3+0];
  790.     green = curr_pal[num*3+1];
  791.     blue  = curr_pal[num*3+2];
  792.     red   = red   >> 1;
  793.     green = green >> 1;
  794.     blue  = blue  >> 1;
  795.     set_color(num,red,green,blue);
  796.     }
  797. while(KeyScan==PAUSE_KEY)
  798.     {}
  799. for(num=0;num<256;num++)
  800.     set_color(num,curr_pal[num*3+0],curr_pal[num*3+1],curr_pal[num*3+2]);
  801.  
  802. }
  803. /////////////////////////////////////////////////////////////////////////////
  804. void play_level(void)
  805. {
  806. char how_low;
  807. char inp;
  808. long r_x,r_y;
  809. char r_bak[6];
  810. long exit_counter;
  811.  
  812.  
  813. long num,num2,x,y;
  814. unsigned char palette[768];
  815. long some_number;
  816. int hours,minutes,seconds;
  817.  
  818. printf("\n Free space to store the data.");
  819.  
  820.  
  821.  
  822. //fread(&numbers,1,1440,number_ptr);
  823.  
  824. for(num=0;num<5;num++)
  825.     {
  826.     brains[num].its_me=&bad_lem[num];
  827.     brains[num].kill_him=&lemming;
  828.     }
  829.  
  830. printf("\n Set the target for all enemies.");
  831.  
  832. for(num=0;num<5;num++)
  833.     brains[num].dodge_this=&green_ball;
  834.  
  835. printf("\n Tell them what to dodge.");
  836.  
  837.  
  838. for(some_number=0;some_number<NUM_LINES;some_number++)
  839.      data[some_number].line=_fmalloc((unsigned)640);
  840.  
  841. printf("\n Free space for the level data.");
  842.  
  843. printf("\n The first line of level data is stored at %p. ",data);
  844.  
  845. for(num=0;num<NUM_LINES;num++)
  846. {
  847. if(data[num].line==NULL)
  848.     {
  849.     printf("\n D'OH!!! \n");
  850.     printf("\n there is only enouph space for %i",num);
  851.     goto here;
  852.     }
  853. }
  854.  
  855. printf("\n There is enough space for all of the lines.");
  856.  
  857. printf("\n try to open the file with the level data.");
  858. if(!(level.level_graph))
  859.     {
  860.     printf("You can't use a file if it doesn't exist! \n");
  861.     goto here;
  862.     }
  863.  
  864. printf("\n Checked for existance of file.");
  865.  
  866. for(some_number=0;some_number<NUM_LINES;some_number++)
  867. {
  868. for(num=0;num<640;num++)
  869.     data[some_number].line[num]=getc(level.level_graph);
  870. }
  871.  
  872. printf("\n Load it up.");
  873.  
  874. fclose(level.level_graph);
  875.  
  876. printf("\n Close it \n");
  877.  
  878. fp=fopen("good.guy","rb");
  879.  
  880. fread(&lem,1,1600,fp);
  881.  
  882. for(x=0;x<=level.main_char_gr;x++)
  883.     fread(&lem[1600],1,400,fp);
  884.  
  885. printf("\n Read the main sprite data.");
  886.  
  887. fclose(fp);
  888.  
  889. printf("\n Load up the sprite data.");
  890.  
  891. for(num=0;num<5;num++)
  892. {
  893. fread(&bad_lemi[num][0],1,2000,level.char_graphs[num]);
  894. fclose(level.char_graphs[num]);
  895. }
  896.  
  897. printf("\n Load up some more sprite data.");
  898.  
  899. lemming.sprite_graph=(char *)lem;
  900. for(num=0;num<5;num++)
  901.     bad_lem[num].sprite_graph=&bad_lemi[num][0];
  902.  
  903. printf("\n Set the pointers to the data.");
  904.  
  905. for(num=0;num<5;num++)
  906. {
  907. fread(&blue_ball[num].missle_graph[0][0],1,25,level.proj_graph[num]);
  908. fread(&blue_ball[num].missle_graph[1][0],1,25,level.proj_graph[num]);
  909. fread(&blue_ball[num].missle_graph[2][0],1,25,level.proj_graph[num]);
  910. fread(&blue_ball[num].missle_graph[3][0],1,25,level.proj_graph[num]);
  911. fclose(level.proj_graph[num]);
  912. }
  913.  
  914. printf("\n Load the projectile data.");
  915.  
  916. fread(&green_ball.missle_graph[0][0],1,25,level.main_proj_gr);
  917. fread(&green_ball.missle_graph[1][0],1,25,level.main_proj_gr);
  918. fread(&green_ball.missle_graph[2][0],1,25,level.main_proj_gr);
  919. fread(&green_ball.missle_graph[3][0],1,25,level.main_proj_gr);
  920. fclose(level.main_proj_gr);
  921.  
  922. printf("\n Same thing for the good guy.");
  923.  
  924. //fread(&green_ball.expl_graph,1,500,level.main_expl_gr);
  925.  
  926. //green_ball.missle_graph[0]=(char *)fire;
  927. //green_ball.missle_graph[1]=(char *)fire[25];
  928. //green_ball.missle_graph[2]=(char *)fire[50];
  929. //green_ball.missle_graph[3]=(char *)fire[75];
  930.  
  931. printf("\n \n \n     !!!SEE YA!!!");
  932.  
  933. setvideomode(19);
  934. fade_out(1);
  935.  
  936. //fp=fopen("pipemaze.grf","rb");
  937. //for(num=0;num<64000;num++)
  938. //    video_mem[num]=getc(fp);//level.level_title);
  939. //fclose(fp);//level.level_title);
  940. //fade_in(1);
  941.  
  942. set_key_driver();
  943.  
  944. printf("\n Keyboard driver set!");
  945.  
  946. //KeyScan=0;
  947.  
  948.  
  949. //while(!(KeyScan))
  950. //{}
  951.  
  952. how_far=0;
  953.  
  954. inp=0;
  955.  
  956. //fade_out(1);
  957.  
  958. fp=fopen("top.grf","rb");
  959. for(num=0;num<6400;num++)
  960.     video_mem[num]=getc(fp);
  961. fclose(fp);
  962. fp=fopen("bottom.grf","rb");
  963. for(num=0;num<19200;num++)
  964.     video_mem[44800+num]=getc(fp);
  965. fclose(fp);
  966. draw_sprite(&lemming);
  967. for(num=0;num<5;num++)
  968.     draw_sprite(&bad_lem[num]);
  969. draw_big_picture(how_far);
  970. fade_in(1);
  971. undo_sprite(&lemming);
  972. for(num=0;num<5;num++)
  973.     undo_sprite(&bad_lem[num]);
  974.  
  975. // 0 - right, 1+ - left//////////////////////////////////////////////////////
  976.  
  977. seconds = level.start_seconds;
  978. minutes = level.start_minutes;
  979. hours    =   level.start_hours;
  980.  
  981. for(y=0;y<36;y++)
  982.     for(x=0;x<105;x++)
  983.     video_mem[x+(y+2)*320+48208]=data[y*3].line[x*6];
  984.  
  985. exit_counter=0;
  986.  
  987. sound_timer=0;
  988.  
  989. while(KeyScan!=129)
  990. {
  991. for(num=0;num<5;num++)
  992.     if(bad_lem[num].dead_alive)
  993.     video_mem[num]=5;
  994.     else
  995.     video_mem[num]=0;
  996. //printf("\r 1  ");
  997. sound_dist=how_far;
  998.  
  999. //printf("\r 2  ");
  1000.  
  1001. //sound_timer++;
  1002. //if(sound_timer>=SOUND_SPEED)
  1003. //    {
  1004. //    sound_timer=0;
  1005. //    printf("\r 1 of 2  ");
  1006. //    if(sound_num!=200)
  1007.     if(sound_num>=sound_timer || sound_timer==200)
  1008.     {
  1009.     sound_timer=sound_num;
  1010. //    printf("\r 2 of 2  ");
  1011.     if(sound_timer<200)
  1012.     {
  1013. //    Voc_Stop_Sound();
  1014. //    printf("\r 3 of 2  ");
  1015. //    Voc_Play_Sound(sounds[sound_num],lengths[sound_num]);
  1016.     sound_num=200;
  1017.     sound_timer=200;
  1018.     }
  1019. //    printf("\r 4 of 2  ");
  1020.     }
  1021. if(ct_voice_status==0)
  1022.     {
  1023.     sound_num=200;
  1024.     sound_timer=200;
  1025.     }
  1026. //    sound_num=200;
  1027. //    }
  1028. //printf("\r 3  ");
  1029.  
  1030. //if(!(ct_voice_status))
  1031. //    Voc_Stop_Sound();
  1032.  
  1033. inp=0;
  1034. if(green_ball.expl_frame<5)
  1035.     draw_expl(&green_ball);
  1036.  
  1037.  
  1038. if(blue_ball[0].expl_frame<5)
  1039.     draw_expl(&blue_ball[0]);
  1040. if(blue_ball[1].expl_frame<5)
  1041.     draw_expl(&blue_ball[1]);
  1042. if(blue_ball[2].expl_frame<5)
  1043.     draw_expl(&blue_ball[2]);
  1044. if(blue_ball[3].expl_frame<5)
  1045.     draw_expl(&blue_ball[3]);
  1046. if(blue_ball[4].expl_frame<5)
  1047.     draw_expl(&blue_ball[4]);
  1048.  
  1049.  
  1050. if(green_ball.missle_speed[0])
  1051.     draw_missle(&green_ball);
  1052.  
  1053. //for(num=0;num<5;num++)
  1054. if(blue_ball[0].missle_speed[0])
  1055.     draw_missle(&blue_ball[0]);
  1056. if(blue_ball[1].missle_speed[0])
  1057.     draw_missle(&blue_ball[1]);
  1058. if(blue_ball[2].missle_speed[0])
  1059.     draw_missle(&blue_ball[2]);
  1060. if(blue_ball[3].missle_speed[0])
  1061.     draw_missle(&blue_ball[3]);
  1062. if(blue_ball[4].missle_speed[0])
  1063.     draw_missle(&blue_ball[4]);
  1064.  
  1065.  
  1066. draw_sprite(&lemming);
  1067.  
  1068.  
  1069. draw_sprite(&bad_lem[0]);
  1070. draw_sprite(&bad_lem[1]);
  1071. draw_sprite(&bad_lem[2]);
  1072. draw_sprite(&bad_lem[3]);
  1073. draw_sprite(&bad_lem[4]);
  1074.  
  1075.  
  1076. draw_big_picture(how_far);
  1077.  
  1078. undo_sprite(&lemming);
  1079.  
  1080.  
  1081. undo_sprite(&bad_lem[0]);
  1082. undo_sprite(&bad_lem[1]);
  1083. undo_sprite(&bad_lem[2]);
  1084. undo_sprite(&bad_lem[3]);
  1085. undo_sprite(&bad_lem[4]);
  1086.  
  1087. if(green_ball.expl_frame<5)
  1088.     undo_expl(&green_ball);
  1089.  
  1090. for(num=0;num<5;num++)
  1091.     if(blue_ball[num].expl_frame<5)
  1092.     undo_expl(&blue_ball[num]);
  1093.  
  1094. if(green_ball.missle_speed[0])
  1095.     undo_missle(&green_ball);
  1096.  
  1097. for(num=0;num<5;num++)
  1098.     if(blue_ball[num].missle_speed[0])
  1099.     undo_missle(&blue_ball[num]);
  1100.  
  1101. /////////////////////////////////////////////////////////////////////////////
  1102.  
  1103. for(num=0;num<5;num++)
  1104.     move_missle(&blue_ball[num]);
  1105.  
  1106. for(num=0;num<5;num++)
  1107.     {
  1108.     inp=use_brains(&brains[num]);
  1109.     move_sprite(&bad_lem[num],&blue_ball[num],inp);
  1110.     }
  1111.  
  1112.  
  1113. if((!(bad_lem[0].dead_alive)) && (!(video_mem[320])))
  1114.     video_mem[322]=1;
  1115.  
  1116.  
  1117. move_missle(&green_ball);
  1118. move_sprite(&lemming,&green_ball,keys);
  1119.  
  1120. //for(x=0;x<5;x++)
  1121. //    {
  1122. //    r_y=(bad_lem[x].y+3-(bad_lem[x].y+3)%3)/3+2;
  1123. //    r_x=(bad_lem[x].x+8-(bad_lem[x].x+8)%6)/6-2;
  1124. //    video_mem[48210+r_x+r_y*320]=15;
  1125. //    }
  1126.  
  1127. //    r_y=(lemming.y+3-(lemming.y+3)%3)/3+2;
  1128. //    r_x=(lemming.x+8-(lemming.x+8)%3)/6-2;
  1129. //    video_mem[48210+r_x+r_y*320]=5;
  1130.  
  1131. for(num=0;num<5;num++)
  1132. if(lemming.dead_alive)
  1133.     check_hit(&lemming,&blue_ball[num],6);
  1134.  
  1135. for(num=0;num<5;num++)
  1136. for(num2=0;num2<5;num2++)
  1137. //if(bad_lem[num].dead_alive)
  1138. //    check_hit(bad_lem[num],blue_ball[num2]);
  1139. for(num=0;num<5;num++)
  1140.     check_hit(&bad_lem[num],&green_ball,num);
  1141.  
  1142.  
  1143.  
  1144. if(lemming.dead_alive)
  1145. {
  1146. for(num=0;num<46;num++)
  1147.     {
  1148.     //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  1149.     _fmemcpy((char far *)&video_mem[47047+(num<<6)+(num<<8)],(char far *)&mug[num*46+lemming.action*2116],46);
  1150.     }
  1151. }
  1152. else
  1153.     {
  1154. for(num=0;num<46;num++)
  1155.     {
  1156.     _fmemcpy((char far *)&video_mem[47047+num*320],(char far *)&mug[num*46+10580],46);
  1157.     //_fmemcpy(video_mem[16020+320num],lemming[num*10+frame*100],10);
  1158.     }
  1159. }
  1160.  
  1161. //for(num=0;num<46;num++)
  1162. //    {
  1163. //    for(num2=0;num2<46;num++)
  1164. //    {
  1165. //    video_mem[47047+num2320+num]=0;
  1166. //    video_mem[47047+num2320+num]+=mug[lemming.action*2116+num+num246];
  1167. //    }
  1168. //    }
  1169.  
  1170. if(seconds>=0)
  1171.     seconds-=TIME_SPEED;
  1172.  
  1173. num=0;
  1174.  
  1175. if(minutes)
  1176.     num++;
  1177. if(seconds)
  1178.     num++;
  1179. if(num)
  1180.     {
  1181.     if(seconds<=0)
  1182.     if(minutes)
  1183.     {
  1184.     seconds=59;
  1185.     minutes--;
  1186.     }
  1187.     if(minutes<=0)
  1188.     {
  1189.  
  1190.     if(hours)
  1191.         {
  1192.         hours--;
  1193.         minutes=59;
  1194.         }
  1195.     }
  1196.     }
  1197. if(seconds<0)
  1198.     seconds=0;
  1199.  
  1200. //if(seconds<0 && minutes<0 && hours<0)
  1201. //    {
  1202. //    seconds=0;
  1203. //    minutes=0;
  1204. //    hours=0;
  1205. //    }
  1206.  
  1207.  
  1208. for(y=0;y<12;y++)
  1209.     _fmemcpy((char far *)&video_mem[47770+y*320],(char far *)&numbers[y*12+((hours-(hours%100))/100)*144],12);
  1210.     //video_mem[47770+x+y*320]=numbers[x+y*12+((hours-(hours%100))/100)*144];
  1211. for(y=0;y<12;y++)
  1212.     _fmemcpy((char far *)&video_mem[47770+12+y*320],(char far *)&numbers[y*12+((hours%100)-(hours%10))/10144],12);
  1213.     //video_mem[47770+12+x+y*320]=numbers[x+y*12+((hours%100)-(hours%10))/10144];
  1214. for(y=0;y<12;y++)
  1215.     _fmemcpy((char far *)&video_mem[47770+24+y*320],(char far *)&numbers[y*12+((hours%10))*144],12);
  1216.     //video_mem[47770+24+x+y*320]=numbers[x+y*12+((hours%10))*144];
  1217.  
  1218. for(y=0;y<12;y++)
  1219.     _fmemcpy((char far *)&video_mem[47770+42+y*320],(char far *)&numbers[y*12+((minutes%100)-(minutes%10))/10144],12);
  1220.     //video_mem[47770+42+x+y*320]=numbers[x+y*12+((minutes%100)-(minutes%10))/10144];
  1221. for(y=0;y<12;y++)
  1222.     _fmemcpy((char far *)&video_mem[47770+54+y*320],(char far *)&numbers[y*12+((minutes%10))*144],12);
  1223.     //video_mem[47770+54+x+y*320]=numbers[x+y*12+((minutes%10))*144];
  1224.  
  1225. for(y=0;y<12;y++)
  1226.     _fmemcpy((char far *)&video_mem[47770+72+y*320],(char far *)&numbers[y*12+((seconds%100)-(seconds%10))/10144],12);
  1227.     //video_mem[47770+72+x+y*320]=numbers[x+y*12+((seconds%100)-(seconds%10))/10144];
  1228. for(y=0;y<12;y++)
  1229.     _fmemcpy((char far *)&video_mem[47770+84+y*320],(char far *)&numbers[y*12+((seconds%10))*144],12);
  1230.     //video_mem[47770+84+x+y*320]=numbers[x+y*12+((seconds%10))*144];
  1231.  
  1232. if(KeyScan==PAUSE_KEY)
  1233.     pause_game();
  1234. /////////////////////////////////////////////////////////////////////////////
  1235.  
  1236.  
  1237.  
  1238.  
  1239. if(lemming.dead_alive==0)
  1240.     exit_counter++;
  1241. if(bad_lem[0].dead_alive==0 && bad_lem[1].dead_alive==0 && bad_lem[2].dead_alive==0 && bad_lem[3].dead_alive==0 && bad_lem[4].dead_alive==0)
  1242.     exit_counter++;
  1243.  
  1244. if(exit_counter>100)
  1245.     KeyScan=129;
  1246.  
  1247. if(ct_voice_status)
  1248.     video_mem[10]=5;
  1249. else
  1250.     video_mem[10]=0;
  1251.  
  1252. //for(x=0;x<5;x++)
  1253. //    video_mem[48210+r_x+r_y*320]=0;
  1254.  
  1255. //    video_mem[48210+r_x+r_y*320]=0;
  1256.  
  1257. }
  1258.  
  1259. for(num=0;num<NUM_LINES;num++)
  1260.     _ffree(data[num].line);
  1261.  
  1262. //fade_out(1);
  1263.  
  1264. here:;
  1265. restore_key_driver();
  1266. }
  1267. /////////////////////////////////////////////////////////////////////////////
  1268. void view_picture(char *file_name,char typ_in, char typ_out)
  1269. {
  1270. char far *double_buffer;
  1271. char inp;
  1272. int how_high[320];
  1273. char how_fast[320];
  1274. long num,num2;
  1275. FILE *pic;
  1276. int x,y;
  1277.  
  1278. if(typ_in==1)
  1279. {
  1280. fade_out(1);
  1281. pic=fopen(file_name,"rb");
  1282. for(num=0;num<64000;num++)
  1283.     video_mem[num]=getc(pic);
  1284. fclose(pic);
  1285. fade_in(1);
  1286. }
  1287.  
  1288. if(typ_in==2)
  1289. {
  1290. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  1291. pic=fopen(file_name,"rb");
  1292. for(num=0;num<64000;num++)
  1293.     double_buffer[num]=getc(pic);
  1294. fclose(pic);
  1295. for(num=0;num<400000;num++)
  1296.     {
  1297. //    num2=rand()%64000;
  1298.     x=rand()%320;
  1299.     y=rand()%200;
  1300.     video_mem[x+(y<<6)+(y<<8)]=double_buffer[x+(y<<6)+(y<<8)];
  1301.     }
  1302. _fmemcpy((char far *)&video_mem[0],(char far *)&double_buffer[0],(unsigned int)64000);
  1303. _ffree(double_buffer);
  1304. }
  1305.  
  1306. if(typ_in==3)
  1307. {
  1308. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  1309. pic=fopen(file_name,"rb");
  1310. for(num=0;num<64000;num++)
  1311.     double_buffer[num]=getc(pic);
  1312. fclose(pic);
  1313. for(num=0;num<320;num++)
  1314.     {
  1315. //    y=rand()%10+5;
  1316. //    for(x=0;x<5;x++)
  1317. //{
  1318.     how_high[num]=0;
  1319.     how_fast[num]=rand()%10+15;
  1320. //    }
  1321.     }
  1322. for(num=0;num<14;num++)
  1323. {
  1324. for(num2=0;num2<320;num2++)
  1325.     {
  1326.     how_high[num2]+=how_fast[num2];
  1327.     if(how_high[num2]>200)
  1328.     how_high[num2]=200;
  1329.     }
  1330. for(num2=0;num2<320;num2++)
  1331.     {
  1332. for(x=0;x<how_high[num2];x++)
  1333.     {
  1334.     y=200-how_high[num2]+x;
  1335.     video_mem[num2+(x<<8)+(x<<6)]=double_buffer[num2+(y<<6)+(y<<8)];
  1336.     }
  1337. }
  1338. }
  1339. _ffree(double_buffer);
  1340. }
  1341.  
  1342. if(typ_in==4)
  1343. {
  1344. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  1345. pic=fopen(file_name,"rb");
  1346. for(num=0;num<64000;num++)
  1347.     double_buffer[num]=getc(pic);
  1348. fclose(pic);
  1349.  
  1350.  
  1351. for(y=0;y<200;y+=3)
  1352.     _fmemcpy((char far *)&video_mem[64000-y*320],(char far *)&double_buffer[0],y*320);
  1353. _ffree(double_buffer);
  1354. }
  1355.  
  1356. if(typ_in==5)
  1357. {
  1358. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  1359. pic=fopen(file_name,"rb");
  1360. for(num=0;num<64000;num++)
  1361.     double_buffer[num]=getc(pic);
  1362. fclose(pic);
  1363.  
  1364. for(x=0;x<320;x+=11)
  1365. {
  1366. for(y=0;y<100;y++)
  1367. {
  1368. _fmemcpy((char far *)&video_mem[y*640],(char far *)&double_buffer[y*640+319-x],x);
  1369. _fmemcpy((char far *)&video_mem[y*640+639-x],(char far *)&double_buffer[y*640+320],x);
  1370. }
  1371. }
  1372. _ffree(double_buffer);
  1373. }
  1374.  
  1375. if(typ_in==6)
  1376. {
  1377. double_buffer=(char far *)_fmalloc((unsigned int)64000);
  1378. pic=fopen(file_name,"rb");
  1379. for(num=0;num<64000;num++)
  1380.     double_buffer[num]=getc(pic);
  1381. fclose(pic);
  1382. for(num=0;num<320;num++)
  1383.     {
  1384. //    y=rand()%10+5;
  1385. //    for(x=0;x<5;x++)
  1386. //{
  1387.     how_high[num]=0;
  1388.     how_fast[num]=rand()%10+15;
  1389. //    }
  1390.     }
  1391. for(num=0;num<14;num++)
  1392. {
  1393. for(num2=0;num2<320;num2++)
  1394.     {
  1395.     how_high[num2]+=how_fast[num2];
  1396.     if(how_high[num2]>200)
  1397.     how_high[num2]=200;
  1398.     }
  1399. for(x=0;x<how_high[num2];x++)
  1400.     {
  1401. for(num2=0;num2<320;num2++)
  1402. {
  1403.     y=200-how_high[num2]+x;
  1404.     video_mem[num2+(x<<8)+(x<<6)]=double_buffer[num2+(y<<6)+(y<<8)];
  1405.     }
  1406. }
  1407. }
  1408. _ffree(double_buffer);
  1409. }
  1410.  
  1411.  
  1412. //printf("\n Press any key to continue.\n");
  1413. if(typ_out)
  1414. inp=getch();
  1415. }
  1416.  
  1417.  
  1418.  
  1419.  
  1420.  
  1421. //level_typ level,
  1422. //sprite_typ lemming,
  1423. //missle_typ green_ball,
  1424. //sprite_typ bad_lem[5],
  1425. //missle_typ blue_ball[5],
  1426. //brain_typ brains[5]
  1427.  
  1428. main()
  1429. {
  1430.  
  1431. int num;
  1432. char inp;
  1433. char char_num;
  1434. char pict[10000];
  1435. int y,x;
  1436.  
  1437.  
  1438. //for(num=0;num<768;num++)
  1439. //    pal[num]=pal[num]*4;
  1440.  
  1441. setvideomode(19);
  1442.  
  1443. Voc_Load_Driver();
  1444. Voc_Init_Driver();
  1445. Voc_Set_Port(0x220);
  1446. Voc_Set_DMA(5);
  1447. Voc_Set_Status_Addr((char far *)&ct_voice_status);
  1448. Voc_Set_Speaker(1);
  1449. sounds[2]=Voc_Load_Sound("woosh.voc", &lengths[2]);
  1450. //sounds[3]=Voc_Load_Sound("jump.voc" , &lengths[3]);
  1451. //sounds[1]=Voc_Load_Sound("wabam.voc" , &lengths[1]);
  1452. sounds[0]=Voc_Load_Sound("ouch.voc" , &lengths[0]);
  1453.  
  1454. fade_out(1);
  1455. fade_in(3);
  1456.  
  1457. //animate("intr1.anm",16);
  1458.  
  1459. sounds[4]=Voc_Load_Sound("song1.voc",&lengths[4]);
  1460. Voc_Play_Sound(sounds[4],lengths[4]);
  1461. view_picture("intr1.grf",1,3);
  1462. view_picture("intr2.grf",3,4);
  1463. view_picture("intr3.grf",2,1);
  1464. view_picture("intr4.grf",4,3);
  1465. Voc_Stop_Sound();
  1466. Voc_Unload_Sound(sounds[4]);
  1467. sounds[4]=Voc_Load_Sound("title.voc",&lengths[4]);
  1468. Voc_Play_Sound(sounds[4],lengths[4]);
  1469. view_picture("intr5.grf",5,2);
  1470. Voc_Stop_Sound();
  1471. Voc_Unload_Sound(sounds[4]);
  1472.  
  1473. sounds[4]=Voc_Load_Sound("vvzz.voc",&lengths[4]);
  1474. view_picture("charslct.grf",3,0);
  1475. char_num=0;
  1476.  
  1477. fcloseall();
  1478.  
  1479. if((kbhit()))
  1480.     inp=getch();
  1481.  
  1482. inp=45;
  1483.  
  1484. while(inp!=' ')
  1485. {
  1486. //fp=fopen("charctrs.grf","rb");
  1487. //if(!(fp))
  1488. //   printf("\r No character shots! \r");
  1489. //for(num=0;num<=char_num;num++)
  1490. //    for(x=0;x<10000;x++)
  1491. //    pict[x]=getc(fp);
  1492. //    fread(&pict,1,10000,fp);
  1493. //fclose(fp);
  1494.  
  1495. //num=0;
  1496.  
  1497. //while(num<1000000 && (!(kbhit())))
  1498. //{
  1499. //num++;
  1500. //x=rand()%100;
  1501. //y=rand()%100;
  1502.  
  1503. //if(pict[x+y*100])
  1504. //    video_mem[32110+x+y*320]=pict[x+y*100];
  1505. //}
  1506. x=rand()%255;
  1507.  
  1508. video_mem[12802+level.main_char_gr*45]=x;
  1509. video_mem[12803+level.main_char_gr*45]=x;
  1510. video_mem[13122+level.main_char_gr*45]=x;
  1511.  
  1512. video_mem[12845+level.main_char_gr*45]=x;
  1513. video_mem[12846+level.main_char_gr*45]=x;
  1514. video_mem[13166+level.main_char_gr*45]=x;
  1515.  
  1516. video_mem[27202-320+level.main_char_gr*45]=x;
  1517. video_mem[27203-320+level.main_char_gr*45]=x;
  1518. video_mem[26882-320+level.main_char_gr*45]=x;
  1519.  
  1520. video_mem[27246-320+level.main_char_gr*45]=x;
  1521. video_mem[27245-320+level.main_char_gr*45]=x;
  1522. video_mem[26926-320+level.main_char_gr*45]=x;
  1523.  
  1524. inp=0;
  1525. if(kbhit())
  1526.     inp=getch();
  1527. if(inp)
  1528. {
  1529. Voc_Stop_Sound();
  1530. Voc_Play_Sound(sounds[4],lengths[4]);
  1531. }
  1532.  
  1533. video_mem[12802+level.main_char_gr*45]=0;
  1534. video_mem[12803+level.main_char_gr*45]=0;
  1535. video_mem[13122+level.main_char_gr*45]=0;
  1536.  
  1537. video_mem[12845+level.main_char_gr*45]=0;
  1538. video_mem[12846+level.main_char_gr*45]=0;
  1539. video_mem[13166+level.main_char_gr*45]=0;
  1540.  
  1541. video_mem[27202-320+level.main_char_gr*45]=0;
  1542. video_mem[27203-320+level.main_char_gr*45]=0;
  1543. video_mem[26882-320+level.main_char_gr*45]=0;
  1544.  
  1545. video_mem[27246-320+level.main_char_gr*45]=0;
  1546. video_mem[27245-320+level.main_char_gr*45]=0;
  1547. video_mem[26926-320+level.main_char_gr*45]=0;
  1548.  
  1549. if(inp=='4')
  1550.     level.main_char_gr--;
  1551. if(inp=='6')
  1552.     level.main_char_gr++;
  1553.  if(level.main_char_gr>=7)
  1554.     level.main_char_gr=0;
  1555. if(level.main_char_gr<0)
  1556.     level.main_char_gr=6;
  1557. }
  1558.  
  1559. Voc_Unload_Sound(sounds[4]);
  1560.  
  1561. //level.main_char_grf=char_num;
  1562.  
  1563. fp=fopen("numbers.grf","rb");
  1564. for(num=0;num<1440;num=num+1)
  1565.     {
  1566.     numbers[num]=getc(fp);
  1567.     }
  1568. printf("\r Read.    ");
  1569. fclose(fp);
  1570. printf("\r Closed.   ");
  1571.  
  1572. printf("\n Load the set of numbers for the timer.");
  1573.  
  1574. for(num=0;num<768;num++)
  1575.     curr_pal[num]=0;
  1576.  
  1577. printf("\n Zero out the palette array.");
  1578.  
  1579. fp=fopen("mug.grf","rb");
  1580. if(!(fp))
  1581. printf("\n The mug shots have been missplaced!\n");
  1582. fread(&mug,1,12696,fp);
  1583. fclose(fp);
  1584.  
  1585. printf("\n Load the mug shots.");
  1586.  
  1587.  
  1588. printf("\n Load the explosion data.");
  1589.  
  1590. setvideomode(3);
  1591. printf("\n\n  Choose the battle sight.\n");
  1592. printf("\n      1.  The Dead City.");
  1593. printf("\n      2.  The Great Maze of Pipes.");
  1594. printf("\n      3.  The War Room.");
  1595. printf("\n      4.  And of cause ... THE HALL OF DOOM!\n");
  1596.  
  1597. inp=getch();
  1598.  
  1599. if(inp=='1')
  1600.     level.level_graph=fopen("deadcity.grf","rb");
  1601. if(inp=='2')
  1602.     level.level_graph=fopen("pipes.grf","rb");
  1603. if(inp=='3')
  1604.     level.level_graph=fopen("warroom.grf","rb");
  1605. if(inp=='4')
  1606.     level.level_graph=fopen("doom.grf","rb");
  1607. if(inp=='7')
  1608.     level.level_graph=fopen("instruct.grf","rb");
  1609.  
  1610. level.char_graphs[0]=fopen("acrobat.grf","rb");
  1611. level.char_graphs[1]=fopen("imp.grf","rb");
  1612. level.char_graphs[2]=fopen("normal.grf","rb");
  1613. level.char_graphs[3]=fopen("normal.grf","rb");
  1614. level.char_graphs[4]=fopen("imp.grf","rb");
  1615.  
  1616.  
  1617. fp=fopen("expl.you","rb");
  1618. for(num=0;num<=level.main_char_gr;num++)
  1619.     for(num=0;num<500;num++)
  1620.     green_ball.expl_graph[num]=getc(fp);
  1621. fclose(fp);
  1622.  
  1623. level.proj_graph[0]=fopen("fireball.grf","rb");
  1624. level.proj_graph[1]=fopen("fireball.grf","rb");
  1625. level.proj_graph[2]=fopen("missle.grf","rb");
  1626. level.proj_graph[3]=fopen("missle.grf","rb");
  1627. level.proj_graph[4]=fopen("fireball.grf","rb");
  1628.  
  1629. //if(inp=='1')
  1630.     level.main_proj_gr=fopen("missle.grf","rb");
  1631. //if(inp=='2')
  1632. //    level.main_proj_gr=fopen("fireball.grf","rb");
  1633. //if(inp=='3')
  1634. //    level.main_proj_gr=fopen("fireball.grf","rb");
  1635. //if(inp=='4')
  1636. //    level.main_proj_gr=fopen("bulmis.grf","rb");
  1637.  
  1638. level.expl_graph[0]=fopen("ffsshh.grf","rb");
  1639. level.expl_graph[1]=fopen("ffsshh.grf","rb");
  1640. level.expl_graph[2]=fopen("boom.grf","rb");
  1641. level.expl_graph[3]=fopen("boom.grf","rb");
  1642. level.expl_graph[4]=fopen("ffsshh.grf","rb");
  1643.  
  1644. //level.main_expl_gr=fopen("boom.grf","rb");
  1645.  
  1646. //level.level_title=fopen("pipemaze.grf","rb");
  1647.  
  1648. level.start_seconds=0;
  1649. level.start_minutes=0;
  1650. level.start_hours=5;
  1651.  
  1652. lemming.dir=0;
  1653. lemming.frame=0;
  1654. lemming.action=3;
  1655. lemming.jump=0;
  1656. lemming.fall=3;
  1657. lemming.x=100;
  1658. lemming.y=40;
  1659. lemming.dead_alive=1;
  1660. lemming.back_up=1;
  1661.  
  1662. inp=level.main_char_gr;
  1663.  
  1664. if(inp==0)
  1665. {
  1666. green_ball.missle_speed[0]=0;
  1667. green_ball.missle_speed[1]=0;
  1668. green_ball.expl_frame=5;
  1669. green_ball.missle_start_sp[0]=10;
  1670. green_ball.missle_start_sp[1]=-5;
  1671. green_ball.missle_fall=1;
  1672. green_ball.missle_range=5;
  1673. }
  1674. if(inp==1)
  1675. {
  1676. green_ball.missle_speed[0]=0;
  1677. green_ball.missle_speed[1]=0;
  1678. green_ball.expl_frame=5;
  1679. green_ball.missle_start_sp[0]=30;
  1680. green_ball.missle_start_sp[1]=0;
  1681. green_ball.missle_fall=0;
  1682. green_ball.missle_range=15;
  1683. }
  1684. if(inp==2)
  1685. {
  1686. green_ball.missle_speed[0]=0;
  1687. green_ball.missle_speed[1]=0;
  1688. green_ball.expl_frame=5;
  1689. green_ball.missle_start_sp[0]=15;
  1690. green_ball.missle_start_sp[1]=-3;
  1691. green_ball.missle_fall=1;
  1692. green_ball.missle_range=10;
  1693. }
  1694.  
  1695. if(inp==3)
  1696. {
  1697. green_ball.missle_speed[0]=0;
  1698. green_ball.missle_speed[1]=0;
  1699. green_ball.expl_frame=5;
  1700. green_ball.missle_start_sp[0]=15;
  1701. green_ball.missle_start_sp[1]=0;
  1702. green_ball.missle_fall=0;
  1703. green_ball.missle_range=10;
  1704. }
  1705. if(inp==4)
  1706. {
  1707. green_ball.missle_speed[0]=0;
  1708. green_ball.missle_speed[1]=0;
  1709. green_ball.expl_frame=5;
  1710. green_ball.missle_start_sp[0]=3;
  1711. green_ball.missle_start_sp[1]=-5;
  1712. green_ball.missle_fall=1;
  1713. green_ball.missle_range=15;
  1714. }
  1715. if(inp==5)
  1716. {
  1717. green_ball.missle_speed[0]=0;
  1718. green_ball.missle_speed[1]=0;
  1719. green_ball.expl_frame=5;
  1720. green_ball.missle_start_sp[0]=3;
  1721. green_ball.missle_start_sp[1]=-1;
  1722. green_ball.missle_fall=0;
  1723. green_ball.missle_range=15;
  1724. }
  1725. if(inp==6)
  1726. {
  1727. green_ball.missle_speed[0]=0;
  1728. green_ball.missle_speed[1]=0;
  1729. green_ball.expl_frame=5;
  1730. green_ball.missle_start_sp[0]=1;
  1731. green_ball.missle_start_sp[1]=1;
  1732. green_ball.missle_fall=0;
  1733. green_ball.missle_range=30;
  1734. }
  1735.  
  1736. bad_lem[0].dir          = 0;
  1737. bad_lem[0].frame      = 0;
  1738. bad_lem[0].action     = 3;
  1739. bad_lem[0].jump       = 0;
  1740. bad_lem[0].fall       = 5;
  1741. bad_lem[0].x          = 500;
  1742. bad_lem[0].y          = 30;
  1743. bad_lem[0].back_up = 1;
  1744. bad_lem[0].dead_alive=1;
  1745.  
  1746. bad_lem[1].dir          = 1;
  1747. bad_lem[1].frame      = 2;
  1748. bad_lem[1].action     = 2;
  1749. bad_lem[1].jump       = 0;
  1750. bad_lem[1].fall       = 1;
  1751. bad_lem[1].x          = 540;
  1752. bad_lem[1].y          = 10;
  1753. bad_lem[1].back_up = 1;
  1754. bad_lem[1].dead_alive=1;
  1755.  
  1756. bad_lem[2].dir          = 0;
  1757. bad_lem[2].frame      = 3;
  1758. bad_lem[2].action     = 1;
  1759. bad_lem[2].jump       = 0;
  1760. bad_lem[2].fall       = 0;
  1761. bad_lem[2].x          = 510;
  1762. bad_lem[2].y          = 70;
  1763. bad_lem[2].back_up = 1;
  1764. bad_lem[2].dead_alive=1;
  1765.  
  1766. bad_lem[3].dir          = 1;
  1767. bad_lem[3].frame      = 0;
  1768. bad_lem[3].action     = 0;
  1769. bad_lem[3].jump       = 0;
  1770. bad_lem[3].fall       = 7;
  1771. bad_lem[3].x          = 515;
  1772. bad_lem[3].y          = 15;
  1773. bad_lem[3].back_up = 1;
  1774. bad_lem[3].dead_alive=1;
  1775.  
  1776. bad_lem[4].dir          = 1;
  1777. bad_lem[4].frame      = 2;
  1778. bad_lem[4].action     = 0;
  1779. bad_lem[4].jump       = 0;
  1780. bad_lem[4].fall       = 3;
  1781. bad_lem[4].x          = 550;
  1782. bad_lem[4].y          = 20;
  1783. bad_lem[4].back_up = 1;
  1784. bad_lem[4].dead_alive=1;
  1785.  
  1786. blue_ball[0].missle_speed[0]=0;
  1787. blue_ball[0].missle_speed[1]=0;
  1788. blue_ball[0].expl_frame=5;
  1789. blue_ball[0].missle_start_sp[0]=5;
  1790. blue_ball[0].missle_start_sp[1]=-5;
  1791. blue_ball[0].missle_fall=1;
  1792. blue_ball[0].missle_range=10;
  1793.  
  1794. blue_ball[1].missle_speed[0]=0;
  1795. blue_ball[1].missle_speed[1]=0;
  1796. blue_ball[1].expl_frame=5;
  1797. blue_ball[1].missle_start_sp[0]=10;
  1798. blue_ball[1].missle_start_sp[1]=-5;
  1799. blue_ball[1].missle_fall=1;
  1800. blue_ball[1].missle_range=5;
  1801.  
  1802. blue_ball[2].missle_speed[0]=0;
  1803. blue_ball[2].missle_speed[1]=0;
  1804. blue_ball[2].expl_frame=5;
  1805. blue_ball[2].missle_start_sp[0]=15;
  1806. blue_ball[2].missle_start_sp[1]=-3;
  1807. blue_ball[2].missle_fall=1;
  1808. blue_ball[2].missle_range=10;
  1809.  
  1810. blue_ball[3].missle_speed[0]=0;
  1811. blue_ball[3].missle_speed[1]=0;
  1812. blue_ball[3].expl_frame=5;
  1813. blue_ball[3].missle_start_sp[0]=8;
  1814. blue_ball[3].missle_start_sp[1]=-3;
  1815. blue_ball[3].missle_fall=1;
  1816. blue_ball[3].missle_range=5;
  1817.  
  1818. blue_ball[4].missle_speed[0]=0;
  1819. blue_ball[4].missle_speed[1]=0;
  1820. blue_ball[4].expl_frame=5;
  1821. blue_ball[4].missle_start_sp[0]=10;
  1822. blue_ball[4].missle_start_sp[1]=-4;
  1823. blue_ball[4].missle_fall=1;
  1824. blue_ball[4].missle_range=10;
  1825.  
  1826. brains[0].move_or_not  = 40;
  1827. brains[0].to_or_from   = 50;
  1828. brains[0].shoot_or_not = 20;
  1829. brains[0].jump_or_not  = 90;
  1830. brains[0].dodge_or_not = 35;
  1831.  
  1832. brains[1].move_or_not  = 80;
  1833. brains[1].to_or_from   = 95;
  1834. brains[1].shoot_or_not = 95;
  1835. brains[1].jump_or_not  = 100;
  1836. brains[1].dodge_or_not = 100;
  1837.  
  1838. brains[2].move_or_not  = 60;
  1839. brains[2].to_or_from   = 50;
  1840. brains[2].shoot_or_not = 40;
  1841. brains[2].jump_or_not  = 25;
  1842. brains[2].dodge_or_not = 65;
  1843.  
  1844. brains[3].move_or_not  = 20;
  1845. brains[3].to_or_from   = 10;
  1846. brains[3].shoot_or_not = 90;
  1847. brains[3].jump_or_not  = 75;
  1848. brains[3].dodge_or_not = 90;
  1849.  
  1850. brains[4].move_or_not  = 30;
  1851. brains[4].to_or_from   = 75;
  1852. brains[4].shoot_or_not = 95;
  1853. brains[4].jump_or_not  = 99;
  1854. brains[4].dodge_or_not = 99;
  1855.  
  1856. //play_level(level,(sprite_typ *)&lemming,(missle_typ *)&green_ball,(sprite_typ *)&bad_lem,(missle_typ *)&blue_ball,(brain_typ *)&brains);
  1857. //play_level(level,
  1858. //       lemming,
  1859. //       green_ball,
  1860. //       bad_lem[0],
  1861. //       bad_lem[1],
  1862. //       bad_lem[2],
  1863. //       bad_lem[3],
  1864. //       bad_lem[4],
  1865. //       blue_ball[0],
  1866. //       blue_ball[1],
  1867. //       blue_ball[2],
  1868. //       blue_ball[3],
  1869. //       blue_ball[4],
  1870. //       brains[0],
  1871.  
  1872. //       );
  1873.  
  1874. map_x=160;
  1875. map_y=100;
  1876.  
  1877. setvideomode(19);
  1878. view_picture("hellstg.grf",3,0);
  1879. x=map_x;
  1880. y=map_y;
  1881. map_x=rand()%319;
  1882. map_y=rand()%199;
  1883.  
  1884. while(x!=map_x || y!=map_y)
  1885.     {
  1886.     if(rand()%100<5)
  1887.     {
  1888.     if(x<map_x)
  1889.     x++;
  1890.     if(x>map_x)
  1891.     x--;
  1892.     if(y<map_y)
  1893.     y++;
  1894.     if(y>map_y)
  1895.     y--;
  1896.     }
  1897.     video_mem[(x+rand()%3)+(y+rand()%3)*320]=5;
  1898.     }
  1899.  
  1900. for(num=0;num<5;num++)
  1901.     bad_lem[num].dead_alive=1;
  1902. play_level();
  1903. fcloseall();
  1904. for(num=0;num<256;num++)
  1905.     set_color(num,pal[num*3],pal[num*3+1],pal[num*3+2]);
  1906. view_picture("gameover.grf",3,4);
  1907. view_picture("thanks.grf",2,6);
  1908.  
  1909. fade_out(1);
  1910.  
  1911. Voc_Set_Speaker(0);
  1912. Voc_Unload_Sound(sounds[2]);
  1913. Voc_Unload_Sound(sounds[3]);
  1914. Voc_Unload_Sound(sounds[1]);
  1915. Voc_Unload_Sound(sounds[0]);
  1916. Voc_Terminate_Driver();
  1917.  
  1918.  
  1919.  
  1920. setvideomode(3);
  1921.        //klk
  1922. }
  1923.