DEADSOFTWARE

first step to separate render
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Wed, 11 Mar 2020 21:37:26 +0000 (00:37 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Wed, 11 Mar 2020 21:37:26 +0000 (00:37 +0300)
src/game.c
src/render.c [new file with mode: 0644]
src/render.h [new file with mode: 0644]
src/switch.h
src/view.c
src/view.h

index 353ed539552dd0e3dc9ba049bc2739f927962f8c..fe52751f86674a1d244603716d1c25764feeb4a1 100644 (file)
@@ -57,6 +57,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];
 
@@ -68,10 +71,6 @@ extern int hit_xv,hit_yv;
 extern vgapal std_pal;
 void setgamma(int);
 
-extern int sw_secrets;
-
-#define PL_FLASH 90
-
 extern int PL_JUMP;
 
 extern map_block_t blk;
@@ -89,7 +88,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;
@@ -290,8 +289,6 @@ int G_end_video(void) {
 }
 
 
-static byte transdraw=0;
-
 void G_act(void) {
   static byte pcnt=0;
 /*
@@ -441,124 +438,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;
 
diff --git a/src/render.c b/src/render.c
new file mode 100644 (file)
index 0000000..4c9eb0c
--- /dev/null
@@ -0,0 +1,315 @@
+#include "glob.h"
+#include "render.h"
+#include "view.h"
+#include "player.h"
+#include "switch.h"
+#include "vga.h"
+#include "menu.h"
+#include "misc.h"
+
+extern byte clrmap[256*12]; // main.c
+extern void *scrnh[3]; // game.c
+extern int g_trans; // game.c
+extern byte transdraw; // game.c
+extern void *horiz; // view.c
+extern int sky_type; // view.c
+extern int lt_time, lt_type, lt_side, lt_ypos, lt_force; // game.c
+extern void *ltn[2][2]; // game.c
+
+/* --- menu --- */
+
+/*
+static int GM_draw (void) {
+  int i, j, k, y;
+  ++gm_tm;
+  V_setrect(0, SCRW, 0, SCRH);
+  if (!mnu && !gm_redraw) {
+    return 0;
+  }
+  gm_redraw = 0;
+  if (!mnu) {
+    return 1;
+  }
+  if (mnu->type == MENU) {
+    y = (200 - mnu -> n * 16 - 20) / 2;
+    Z_gotoxy(mnu->x, y - 10); Z_printbf(mnu->ttl);
+    for (i = 0; i < mnu->n; ++i) {
+      if (mnu->t[i] == LOAD || mnu->t[i] == SAVE) {
+        j = y + i * 16 + 29;
+        V_spr(mnu->x, j, mslotl);
+        for (k = 8; k < 184; k += 8) {
+          V_spr(mnu->x + k, j, mslotm);
+        }
+        V_spr(mnu->x+184,j,mslotr);
+        Z_gotoxy(mnu->x+4,j-8);
+        if (input && i == save_mnu.cur) {
+          Z_printsf("%s_", ibuf);
+        } else {
+          Z_printsf("%s", savname[i]);
+        }
+      } else {
+        Z_gotoxy(mnu->x + (mnu->t[i] >= SVOLM ? (mnu->t[i] >= PL1CM ? 50 : 152) : 0), y + i * 16 + 20);
+        Z_printbf(mnu->m[i]);
+      }
+      if (mnu->t[i] == MUSIC) {
+        Z_printbf(" '%.8s'",g_music);
+      } else if(mnu->t[i] == INTERP) {
+        Z_printbf("%s", fullscreen ? "ON" : "OFF");
+      } else if(mnu->t[i] >= PL1CM) {
+        V_manspr(mnu->x + (mnu->t[i] == PL1CM ? 15 : 35), y + i * 16 + 20 + 14, PL_getspr(*panimp, 0), pcolortab[(mnu->t[i] == PL1CM) ? p1color : p2color]);
+      } else if(mnu->t[i]>=SVOLM) {
+        j = y + i * 16 + 20'
+        V_spr(mnu->x, j, mbarl);
+        for (k = 8; k < 144; k += 8) {
+          V_spr(mnu->x + k, j, mbarm);
+        }
+        V_spr(mnu->x + 144, j, mbarr);
+        switch(mnu->t[i]) {
+          case SVOLM: k = snd_vol; break;
+          case MVOLM: k = mus_vol; break;
+          case GAMMAM: k = gammaa << 5; break;
+        }
+        V_spr(mnu->x+8+k,j,mbaro);
+      }
+    }
+    V_spr(mnu->x - 25, y + mnu->cur * 16 + 20 - 8, msklh[(gm_tm / 6) & 1]);
+  } else {
+    Z_gotoxy((320 - strlen(mnu->ttl) * 7) / 2, 90); Z_printsf(mnu->ttl);
+    Z_gotoxy(136, 100); Z_printsf("(Y/N)");
+  }
+  return 1;
+}
+*/
+
+/* --- view --- */
+
+static void W_adjust (void) {
+  int MAXX = FLDW * CELW - WD / 2;
+  int MAXY = FLDH * CELH - HT / 2;
+  if (w_x < WD / 2) w_x = WD / 2;
+  if (w_y < HT / 2) w_y = HT / 2;
+  if (w_x > MAXX) w_x = MAXX;
+  if (w_y > MAXY) w_y = MAXY;
+}
+
+static void W_draw(void) {
+  W_adjust();
+  V_setrect(0, WD, w_o + 1, HT);
+  if (w_horiz) {
+    vgaimg *img = (vgaimg*)horiz;
+    int x = 0;
+    int d = 0;
+    do {
+      int y = w_o;
+      d &= ~2;
+      do {
+        V_rotspr(x, y, img, d);
+        y += img->h;
+        d ^= 2;
+      } while (y < HT + w_o);
+      x += img->w;
+      d ^= 1;
+    } while (x < WD);
+    if (sky_type == 2) {
+      if (lt_time < 0) {
+        if (!lt_side) {
+          V_spr(0, w_o + lt_ypos, ltn[lt_type][lt_time < -5 ? 0 : 1]);
+        } else {
+          V_spr2(WD - 1, w_o + lt_ypos, ltn[lt_type][lt_time < -5 ? 0 : 1]);
+        }
+      }
+    }
+  } else {
+    V_clr(0, WD, w_o + 1, HT, 0x97);
+  }
+  Z_drawfld((byte*)fldb, 1);
+  DOT_draw();
+  IT_draw();
+  PL_draw(&pl1);
+  if(_2pl) {
+    PL_draw(&pl2);
+  }
+  MN_draw();
+  WP_draw();
+  SMK_draw();
+  FX_draw();
+  Z_drawfld((byte*)fldf, 0);
+  if(sky_type == 2) {
+    if(lt_time == -4 || lt_time == -2) {
+      V_remap_rect(0, WD, w_o + 1, HT, clrmap + 256 * 11);
+    }
+  }
+}
+
+/* --- game --- */
+
+#define PL_FLASH 90
+
+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;
+  } else if((t / 9) & 1) {
+    return 0;
+  } else {
+    return 1;
+  }
+}
+
+static void pl_info (player_t *p, int y) {
+  dword t = p->kills * 10920 / g_time;
+  Z_gotoxy(25, y); Z_printbf("KILLS");
+  Z_gotoxy(25, y + 15); Z_printbf("KPM");
+  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 + 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_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;
+      }
+      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);
+    return;
+  }
+  V_center(0);
+  if (_2pl) {
+    w_o = 0;
+    WD = SCRW - 120;
+    HT = SCRH / 2 - 2;
+    drawview(&pl1);
+    w_o = SCRH / 2;
+    WD = SCRW - 120;
+    HT = SCRH / 2 - 2;
+    drawview(&pl2);
+  } else{
+    w_o = 0;
+    WD = SCRW - 120;
+    HT = SCRH - 2;
+    drawview(&pl1);
+  }
+  if (g_trans) {
+    return;
+  }
+  V_center(1);
+  if (GM_draw()) {
+    pl1.drawst = 0xFF;
+    pl2.drawst = 0xFF;
+    V_copytoscr(0,SCRW,0,SCRH);
+    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 != 0) {
+    V_maptoscr(0, SCRW - 120, 1, _2pl ? SCRH / 2 - 2 : SCRH - 2, clrmap + h * 256);
+  } else {
+    V_copytoscr(0, SCRW - 120, 1, _2pl ? SCRH / 2 - 2 : SCRH - 2);
+  }
+  if (pl1.drawst) {
+    V_copytoscr(SCRW - 120, 120, 0, _2pl ? SCRH / 2 : SCRH);
+  }
+  pl1.drawst = 0xFF;
+  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);
+    } else {
+      V_copytoscr(0, SCRW - 120, SCRH / 2 + 1, SCRH / 2 - 2);
+    }
+    if (pl2.drawst) {
+      V_copytoscr(SCRW - 120, 120, SCRH / 2, SCRH / 2);
+    }
+    pl2.drawst = 0xFF;
+  }
+}
+
diff --git a/src/render.h b/src/render.h
new file mode 100644 (file)
index 0000000..553ca98
--- /dev/null
@@ -0,0 +1 @@
+void G_draw (void);
index 8627920bc9012b6fb33cede8dedecc9f402ff7f6..222b1a0195d271c3489f3e73ef76060d04184ef6 100644 (file)
@@ -29,6 +29,8 @@ enum{
   SW_LIFT
 };
 
