home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 5 / MA_Cover_5.iso / ppc / qmapwos / src / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-04  |  3.7 KB  |  158 lines

  1. /*  QMAP: Quake level viewer
  2.  *
  3.  *   main.c    Copyright 1997 Sean Barett
  4.  *   minor modifications by Jawed Karim
  5.  *
  6.  *   General setup control, main "sim" loop
  7.  */
  8.  
  9. #include <power/power.h>
  10. #include "bspfile.h"
  11. #include "mode.h"
  12. #include "3d.h"
  13. #include "fix.h"
  14. #include "scr.h"
  15. #include "tm.h"
  16. #include "render.h"
  17. #include "bsp.h"
  18. #include "surface.h"
  19. #include "poly.h"
  20.  
  21. double chop_temp;
  22. int count=0;
  23.  
  24. vector cam_loc, cam_vel, new_loc;
  25. angvec cam_ang, cam_angvel;
  26.  
  27. char *scr_buf;
  28. int   scr_row;
  29.  
  30. #define ANG_STEP  0x0080
  31. #define VEL_STEP  0.5
  32.  
  33. char colormap[64][256];
  34.  
  35. void run_sim(void)
  36. {
  37.         time_t t1;
  38.         time_t t2;
  39.    vector temp;
  40.    int c;
  41.    int exit=0;
  42.  
  43.    scr_buf = malloc(320*200);
  44.    memset(scr_buf,0,320*200);
  45.    scr_row = 320;
  46.    qmap_set_output(scr_buf, scr_row);
  47.  
  48.    cam_loc.x = 500;
  49.    cam_loc.y = 240;
  50.    cam_loc.z = 100;
  51.  
  52.    time(&t1);
  53.  
  54.    for (;;) {
  55.  
  56.       // RENDER
  57.  
  58.       set_view_info(&cam_loc, &cam_ang);
  59.       render_world(&cam_loc);
  60.       blit(scr_buf);
  61.  
  62.       // UI
  63.  
  64.         if((c=PGetKey()))
  65.         {
  66.          switch(c) {
  67.             case 'Q': case 27:
  68.                exit=1;
  69.  
  70.             case 'v': cam_angvel.tx += ANG_STEP; break;
  71.             case 'r': cam_angvel.tx -= ANG_STEP; break;
  72.             case 'q': cam_angvel.ty += ANG_STEP; break;
  73.             case 'e': cam_angvel.ty -= ANG_STEP; break;
  74.             case 'd': cam_angvel.tz += ANG_STEP; break;
  75.             case 'a': cam_angvel.tz -= ANG_STEP; break;
  76.  
  77.             case 'c': cam_vel.x += VEL_STEP; break;
  78.             case 'z': cam_vel.x -= VEL_STEP; break;
  79.             case '1': cam_vel.z -= VEL_STEP; break;
  80.             case '3': cam_vel.z += VEL_STEP; break;
  81.             case 'x': cam_vel.y -= VEL_STEP; break;
  82.             case 'w': cam_vel.y += VEL_STEP; break;
  83.                
  84.             case ' ':
  85.                cam_vel.x = cam_vel.y = cam_vel.z = 0;
  86.                cam_angvel.tx = cam_angvel.ty = cam_angvel.tz = 0;
  87.                break;
  88.          }
  89.        }
  90.  
  91.         if(PLMBStatus()||exit)
  92.         {
  93.                 time(&t2);
  94.       printf("%d Frames in %d seconds: %f fps\n",count,(int)difftime(t2,t1),count/difftime(t2,t1));
  95.                 return;
  96.         }
  97.         count++;
  98.         //cam_angvel.tx=256;
  99.         //cam_angvel.tz=150;
  100.         
  101.  
  102.       // "PHYSICS"
  103.  
  104.       cam_ang.tx += cam_angvel.tx;
  105.       cam_ang.ty += cam_angvel.ty;
  106.       cam_ang.tz += cam_angvel.tz;
  107.       set_view_info(&cam_loc, &cam_ang);
  108.  
  109.       temp.x = cam_vel.x; temp.y = 0; temp.z = 0;
  110.       rotate_vec(&temp);
  111.       cam_loc.x  += temp.x; cam_loc.y += temp.y; cam_loc.z += temp.z;
  112.  
  113.       temp.x = 0; temp.y = cam_vel.y; temp.z = 0;
  114.       rotate_vec(&temp);
  115.       cam_loc.x  += temp.x; cam_loc.y += temp.y; cam_loc.z += temp.z;
  116.  
  117.       temp.x = 0; temp.y = 0; temp.z = cam_vel.z;
  118.       rotate_vec(&temp);
  119.       cam_loc.x  += temp.x; cam_loc.y += temp.y; cam_loc.z += temp.z;
  120.    }
  121. }
  122.  
  123. void load_graphics(void)
  124. {
  125.    char pal[768];
  126.    FILE *f;
  127.    if ((f = fopen("palette.lmp", "rb")) == NULL)
  128.       fatal("Couldn't read palette.lmp\n");
  129.    fread(pal, 1, 768, f);
  130.    fclose(f);
  131.    set_pal(pal); 
  132.    if ((f = fopen("colormap.lmp", "rb")) == NULL)
  133.       fatal("Couldn't read colormap.lmp\n");
  134.    fread(colormap, 256, 64, f);
  135.    fclose(f);
  136. }
  137.  
  138. int main(int argc, char **argv)
  139. {
  140.       PInit(argc,argv);
  141.       if (argc != 2) {
  142.         printf("Original QMap by Sean Barett\n");
  143.         printf("djgpp-port by Jawed Karim <jawed@tc.umn.edu>\n");
  144.         printf("Amiga-PowerUp port by Peter Annuss <paladin@cs.tu-berlin.de>\n");
  145.         printf("Usage: qmap.elf <bspfile>\n");
  146.       } else {
  147.       LoadBSPFile(argv[1]);
  148.       set_lores();
  149.       load_graphics();
  150.       init_cache();
  151.       setup_default_point_list();
  152.  
  153.       run_sim();      
  154.       set_text();
  155.       }
  156.    return 0;
  157. }
  158.