DEADSOFTWARE

fully separate render
[flatwaifu.git] / src / game.c
index 194365ecc3a739663131a9eedb7c5f5b87a8705c..4ae9e11fdd949e4f9584b3bf6b51bc6b78d05bbb 100644 (file)
@@ -26,8 +26,6 @@
 #include <string.h>
 #include "files.h"
 #include "memory.h"
-#include "vga.h"
-#include "error.h"
 #include "keyb.h"
 #include "sound.h"
 #include "view.h"
@@ -43,6 +41,7 @@
 #include "menu.h"
 #include "misc.h"
 #include "map.h"
+#include "my.h"
 
 #include <SDL_keysym.h>
 
@@ -57,6 +56,9 @@ int A8_nextframe(void);
 void A8_close(void);
 
 
+byte transdraw=0;
+
+
 void FX_trans1(int t);
 extern unsigned char fx_scr1[64000],fx_scr2[64000];
 
@@ -65,22 +67,16 @@ extern short lastkey;
 
 extern int hit_xv,hit_yv;
 
-extern vgapal std_pal;
-void setgamma(int);
-
-extern int sw_secrets;
-
-#define PL_FLASH 90
+//void setgamma(int);
 
 extern int PL_JUMP;
 
 extern map_block_t blk;
 
-extern byte clrmap[256*12];
-
 extern byte cheat;
 
-byte _2pl=0,g_dm=0,g_st=GS_TITLE,g_exit=0,g_map=1,_warp=0,g_music[8]="MENU";
+byte _2pl=0,g_dm=0,g_st=GS_TITLE,g_exit=0,g_map=1,_warp=0;
+char g_music[8]="MENU";
 byte _net=0;
 int g_sttm=1092;
 dword g_time;
@@ -88,7 +84,7 @@ int dm_pnum,dm_pl1p,dm_pl2p;
 pos_t dm_pos[100];
 
 static void *telepsnd;
-static void *scrnh[3];
+void *scrnh[3];
 void *cd_scr;
 
 extern int sky_type;
@@ -113,29 +109,57 @@ static void set_trans(int st) {
 }
 
 void G_savegame(FILE* h) {
-  myfwrite(&_2pl,1,1,h);myfwrite(&g_dm,1,1,h);myfwrite(&g_exit,1,1,h);myfwrite(&g_map,1,1,h);
-  myfwrite(&g_time,1,4,h);myfwrite(&dm_pl1p,1,4,h);myfwrite(&dm_pl2p,1,4,h);
-  myfwrite(&dm_pnum,1,4,h);myfwrite(dm_pos,1,dm_pnum*sizeof(pos_t),h);
-  myfwrite(&cheat,1,1,h);
-  myfwrite(g_music,1,8,h);
+  myfwrite8(_2pl, h);
+  myfwrite8(g_dm, h);
+  myfwrite8(g_exit, h);
+  myfwrite8(g_map, h);
+  myfwrite32(g_time, h);
+  myfwrite32(dm_pl1p, h);
+  myfwrite32(dm_pl2p, h);
+  myfwrite32(dm_pnum, h);
+  int i = 0;
+  while (i < dm_pnum) {
+    myfwrite32(dm_pos[i].x, h);
+    myfwrite32(dm_pos[i].y, h);
+    myfwrite8(dm_pos[i].d, h);
+    i += 1;
+  }
+  myfwrite8(cheat, h);
+  myfwrite(g_music, 8, 1, h);
 }
 
 void G_loadgame(FILE* h) {
-  myfread(&_2pl,1,1,h);myfread(&g_dm,1,1,h);myfread(&g_exit,1,1,h);myfread(&g_map,1,1,h);
-  myfread(&g_time,1,4,h);myfread(&dm_pl1p,1,4,h);myfread(&dm_pl2p,1,4,h);
-  myfread(&dm_pnum,1,4,h);myfread(dm_pos,1,dm_pnum*sizeof(pos_t),h);
-  myfread(&cheat,1,1,h);
-  myfread(g_music,1,8,h);F_loadmus(g_music);
+  _2pl = myfread8(h);
+  g_dm = myfread8(h);
+  g_exit = myfread8(h);
+  g_map = myfread8(h);
+  g_time = myfread32(h);
+  dm_pl1p = myfread32(h);
+  dm_pl2p = myfread32(h);
+  dm_pnum = myfread32(h);
+  int i = 0;
+  while (i < dm_pnum) {
+    dm_pos[i].x = myfread32(h);
+    dm_pos[i].y = myfread32(h);
+    dm_pos[i].d = myfread8(h);
+    i += 1;
+  }
+  cheat = myfread8(h);
+  myfread(g_music, 8, 1, h);
+  F_loadmus(g_music);
 }
 