+extern int sw_secrets;
+
 void SW_init(void);
 void SW_alloc(void);
 int SW_load(FILE*);
index 692066edf0db64efff3ea90caebb199209f5731f..b6b52c88df9a29f0ab3f1d47b00d5b8b58fca44c 100644 (file)
@@ -153,61 +153,6 @@ void W_loadgame(FILE* h) {
   horiz = V_loadvgaimg(s);
 }
 
-void W_adjust(void) {
-  int MAXX =(FLDW*CELW-WD/2);//
-  int MAXY =(FLDH*CELH-HT/2);//
-
-  if(w_x<WD/2) w_x=WD/2;
-  if(w_y<HT/2) w_y=HT/2;
-  if(w_x>MAXX) w_x=MAXX;
-  if(w_y>MAXY) w_y=MAXY;
-}
-
-void W_draw(void) {
-  W_adjust();
-  V_setrect(0,WD,w_o+1,HT);
-  if(w_horiz) {
-
-
-      //V_pic(127-(word)(w_x-WD/2)*56U/(word)(MAXX-WD/2),w_o+123-(word)(w_y-HT/2)*28U/(word)(MAXY-HT/2),horiz);
-      vgaimg *img = (vgaimg*)horiz;
-      int x=0;
-      int d=0;
-      do {
-         int y=w_o;
-         d &= ~2;
-         do {
-             V_rotspr(x,y,img,d);
-             y+=img->h;
-             d^=2;
-         } while (y<HT+w_o);
-         x+=img->w;
-         d^=1;
-      } while (x<WD);
-
-
-
-    if(sky_type==2) if(lt_time<0) {
-      if(!lt_side) V_spr(0,w_o+lt_ypos,ltn[lt_type][(lt_time<-5)?0:1]);
-      else V_spr2(WD-1,w_o+lt_ypos,ltn[lt_type][(lt_time<-5)?0:1]);
-    }
-  }else V_clr(0,WD,w_o+1,HT,0x97);
-  Z_drawfld((byte *)fldb, 1);
-  DOT_draw();
-  IT_draw();
-  PL_draw(&pl1);
-  if(_2pl) PL_draw(&pl2);
-  MN_draw();
-  WP_draw();
-  SMK_draw();
-  FX_draw();
-  Z_drawfld((byte *)fldf, 0);
-  if(sky_type==2)
-    if(lt_time==-4 || lt_time==-2)
-      V_remap_rect(0,WD,w_o+1,HT,clrmap+256*11);
-}
-
-
 void W_init(void) {
   int i,j;
   static char *anm[ANIT-1][5]={
index fb1eae16199be9b9d4cb47bcec19d25e706200b0..bc14b4557536ac22c9eb9b50f34fe58aa2d05c42 100644 (file)
@@ -67,7 +67,6 @@ typedef struct{
 
 #pragma pack()
 
-void W_draw(void);
 void W_act(void);
 
 void W_init(void);
@@ -94,4 +93,4 @@ extern int dm_pnum,dm_pl1p,dm_pl2p;
 extern int WD; //
 extern int HT; //
 
-#endif /* VIEW_H_INCLUDED */
\ No newline at end of file
+#endif /* VIEW_H_INCLUDED */