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

📄 mkg.c

📁 经典的老游戏digger的源代码.提起digger相信很多人会回忆起曾经为了它挑灯夜战的时光
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Digger Remastered
   Copyright (c) Andrew Jenner 1998-2004 */

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include "def.h"

FILE *in,*out;

unsigned char buf[1024];

void run(char *data,int l,bool ef)
{
  int i;
  fprintf(out,"  ");
  for (i=0;i<l;i++) {
    fprintf(out,"0x%02x",data[i]&0xff);
    if (i==l-1 && ef)
      fprintf(out,"};\n");
    else
      fprintf(out,",");
  }
  fprintf(out,"\n");
}

#define nspr 107

char *gnames[]={
  "emerald","sbag","rbag","lbag","fbag","gold1","gold2","gold3","nobbin3",
  "nobbin2","nobbin1","nobbind","rhobbin1","rhobbin2","rhobbin3","rhobbind",
  "lhobbin1","lhobbin2","lhobbin3","lhobbind","bonus","rdigger3","rxdigger3",
  "rdigger2","rxdigger2","rdigger1","rxdigger1","ldigger3","lxdigger3",
  "ldigger2","lxdigger2","ldigger1","lxdigger1","udigger3","uxdigger3",
  "udigger2","uxdigger2","udigger1","uxdigger1","ddigger3","dxdigger3",
  "ddigger2","dxdigger2","ddigger1","dxdigger1","rbigger3","rxbigger3",
  "rbigger2","rxbigger2","rbigger1","rxbigger1","lbigger3","lxbigger3",
  "lbigger2","lxbigger2","lbigger1","lxbigger1","ubigger3","uxbigger3",
  "ubigger2","uxbigger2","ubigger1","uxbigger1","dbigger3","dxbigger3",
  "dbigger2","dxbigger2","dbigger1","dxbigger1","grave5","grave4","grave3",
  "grave2","grave1","diggerd","biggerd","liferight","lifeleft","elife",
  "leftlife","rightblob","leftblob","topblob","bottomblob","furryblob",
  "squareblob","edigger","back1","back2","back3","back4","back5","back6",
  "back7","back8","fire1","fire2","fire3","exp1","exp2","exp3","fire1b",
  "fire2b","fire3b","exp1b","exp2b","exp3b"};

int heights[]={
  10,15,15,15,15,15,15,15,15,
  15,15,15,15,15,15,15,
  15,15,15,14,15,15,15,
  15,15,15,15,15,15,
  15,15,15,15,15,15,
  15,15,15,15,15,15,
  15,15,15,15,15,15,
  15,15,15,15,15,15,
  15,15,15,15,15,15,
  15,15,15,15,15,15,
  15,15,15,15,15,15,15,
  15,15,15,15,12,12,12,
  12,18,18,6,6,8,
  6,15,4,4,4,4,4,4,
  4,4,8,8,8,8,8,8,8,
  8,8,8,8,8};

int widths[]={
  4,4,4,4,4,4,4,4,4,
  4,4,4,4,4,4,4,
  4,4,4,4,4,4,4,
  4,4,4,4,4,4,
  4,4,4,4,4,4,
  4,4,4,4,4,4,
  4,4,4,4,4,4,
  4,4,4,4,4,4,
  4,4,4,4,4,4,
  4,4,4,4,4,4,
  4,4,4,4,4,4,4,
  4,4,4,4,4,4,4,
  4,2,2,6,6,6,
  6,4,5,5,5,5,5,5,
  5,5,2,2,2,2,2,2,2,
  2,2,2,2,2};

FILE *fileopen(char *name,char *mode)
{
  FILE *f;
  f=fopen(name,mode);
  if (f==NULL) {
    printf("Error: Cannot open file %s with mode %s\n",name,mode);
    exit(1);
  }
  return f;
}

