⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mkg.c

📁 经典的老游戏digger的源代码.提起digger相信很多人会回忆起曾经为了它挑灯夜战的时光
💻 C
📖 第 1 页 / 共 2 页
字号:
"  vgafire3b,    vgafire3bmask,\n"
"  vgaexp1b,     vgaexp1bmask,\n"
"  vgaexp2b,     vgaexp2bmask,\n"
"  vgaexp3b,     vgaexp3bmask};\n");
}

int ccol[16]={0,0,1,0,2,0,3,0};

void mkgc(void)
{
  int i,x,y,b;
  char cbuf[6]={0,0,0,0,0,0};

  in=fileopen("cga.spr","rb");

  fprintf(out,"Uint3 cgazero60[]={\n");
  for (y=0;y<15;y++)
    run(cbuf,4,y==14);

  for (i=0;i<nspr;i++) {
    fread(buf,1024,1,in);
    if (i<80 || i>=87) {
      fprintf(out,"Uint3 cga%s[]={\n",gnames[i]);
      for (y=0;y<heights[i];y++) {
        for (x=0;x<widths[i];x++) {
          cbuf[x]=0;
          for (b=0;b<4;b++)
            cbuf[x]|=ccol[buf[(y<<5)+(x<<2)+b]&7]<<(6-(b<<1));
        }
        run(cbuf,widths[i],y==heights[i]-1);
      }
    }
    if (i<87 || i>=95) {
      fprintf(out,"Uint3 cga%smask[]={\n",gnames[i]);
      for (y=0;y<heights[i];y++) {
        for (x=0;x<widths[i];x++) {
          cbuf[x]=0;
          for (b=0;b<4;b++)
            if ((buf[(y<<5)+(x<<2)+b]&7)==7)
              cbuf[x]|=0xc0>>(b<<1);
        }
        run(cbuf,widths[i],y==heights[i]-1);
      }
    }
  }

  fclose(in);

  fprintf(out,"Uint3 near *cgatable[]={\n"
"  cgazero60,    cgaediggermask,    /* 0 */\n"
"  cgardigger1,  cgardigger1mask,\n"
"  cgardigger2,  cgardigger2mask,\n"
"  cgardigger3,  cgardigger3mask,\n"
"  cgarxdigger1, cgarxdigger1mask,\n"
"  cgarxdigger2, cgarxdigger2mask,  /* 5 */\n"
"  cgarxdigger3, cgarxdigger3mask,\n"
"  cgaudigger1,  cgaudigger1mask,\n"
"  cgaudigger2,  cgaudigger2mask,\n"
"  cgaudigger3,  cgaudigger3mask,\n"
"  cgauxdigger1, cgauxdigger1mask,  /* 10 */\n"
"  cgauxdigger2, cgauxdigger2mask,\n"
"  cgauxdigger3, cgauxdigger3mask,\n"
"  cgaldigger1,  cgaldigger1mask,\n"
"  cgaldigger2,  cgaldigger2mask,\n"
"  cgaldigger3,  cgaldigger3mask,   /* 15 */\n"
"  cgalxdigger1, cgalxdigger1mask,\n"
"  cgalxdigger2, cgalxdigger2mask,\n"
"  cgalxdigger3, cgalxdigger3mask,\n"
"  cgaddigger1,  cgaddigger1mask,\n"
"  cgaddigger2,  cgaddigger2mask,   /* 20 */\n"
"  cgaddigger3,  cgaddigger3mask,\n"
"  cgadxdigger1, cgadxdigger1mask,\n"
"  cgadxdigger2, cgadxdigger2mask,\n"
"  cgadxdigger3, cgadxdigger3mask,\n"
"  cgadiggerd,   cgadiggerdmask,    /* 25 */\n"
"  cgagrave1,    cgagrave1mask,\n"
"  cgagrave2,    cgagrave2mask,\n"
"  cgagrave3,    cgagrave3mask,\n"
"  cgagrave4,    cgagrave4mask,\n"
"  cgagrave5,    cgagrave5mask,     /* 30 */\n"
"\n"
"  cgazero60,    cgaediggermask,\n"
"  cgarbigger1,  cgarbigger1mask,\n"
"  cgarbigger2,  cgarbigger2mask,\n"
"  cgarbigger3,  cgarbigger3mask,\n"
"  cgarxbigger1, cgarxbigger1mask,  /* 35 */\n"
"  cgarxbigger2, cgarxbigger2mask,\n"
"  cgarxbigger3, cgarxbigger3mask,\n"
"  cgaubigger1,  cgaubigger1mask,\n"
"  cgaubigger2,  cgaubigger2mask,\n"
"  cgaubigger3,  cgaubigger3mask,   /* 40 */\n"
"  cgauxbigger1, cgauxbigger1mask,\n"
"  cgauxbigger2, cgauxbigger2mask,\n"
"  cgauxbigger3, cgauxbigger3mask,\n"
"  cgalbigger1,  cgalbigger1mask,\n"
"  cgalbigger2,  cgalbigger2mask,   /* 45 */\n"
"  cgalbigger3,  cgalbigger3mask,\n"
"  cgalxbigger1, cgalxbigger1mask,\n"
"  cgalxbigger2, cgalxbigger2mask,\n"
"  cgalxbigger3, cgalxbigger3mask,\n"
"  cgadbigger1,  cgadbigger1mask,   /* 50 */\n"
"  cgadbigger2,  cgadbigger2mask,\n"
"  cgadbigger3,  cgadbigger3mask,\n"
"  cgadxbigger1, cgadxbigger1mask,\n"
"  cgadxbigger2, cgadxbigger2mask,\n"
"  cgadxbigger3, cgadxbigger3mask,  /* 55 */\n"
"  cgabiggerd,   cgabiggerdmask,\n"
"  cgagrave1,    cgagrave1mask,\n"
"  cgagrave2,    cgagrave2mask,\n"
"  cgagrave3,    cgagrave3mask,\n"
"  cgagrave4,    cgagrave4mask,     /* 60 */\n"
"  cgagrave5,    cgagrave5mask,\n"
"\n"
"  cgasbag,      cgasbagmask,\n"
"  cgarbag,      cgarbagmask,\n"
"  cgalbag,      cgalbagmask,\n"
"  cgafbag,      cgafbagmask,       /* 65 */\n"
"  cgagold1,     cgagold1mask,\n"
"  cgagold2,     cgagold2mask,\n"
"  cgagold3,     cgagold3mask,\n"
"\n"
"  cganobbin1,   cganobbin1mask,\n"
"  cganobbin2,   cganobbin2mask,    /* 70 */\n"
"  cganobbin3,   cganobbin3mask,\n"
"  cganobbind,   cganobbindmask,\n"
"  cgarhobbin1,  cgarhobbin1mask,\n"
"  cgarhobbin2,  cgarhobbin2mask,\n"
"  cgarhobbin3,  cgarhobbin3mask,   /* 75 */\n"
"  cgarhobbind,  cgarhobbindmask,\n"
"  cgalhobbin1,  cgalhobbin1mask,\n"
"  cgalhobbin2,  cgalhobbin2mask,\n"
"  cgalhobbin3,  cgalhobbin3mask,\n"
"  cgalhobbind,  cgalhobbindmask,   /* 80 */\n"
"\n"
"  cgabonus,     cgaediggermask,\n"
"\n"
"  cgafire1,     cgafire1mask,\n"
"  cgafire2,     cgafire2mask,\n"
"  cgafire3,     cgafire3mask,\n"
"  cgaexp1,      cgaexp1mask,       /* 85 */\n"
"  cgaexp2,      cgaexp2mask,\n"
"  cgaexp3,      cgaexp3mask,\n"
"\n"
"  cgafire1,     cgafire1mask,\n"
"  cgafire2,     cgafire2mask,\n"
"  cgafire3,     cgafire3mask,      /* 90 */\n"
"  cgaexp1,      cgaexp1mask,\n"
"  cgaexp2,      cgaexp2mask,\n"
"  cgaexp3,      cgaexp3mask,\n"
"\n"
"  cgaback1,     cgazero60,\n"
"  cgaback2,     cgazero60,         /* 95 */\n"
"  cgaback3,     cgazero60,\n"
"  cgaback4,     cgazero60,\n"
"  cgaback5,     cgazero60,\n"
"  cgaback6,     cgazero60,\n"
"  cgaback7,     cgazero60,         /* 100 */\n"
"  cgaback8,     cgazero60,\n"
"\n"
"  cgazero60,    cgarightblobmask,\n"
"  cgazero60,    cgatopblobmask,\n"
"  cgazero60,    cgaleftblobmask,\n"
"  cgazero60,    cgabottomblobmask, /* 105 */\n"
"  cgazero60,    cgasquareblobmask,\n"
"  cgazero60,    cgafurryblobmask,\n"
"\n"
"  cgaemerald,   cgaemeraldmask,\n"
"  cgazero60,    cgaemeraldmask,\n"
"\n"
"  cgaliferight, cgaliferightmask,  /* 110 */\n"
"  cgalifeleft,  cgalifeleftmask,\n"
"  cgazero60,    cgaelifemask,\n"
"  cgaleftlife,  cgaleftlifemask,\n"
"\n"
"  cgafire1b,    cgafire1bmask,\n"
"  cgafire2b,    cgafire2bmask,     /* 115 */\n"
"  cgafire3b,    cgafire3bmask,\n"
"  cgaexp1b,     cgaexp1bmask,\n"
"  cgaexp2b,     cgaexp2bmask,\n"
"  cgaexp3b,     cgaexp3bmask};\n");
}