-int G_load(FILE* h) {
-  switch(blk.t) {
+int G_load (FILE *h) {
+  switch (blk.t) {
        case MB_MUSIC:
-         myfread(g_music,1,8,h);
-         if (music_random) F_randmus(g_music);
-          F_loadmus(g_music);
+         myfread(g_music, 8, 1, h);
+         if (music_random) {
+      F_randmus(g_music);
+    }
+    F_loadmus(g_music);
          return 1;
-  }return 0;
+  }
+  return 0;
 }
 
 void load_game(int n) {
@@ -143,11 +167,6 @@ void load_game(int n) {
   W_init();
   F_loadgame(n);
   set_trans(GS_GAME);
-  V_setscr((g_trans)?fx_scr2:scrbuf);V_setrect(0,SCRW,0,SCRH);//V_setrect(0,320,0,200);
-  V_clr(0,SCRW,0,SCRH,0);//V_clr(0,320,0,200,0);
-  if(_2pl) {w_o=0;Z_clrst();w_o=SCRH/2;Z_clrst();}//if(_2pl) {w_o=0;Z_clrst();w_o=100;Z_clrst();}
-  else {w_o=0;Z_clrst();}//else {w_o=50;Z_clrst();}
-  V_setscr(scrbuf);
   pl1.drawst=0xFF;
   if(_2pl) pl2.drawst=0xFF;
   BM_remapfld();
@@ -165,11 +184,6 @@ void G_start(void) {
   sprintf(s,"MAP%02u",(word)g_map);
   F_loadmap(s);
   set_trans(GS_GAME);
-  V_setscr((g_trans)?fx_scr2:scrbuf);V_setrect(0,SCRW,0,SCRH);//V_setrect(0,320,0,200);
-  V_clr(0,SCRW,0,SCRH,0);//V_clr(0,320,0,200,0);
-  if(_2pl) {w_o=0;Z_clrst();w_o=SCRH/2;Z_clrst();}//if(_2pl) {w_o=0;Z_clrst();w_o=100;Z_clrst();}
-  else {w_o=0;Z_clrst();}//else {w_o=50;Z_clrst();}
-  V_setscr(scrbuf);
   pl1.drawst=0xFF;
   if(_2pl) pl2.drawst=0xFF;
   g_exit=0;
@@ -196,15 +210,6 @@ void G_init(void) {
   logo("G_init: настройка ресурсов игры ");
   logo_gas(5,GGAS_TOTAL);
   telepsnd=Z_getsnd("TELEPT");
-  scrnh[0]=M_lock(F_getresid("TITLEPIC"));
-  scrnh[1]=M_lock(F_getresid("INTERPIC"));
-  scrnh[2]=M_lock(F_getresid("ENDPIC"));
-  cd_scr=M_lock(F_getresid("CD1PIC"));
-  for(i=0;i<2;++i) {
-    sprintf(s,"LTN%c",i+'1');
-    for(j=0;j<2;++j)
-      ltn[i][j]=Z_getspr(s,j,0,NULL);
-  }
   ltnsnd[0]=Z_getsnd("THUND1");
   ltnsnd[1]=Z_getsnd("THUND2");
   DOT_alloc();
@@ -261,8 +266,6 @@ int G_end_video(void) {
 }
 
 
-static byte transdraw=0;
-
 void G_act(void) {
   static byte pcnt=0;
 /*
@@ -291,7 +294,7 @@ void G_act(void) {
       if(g_st==GS_BVIDEO) G_start();
       else goto inter;
     }
-    V_copytoscr(0,SCRW,0,SCRH);//V_copytoscr(0,320,0,200);
+//    V_copytoscr(0,SCRW,0,SCRH);//V_copytoscr(0,320,0,200);
     return;
   }else if(g_st==GS_ENDANIM || g_st==GS_END2ANIM || g_st==GS_END3ANIM) {
     if(!A8_nextframe()) {
@@ -301,7 +304,7 @@ void G_act(void) {
         case GS_END3ANIM: g_st=GS_ENDSCR;lastkey=0;break;
       }g_sttm=0;return;
     }
-    V_copytoscr(0,SCRW,0,SCRH);//V_copytoscr(0,320,0,200);
+//    V_copytoscr(0,SCRW,0,SCRH);//V_copytoscr(0,320,0,200);
     return;
   }else if(g_st==GS_DARKEN) {
       g_st=GS_END2ANIM;A8_start("CREDITS");
@@ -348,7 +351,6 @@ void G_act(void) {
   if(_2pl) {pl2.hit=0;pl2.hito=-3;}
   G_code();
 
-  W_act();
   IT_act();
   SW_act();
   if(_2pl) {
@@ -412,124 +414,6 @@ inter:
 #endif
 }
 
-/*
-static void drawview(player_t *p) {
-  if(p->looky<-50) p->looky=-50;
-  else if(p->looky>50) p->looky=50;
-  w_x=p->o.x;w_y=p->o.y-12+p->looky;W_draw();PL_drawst(p);
-}
-*/
-static void drawview(player_t *p) {
-  if(p->looky<-SCRH/4) p->looky=-SCRH/4;
-  else if(p->looky>SCRH/4) p->looky=SCRH/4;
-  w_x=p->o.x;w_y=p->o.y-12+p->looky;
-  W_draw();
-  PL_drawst(p);
-}
-
-static int get_pu_st(int t) {
-  if(t>=PL_FLASH) return 1;
-  if((t/9)&1) return 0;
-  return 1;
-}
-
-static void pl_info(player_t *p,int y) {
-  dword t;
-
-  t=p->kills*10920/g_time;
-  Z_gotoxy(25,y);Z_printbf("KILLS");//Z_gotoxy(25,y);Z_printbf("KILLS");
-  Z_gotoxy(25,y+15);Z_printbf("KPM");//Z_gotoxy(25,y+15);Z_printbf("KPM");
-  Z_gotoxy(25,y+30);Z_printbf("SECRETS %u / %u",p->secrets,sw_secrets);//Z_gotoxy(25,y+30);Z_printbf("SECRETS %u / %u",p->secrets,sw_secrets);
-  Z_gotoxy(255,y);Z_printbf("%u",p->kills);//Z_gotoxy(255,y);Z_printbf("%u",p->kills);
-  Z_gotoxy(255,y+15);Z_printbf("%u.%u",t/10,t%10);//Z_gotoxy(255,y+15);Z_printbf("%u.%u",t/10,t%10);
-}
-
-void G_draw(void) {
-  int h;
-  word hr,mn,sc;
-  if(g_trans && !transdraw) return;
-  switch(g_st) {
-    case GS_ENDANIM: case GS_END2ANIM: case GS_DARKEN:
-    case GS_BVIDEO: case GS_EVIDEO: case GS_END3ANIM:
-      return;
-    case GS_TITLE:
-      V_center(1);//
-      V_pic(0,0,scrnh[0]);
-      V_center(0);//
-      break;
-    case GS_ENDSCR:
-      V_center(1);//
-      V_clr(0,SCRW,0,SCRH,0);V_pic(0,0,scrnh[2]);//V_clr(0,320,0,200,0);V_pic(0,0,scrnh[2]);
-      V_center(0);//
-      break;
-    case GS_INTER:
-        V_center(1);//
-        V_clr(0,SCRW,0,SCRH,0);//
-         V_pic(0,0,scrnh[1]);
-         Z_gotoxy(60,20);Z_printbf("LEVEL COMPLETE");
-         Z_calc_time(g_time,&hr,&mn,&sc);
-         Z_gotoxy(115,40);Z_printbf("TIME %u:%02u:%02u",hr,mn,sc);
-         h=60;
-         if(_2pl) {
-               Z_gotoxy(80,h);Z_printbf("PLAYER ONE");
-               Z_gotoxy(80,h+70);Z_printbf("PLAYER TWO");
-               h+=SCRH/10;//h+=20;
-         }
-         pl_info(&pl1,h);
-         if(_2pl) pl_info(&pl2,h+70);
-          V_center(0);//
-         break;
-  }
-  V_center(1);//
-  if(g_st!=GS_GAME) {
-    if(g_trans) return;
-    GM_draw();
-    V_copytoscr(0,SCRW,0,SCRH);//V_copytoscr(0,320,0,200);
-    return;
-  }
-  V_center(0);//
-  
-  if(_2pl) {
-       w_o=0;WD=SCRW-120;HT=SCRH/2-2;drawview(&pl1);//w_o=0;drawview(&pl1);
-       w_o=SCRH/2;WD=SCRW-120;HT=SCRH/2-2;drawview(&pl2);//w_o=100;drawview(&pl2);
-  }else{
-       w_o=0;WD=SCRW-120;HT=SCRH-2;drawview(&pl1);//w_o=50;drawview(&pl1);
-  }
-  if(g_trans) return;
-  V_center(1);//
-  if(GM_draw()) {
-    pl1.drawst=pl2.drawst=0xFF;//pl1.drawst=pl2.drawst=0;
-    V_copytoscr(0,SCRW,0,SCRH);//V_copytoscr(0,320,0,200);
-    return;
-  }
-  V_center(0);//
-  if(pl1.invl) h=get_pu_st(pl1.invl)*6;
-  else if(pl1.pain<15) h=0;
-  else if(pl1.pain<35) h=1;
-  else if(pl1.pain<55) h=2;
-  else if(pl1.pain<75) h=3;
-  else if(pl1.pain<95) h=4;
-  else h=5;
-  if(h) V_maptoscr(0,SCRW-120,1,(_2pl)?(SCRH/2-2):(SCRH-2),clrmap+h*256);//if(h) V_maptoscr(0,200,(_2pl)?1:51,98,clrmap+h*256);
-  else V_copytoscr(0,SCRW-120,1,(_2pl)?(SCRH/2-2):(SCRH-2)); //else V_copytoscr(0,200,(_2pl)?1:51,98);
-  if(pl1.drawst) V_copytoscr(SCRW-120,120,0,_2pl?(SCRH/2):SCRH);//if(pl1.drawst) V_copytoscr(200,120,(_2pl)?0:50,100);
-  pl1.drawst=0xFF;//pl1.drawst=0;
-  if(_2pl) {
-    if(pl2.invl) h=get_pu_st(pl2.invl)*6;
-    else if(pl2.pain<15) h=0;
-    else if(pl2.pain<35) h=1;
-    else if(pl2.pain<55) h=2;
-    else if(pl2.pain<75) h=3;
-    else if(pl2.pain<95) h=4;
-    else h=5;
-    if(h) V_maptoscr(0,SCRW-120,SCRH/2+1,SCRH/2-2,clrmap+h*256);//if(h) V_maptoscr(0,200,101,98,clrmap+h*256);
-    else V_copytoscr(0,SCRW-120,SCRH/2+1,SCRH/2-2);//else V_copytoscr(0,200,101,98);
-    if(pl2.drawst) V_copytoscr(SCRW-120,120,SCRH/2,SCRH/2);//if(pl2.drawst) V_copytoscr(200,120,100,100);
-    pl2.drawst=0xFF;//pl2.drawst=0;
-  }
-}
-
 void G_respawn_player(player_t *p) {
   int i;