void mkgv(void)
{
  int i,x,y,b,p;
  char cbuf[24]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

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

#ifdef ARM

  fprintf(out,"Uint3 vgazero480[]={\n");
  for (y=0;y<30;y++)
    run(cbuf,16,y==29);

  for (i=0;i<nspr;i++) {
    fread(buf,1024,1,in);
    if (i<80 || i>=95) { /* Normal data */
      fprintf(out,"Uint3 vga%s[]={\n",gnames[i]);
      for (y=0;y<(heights[i]<<1);y++) {
        for (x=0;x<(widths[i]<<2);x++) {
          cbuf[x]=0;
          for (b=0;b<2;b++)
            if (buf[(y<<5)+(x<<1)+b]!=0xff)
              cbuf[x]|=buf[(y<<5)+(x<<1)+b]<<(b<<2);
        }
        run(cbuf,widths[i]<<2,y==(heights[i]<<1)-1);
      }
    }
    if (i>=87 && i<95) { /* Background data */
      fprintf(out,"Uint3 vga%s[]={\n",gnames[i]);
      for (y=0;y<8;y++) {
        for (x=0;x<16;x++) {
          cbuf[x]=0;
          for (b=0;b<2;b++)
            cbuf[x]|=buf[(y<<5)+(x<<1)+b]<<(b<<2);
        }
        for (x=0;x<4;x++) {
          cbuf[16+x]=0;
          for (b=0;b<2;b++)
            cbuf[16+x]|=buf[(y<<5)+(x<<1)+512+b]<<(b<<2);
        }
        run(cbuf,widths[i]<<2,y==7);
      }
    }
    if (i==80 || i==81) { /* Tall masks */
      fprintf(out,"Uint3 vga%smask[]={\n",gnames[i]);
      for (y=0;y<32;y++) {
        for (x=0;x<(widths[i]<<2);x++) {
          cbuf[x]=0;
          for (b=0;b<2;b++)
            if (buf[(y<<5)+(x<<1)+b]&15)
              cbuf[x]|=15<<(b<<2);
        }
        run(cbuf,widths[i]<<2,FALSE);
      }
      for (y=0;y<4;y++) {
        for (x=0;x<(widths[i]<<2);x++) {
          cbuf[x]=0;
          for (b=0;b<2;b++)
            if (buf[(y<<5)+(x<<1)+b+16]&15)
              cbuf[x]|=15<<(b<<2);
        }
        run(cbuf,widths[i]<<2,y==3);
      }
    }
    if (i>=82 && i<86) { /* Wide masks */
      fprintf(out,"Uint3 vga%smask[]={\n",gnames[i]);
      for (y=0;y<(heights[i]<<1);y++) {
        for (x=0;x<16;x++) {
          cbuf[x]=0;
          for (b=0;b<2;b++)
            if (buf[(y<<5)+(x<<1)+b]&15)
              cbuf[x]|=15<<(b<<2);
        }
        for (x=0;x<8;x++) {
          cbuf[x+16]=0;
          for (b=0;b<2;b++)
            if (buf[(y<<5)+(x<<1)+512+b]&15)
              cbuf[x+16]|=15<<(b<<2);
        }
        run(cbuf,widths[i]<<2,y==(heights[i]<<1)-1);
      }
    }
    if (i<80 || i>=95 || i==86) { /* Normal masks */
      fprintf(out,"Uint3 vga%smask[]={\n",gnames[i]);
      for (y=0;y<(heights[i]<<1);y++) {
        for (x=0;x<(widths[i]<<2);x++) {
          cbuf[x]=0;
          for (b=0;b<2;b++)
            if (buf[(y<<5)+(x<<1)+b]&128)
              cbuf[x]|=15<<(b<<2);
        }
        run(cbuf,widths[i]<<2,y==(heights[i]<<1)-1);
      }
    }
  }

#else

  fprintf(out,"Uint3 vgazero480[]={\n");
  for (y=0;y<120;y++)
    run(cbuf,4,y==119);

  for (i=0;i<nspr;i++) {
    fread(buf,1024,1,in);
    if (i<80 || i>=95) { /* Normal data */
      fprintf(out,"Uint3 vga%s[]={\n",gnames[i]);
      for (p=8;p>0;p>>=1)
        for (y=0;y<(heights[i]<<1);y++) {
          for (x=0;x<widths[i];x++) {
            cbuf[x]=0;
            for (b=0;b<8;b++)
              if ((buf[(y<<5)+(x<<3)+b]&p) && buf[(y<<5)+(x<<3)+b]!=0xff)
                cbuf[x]|=128>>b;
          }
          run(cbuf,widths[i],y==(heights[i]<<1)-1 && p==1);
        }
    }
    if (i>=87 && i<95) { /* Background data */
      fprintf(out,"Uint3 vga%s[]={\n",gnames[i]);
      for (p=8;p>0;p>>=1)
        for (y=0;y<8;y++) {
          for (x=0;x<4;x++) {
            cbuf[x]=0;
            for (b=0;b<8;b++)
              if (buf[(y<<5)+(x<<3)+b]&p)
                cbuf[x]|=128>>b;
          }
          cbuf[4]=0;
          for (b=0;b<8;b++)
            if (buf[(y<<5)+b+512]&p)
              cbuf[4]|=128>>b;
          run(cbuf,widths[i],y==7 && p==1);
        }
    }
    if (i==80 || i==81) { /* Tall masks */
      fprintf(out,"Uint3 vga%smask[]={\n",gnames[i]);
      for (y=0;y<32;y++) {
        for (x=0;x<widths[i];x++) {
          cbuf[x]=0;
          for (b=0;b<8;b++)
            if (buf[(y<<5)+(x<<3)+b]&15)
              cbuf[x]|=128>>b;
        }
        run(cbuf,widths[i],FALSE);
      }
      for (y=0;y<4;y++) {
        for (x=0;x<widths[i];x++) {
          cbuf[x]=0;
          for (b=0;b<8;b++)
            if (buf[(y<<5)+(x<<3)+b+16]&15)
              cbuf[x]|=128>>b;
        }
        run(cbuf,widths[i],y==3);
      }
    }
    if (i>=82 && i<86) { /* Wide masks */
      fprintf(out,"Uint3 vga%smask[]={\n",gnames[i]);
      for (y=0;y<(heights[i]<<1);y++) {
        for (x=0;x<4;x++) {
          cbuf[x]=0;
          for (b=0;b<8;b++)
            if (buf[(y<<5)+(x<<3)+b]&15)
              cbuf[x]|=128>>b;
        }
        for (x=0;x<2;x++) {
          cbuf[x+4]=0;
          for (b=0;b<8;b++)
            if (buf[((y+16)<<5)+(x<<3)+b]&15)
              cbuf[x+4]|=128>>b;
        }
        run(cbuf,widths[i],y==(heights[i]<<1)-1);
      }
    }
    if (i<80 || i>=95 || i==86) { /* Normal masks */
      fprintf(out,"Uint3 vga%smask[]={\n",gnames[i]);
      for (y=0;y<(heights[i]<<1);y++) {
        for (x=0;x<widths[i];x++) {
          cbuf[x]=0;
          for (b=0;b<8;b++)
            if (buf[(y<<5)+(x<<3)+b]&128)
              cbuf[x]|=128>>b;
        }
        run(cbuf,widths[i],y==(heights[i]<<1)-1);
      }
    }
  }

#endif

  fclose(in);

  fprintf(out,"Uint3 near *vgatable[]={\n"
"  vgazero480,   vgaediggermask,    /* 0 */\n"
"  vgardigger1,  vgardigger1mask,\n"
"  vgardigger2,  vgardigger2mask,\n"
"  vgardigger3,  vgardigger3mask,\n"
"  vgarxdigger1, vgarxdigger1mask,\n"
"  vgarxdigger2, vgarxdigger2mask,  /* 5 */\n"
"  vgarxdigger3, vgarxdigger3mask,\n"
"  vgaudigger1,  vgaudigger1mask,\n"
"  vgaudigger2,  vgaudigger2mask,\n"
"  vgaudigger3,  vgaudigger3mask,\n"
"  vgauxdigger1, vgauxdigger1mask,  /* 10 */\n"
"  vgauxdigger2, vgauxdigger2mask,\n"
"  vgauxdigger3, vgauxdigger3mask,\n"
"  vgaldigger1,  vgaldigger1mask,\n"
"  vgaldigger2,  vgaldigger2mask,\n"
"  vgaldigger3,  vgaldigger3mask,   /* 15 */\n"
"  vgalxdigger1, vgalxdigger1mask,\n"
"  vgalxdigger2, vgalxdigger2mask,\n"
"  vgalxdigger3, vgalxdigger3mask,\n"
"  vgaddigger1,  vgaddigger1mask,\n"
"  vgaddigger2,  vgaddigger2mask,   /* 20 */\n"
"  vgaddigger3,  vgaddigger3mask,\n"
"  vgadxdigger1, vgadxdigger1mask,\n"
"  vgadxdigger2, vgadxdigger2mask,\n"
"  vgadxdigger3, vgadxdigger3mask,\n"
"  vgadiggerd,   vgadiggerdmask,    /* 25 */\n"
"  vgagrave1,    vgagrave1mask,\n"
"  vgagrave2,    vgagrave2mask,\n"
"  vgagrave3,    vgagrave3mask,\n"
"  vgagrave4,    vgagrave4mask,\n"
"  vgagrave5,    vgagrave5mask,     /* 30 */\n"
"\n"
"  vgazero480,   vgaediggermask,\n"
"  vgarbigger1,  vgarbigger1mask,\n"
"  vgarbigger2,  vgarbigger2mask,\n"
"  vgarbigger3,  vgarbigger3mask,\n"
"  vgarxbigger1, vgarxbigger1mask,  /* 35 */\n"
"  vgarxbigger2, vgarxbigger2mask,\n"
"  vgarxbigger3, vgarxbigger3mask,\n"
"  vgaubigger1,  vgaubigger1mask,\n"
"  vgaubigger2,  vgaubigger2mask,\n"
"  vgaubigger3,  vgaubigger3mask,   /* 40 */\n"
"  vgauxbigger1, vgauxbigger1mask,\n"
"  vgauxbigger2, vgauxbigger2mask,\n"
"  vgauxbigger3, vgauxbigger3mask,\n"
"  vgalbigger1,  vgalbigger1mask,\n"
"  vgalbigger2,  vgalbigger2mask,   /* 45 */\n"
"  vgalbigger3,  vgalbigger3mask,\n"
"  vgalxbigger1, vgalxbigger1mask,\n"
"  vgalxbigger2, vgalxbigger2mask,\n"
"  vgalxbigger3, vgalxbigger3mask,\n"
"  vgadbigger1,  vgadbigger1mask,   /* 50 */\n"
"  vgadbigger2,  vgadbigger2mask,\n"
"  vgadbigger3,  vgadbigger3mask,\n"
"  vgadxbigger1, vgadxbigger1mask,\n"
"  vgadxbigger2, vgadxbigger2mask,\n"
"  vgadxbigger3, vgadxbigger3mask,  /* 55 */\n"
"  vgabiggerd,   vgabiggerdmask,\n"
"  vgagrave1,    vgagrave1mask,\n"
"  vgagrave2,    vgagrave2mask,\n"
"  vgagrave3,    vgagrave3mask,\n"
"  vgagrave4,    vgagrave4mask,     /* 60 */\n"
"  vgagrave5,    vgagrave5mask,\n"
"\n"
"  vgasbag,      vgasbagmask,\n"
"  vgarbag,      vgarbagmask,\n"
"  vgalbag,      vgalbagmask,\n"
"  vgafbag,      vgafbagmask,       /* 65 */\n"
"  vgagold1,     vgagold1mask,\n"
"  vgagold2,     vgagold2mask,\n"
"  vgagold3,     vgagold3mask,\n"
"\n"
"  vganobbin1,   vganobbin1mask,\n"
"  vganobbin2,   vganobbin2mask,    /* 70 */\n"
"  vganobbin3,   vganobbin3mask,\n"
"  vganobbind,   vganobbindmask,\n"
"  vgarhobbin1,  vgarhobbin1mask,\n"
"  vgarhobbin2,  vgarhobbin2mask,\n"
"  vgarhobbin3,  vgarhobbin3mask,   /* 75 */\n"
"  vgarhobbind,  vgarhobbindmask,\n"
"  vgalhobbin1,  vgalhobbin1mask,\n"
"  vgalhobbin2,  vgalhobbin2mask,\n"
"  vgalhobbin3,  vgalhobbin3mask,\n"
"  vgalhobbind,  vgalhobbindmask,   /* 80 */\n"
"\n"
"  vgabonus,     vgaediggermask,\n"
"\n"
"  vgafire1,     vgafire1mask,\n"
"  vgafire2,     vgafire2mask,\n"
"  vgafire3,     vgafire3mask,\n"
"  vgaexp1,      vgaexp1mask,       /* 85 */\n"
"  vgaexp2,      vgaexp2mask,\n"
"  vgaexp3,      vgaexp3mask,\n"
"\n"
"  vgafire1,     vgafire1mask,\n"
"  vgafire2,     vgafire2mask,\n"
"  vgafire3,     vgafire3mask,      /* 90 */\n"
"  vgaexp1,      vgaexp1mask,\n"
"  vgaexp2,      vgaexp2mask,\n"
"  vgaexp3,      vgaexp3mask,\n"
"\n"
"  vgaback1,     vgazero480,\n"
"  vgaback2,     vgazero480,        /* 95 */\n"
"  vgaback3,     vgazero480,\n"
"  vgaback4,     vgazero480,\n"
"  vgaback5,     vgazero480,\n"
"  vgaback6,     vgazero480,\n"
"  vgaback7,     vgazero480,        /* 100 */\n"
"  vgaback8,     vgazero480,\n"
"\n"
"  vgazero480,   vgarightblobmask,\n"
"  vgazero480,   vgatopblobmask,\n"
"  vgazero480,   vgaleftblobmask,\n"
"  vgazero480,   vgabottomblobmask, /* 105 */\n"
"  vgazero480,   vgasquareblobmask,\n"
"  vgazero480,   vgafurryblobmask,\n"
"\n"
"  vgaemerald,   vgaemeraldmask,\n"
"  vgazero480,   vgaemeraldmask,\n"
"\n"
"  vgaliferight, vgaliferightmask,  /* 110 */\n"
"  vgalifeleft,  vgalifeleftmask,\n"
"  vgazero480,   vgaelifemask,\n"
"  vgaleftlife,  vgaleftlifemask,\n"
"\n"
"  vgafire1b,    vgafire1bmask,\n"
"  vgafire2b,    vgafire2bmask,     /* 115 */\n"

⌨️ 快捷键说明

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