/* As new glyphs are added enter them into clist in the order in which they
   appear in the file. */

char clist[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.:_ ";

char *symbols[]={
  "symspace","symexclam","symdquote","symhash","symdollar","sympercent",
  "symamp","symcquote","symoparen","symcparen","symaster","symplus","symcomma",
  "symdash","symdot","symslash","num0","num1","num2","num3","num4","num5",
  "num6","num7","num8","num9","symcolon","symsemi","symless","symequal",
  "symgreater","symquestion","symat","letA","letB","letC","letD","letE","letF",
  "letG","letH","letI","letJ","letK","letL","letM","letN","letO","letP","letQ",
  "letR","letS","letT","letU","letV","letW","letX","letY","letZ","symobracket",
  "symbackslash","symcbracket","symhat","symline","symoquote","leta","letb",
  "letc","letd","lete","letf","letg","leth","leti","letj","letk","letl","letm",
  "letn","leto","letp","letq","letr","lets","lett","letu","letv","letw","letx",
  "lety","letz","symocurly","symbar","symccurly","symtilde"};

void mkga(void)
{
#ifdef _WINDOWS
  char cbuf[12];
  int i,x,y,b,p,l;
  fprintf(out,
    "char copyright[]=\"Portions Copyright(c) 1983 Windmill Software Inc.\";\n\n");

  in=fileopen("cgatext.spr","rb");

  for (i=0;clist[i]!=0;i++) {
    fread(buf,1024,1,in);
    fprintf(out,"Uint3 cga%s[]={\n",symbols[clist[i]-32]);
    for (y=0;y<12;y++) {
      for (x=0;x<12;x++) {
        if (x&0x1)
          cbuf[x>>1]|=buf[(y<<5)+x];
        else
          cbuf[x>>1]=buf[(y<<5)+x]<<4;

        if (x==11)
          run(cbuf,6,y==11);

      }
    }
  }
  fclose(in);

  in=fileopen("vgatext.spr","rb");
  for (i=0;clist[i]!=0;i++) {
    fread(buf,1024,1,in);
    fprintf(out,"Uint3 vga%s[]={\n",symbols[clist[i]-32]);
    for (y=0;y<24;y++) {
      for (x=0;x<24;x++) {
        if (x&0x1)
          cbuf[x>>1]|=buf[(y<<5)+x];
        else
          cbuf[x>>1]=buf[(y<<5)+x]<<4;

        if (x==23)
          run(cbuf,12,y==23 && x==23);
      }
    }
  }
#else
  char cbuf[3];
  int i,x,y,b,p,l;
  fprintf(out,
    "char copyright[]=\"Portions Copyright(c) 1983 Windmill Software Inc.\";\n\n"
    "Sint textoffdat[16]={\n"
    "   72,   0, -72,-72,\n"
    "  144,   0,-288,144,\n"
    "  144,-216, 144,-72,\n"
    "  144,-216, -72,144};\n\n");

  in=fileopen("cgatext.spr","rb");

  for (i=0;clist[i]!=0;i++) {
    fread(buf,1024,1,in);
    fprintf(out,"Uint3 cga%s[]={\n",symbols[clist[i]-32]);
    for (y=0;y<12;y++) {
      for (x=0;x<3;x++) {
        cbuf[x]=0;
        for (b=0;b<4;b++)
          if (buf[(y<<5)+(x<<2)+b]!=0)
            cbuf[x]|=0xc0>>(b<<1);
      }
      run(cbuf,3,y==11);
    }
  }
  fclose(in);
  in=fileopen("vgatext.spr","rb");
  for (i=0;clist[i]!=0;i++) {
    fread(buf,1024,1,in);
    fprintf(out,"Uint3 vga%s[]={\n",symbols[clist[i]-32]);
    for (p=8;p>0;p>>=1)
      for (y=0;y<24;y++) {
        for (x=0;x<3;x++) {
          cbuf[x]=0;
          for (b=0;b<8;b++)
            if ((buf[(y<<5)+(x<<3)+b]&p)!=0)
              cbuf[x]|=128>>b;
        }
        run(cbuf,3,y==23 && p==1);
      }
  }
#endif

  fclose(in);
  fprintf(out,"Uint3 near *ascii2cga[0x5f]={\n");
  l=0;
  p=32;
  for (i=32;p<127;i++) {
    for (x=0;clist[x]!=0;x++)
      if (toupper(clist[x])==toupper(i)) {
        l+=strlen(symbols[clist[x]-32])+5;
        break;
      }
    if (clist[x]==0)
      l+=3;
    if (l>70 || i==127) {
      fprintf(out,"  ");
      l=0;
      for (b=p;b<i;b++) {
        for (x=0;clist[x]!=0;x++)
          if (toupper(clist[x])==toupper(b)) {
            fprintf(out,"cga%s",symbols[clist[x]-32]);
            l+=strlen(symbols[clist[x]-32])+5;
            if (b<126)
              fprintf(out,",");
            break;
          }
        if (clist[x]==0) {
          fprintf(out,"0");
          l+=3;
          if (b<126)
            fprintf(out,",");
          else {
            fprintf(out,"};");
            l++;
          }
        }
      }
      for (b=0;b<71-l;b++)
        fprintf(out," ");
      fprintf(out,"/* ");
      for (b=p;b<i;b++)
        fprintf(out,"%c",b);
      fprintf(out," */\n");
      l=0;
      p=i;
      i--;
    }
  }

  fprintf(out,"Uint3 near *ascii2vga[0x5f]={\n");
  l=0;
  p=32;
  for (i=32;p<127;i++) {
    for (x=0;clist[x]!=0;x++)
      if (toupper(clist[x])==toupper(i)) {
        l+=strlen(symbols[clist[x]-32])+5;
        break;
      }
    if (clist[x]==0)
      l+=3;
    if (l>70 || i==127) {
      fprintf(out,"  ");
      l=0;
      for (b=p;b<i;b++) {
        for (x=0;clist[x]!=0;x++)
          if (toupper(clist[x])==toupper(b)) {
            fprintf(out,"vga%s",symbols[clist[x]-32]);
            l+=strlen(symbols[clist[x]-32])+5;
            if (b<126)
              fprintf(out,",");
            break;
          }
        if (clist[x]==0) {
          fprintf(out,"0");
          l+=3;
          if (b<126)
            fprintf(out,",");
          else {
            fprintf(out,"};");
            l++;
          }
        }
      }
      for (b=0;b<71-l;b++)
        fprintf(out," ");
      fprintf(out,"/* ");
      for (b=p;b<i;b++)
        fprintf(out,"%c",b);
      fprintf(out," */\n");
      l=0;
      p=i;
      i--;
    }
  }
}

int main(int argc,char *argv[])
{
  int n=-1;
  if (argc<=1) {
    fprintf(stderr,"Syntax: MKG <name>\nWhere <name> is vgagrafx.c, cgagrafx.c or alpha.c\n");
    return 1;
  }
  if (stricmp(argv[1],"vgagrafx.c")==0)
    n=0;
  if (stricmp(argv[1],"cgagrafx.c")==0)
    n=1;
  if (stricmp(argv[1],"alpha.c")==0)
    n=2;
  out=fileopen(argv[1],"wt");
  fprintf(out,"#include \"def.h\"\n\n");
  if (n==0)
    mkgv();
  else
    if (n==1)
      mkgc();
    else
      if (n==2)
        mkga();
      else {
        fprintf(stderr,"MKG: Don't know how to make %s\n",argv[1]);
        return 1;
      }
  fclose(out);
  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -