From b2ac412bea9d59a146ec6776758012a04da46dd9 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sat, 8 Jul 2017 01:19:06 -0400 Subject: [PATCH] tfv: start work on worldmap sprites --- gr-sim/Makefile | 2 +- gr-sim/backgrounds.h | 48 +++++++++++++++++ gr-sim/gr-sim.c | 20 +++++++ gr-sim/tfv.c | 115 +++++++++++++++++++--------------------- gr-sim/vince_sprites.h | 51 ++++++++++++++++++ gr-utils/png2rle.c | 24 +++++++-- tfv/Apple II Lowres.gpl | 32 +++++------ 7 files changed, 211 insertions(+), 81 deletions(-) create mode 100644 gr-sim/backgrounds.h create mode 100644 gr-sim/vince_sprites.h diff --git a/gr-sim/Makefile b/gr-sim/Makefile index 96135886..63d4a36f 100644 --- a/gr-sim/Makefile +++ b/gr-sim/Makefile @@ -31,7 +31,7 @@ text.o: text.c tfv: tfv.o gr-sim.o $(CC) $(LFLAGS) $(SDL_LIBS) -o tfv tfv.o gr-sim.o -tfv.o: tfv.c +tfv.o: tfv.c backgrounds.h vince_sprites.h $(CC) $(CFLAGS) -c tfv.c diff --git a/gr-sim/backgrounds.h b/gr-sim/backgrounds.h new file mode 100644 index 00000000..9b09979e --- /dev/null +++ b/gr-sim/backgrounds.h @@ -0,0 +1,48 @@ +static unsigned char title_rle[]= + { 0x28,0x28, + 0x01,0x00,0x19,0x20, + 0x0F,0x00,0x01,0x22,0x03,0x66,0x01,0x22,0x01,0x62,0x01,0x66,0x01,0x62,0x01,0x22,0x01,0x66,0x03,0x22,0x01,0x66,0x01,0x26,0x01,0x62,0x01,0x22,0x01,0x62,0x01,0x26,0x01,0x62,0x01,0x22,0x03,0x66,0x01,0x22,0x01,0x55,0x01,0x00,0x03,0x11,0x01,0x44,0x03,0x22,0x01,0x44,0x03,0x22, + 0x02,0x00,0x02,0x22,0x01,0x66,0x02,0x22,0x01,0x66,0x01,0x62,0x01,0x66,0x01,0x22,0x01,0x66,0x03,0x22,0x01,0x66,0x01,0x26,0x01,0x62,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x02,0x22,0x01,0x66,0x02,0x22,0x01,0x55,0x01,0x00,0x01,0x01,0x01,0x11,0x01,0x41,0x01,0x44,0x01,0x42,0x01,0x22,0x01,0x42,0x01,0x44,0x01,0x42,0x01,0x22,0x01,0x02, + 0x02,0x00,0x02,0x22,0x01,0x66,0x02,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x03,0x66,0x01,0x22,0x01,0x66,0x01,0x62,0x01,0x26,0x01,0x22,0x01,0x26,0x01,0x62,0x01,0x26,0x02,0x22,0x01,0x66,0x02,0x22,0x01,0x55,0x02,0x00,0x01,0x11,0x03,0x44,0x01,0x22,0x03,0x44,0x01,0x22, + 0x03,0x00,0x01,0x02,0x18,0x52,0x01,0x55, + 0x0E,0x00,0x1E,0x60, + 0x0A,0x00,0x01,0x66,0x03,0x22,0x01,0x66,0x01,0x26,0x01,0x22,0x01,0x26,0x01,0x66,0x01,0x22,0x01,0x26,0x01,0x66,0x01,0x22,0x01,0x66,0x03,0x22,0x01,0x66,0x01,0x26,0x01,0x22,0x01,0x26,0x01,0x66,0x01,0x26,0x02,0x62,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x55, + 0x09,0x00,0x01,0x66,0x01,0x22,0x01,0x26,0x02,0x66,0x01,0x22,0x01,0x26,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x62,0x01,0x26,0x01,0x22,0x02,0x66,0x01,0x22,0x02,0x66,0x01,0x22,0x01,0x26,0x01,0x22,0x01,0x66,0x01,0x22,0x02,0x26,0x01,0x66,0x01,0x62,0x01,0x26,0x01,0x62,0x01,0x66,0x01,0x55, + 0x09,0x00,0x01,0x66,0x01,0x22,0x03,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x01,0x62,0x01,0x22,0x02,0x66,0x01,0x22,0x02,0x66,0x01,0x22,0x01,0x66,0x01,0x22,0x01,0x66,0x02,0x26,0x01,0x22,0x02,0x66,0x01,0x22,0x02,0x66,0x01,0x55, + 0x09,0x00,0x01,0x06,0x1D,0x56,0x01,0x55,0x03,0x00,0x01,0x10, + 0x24,0x00,0x01,0x10,0x01,0x00,0x01,0x10,0x01,0x11,0x01,0x01, + 0x05,0x00,0x08,0xCC,0x01,0x40,0x09,0x00,0x01,0xD0,0x01,0x0D,0x01,0x00,0x01,0xD0,0x01,0x0D,0x01,0x00,0x01,0xD0,0x05,0x00,0x01,0x11, + 0x0A,0x00,0x01,0x04,0x04,0x54,0x02,0xCC,0x01,0x44,0x01,0x55,0x06,0x00,0x01,0xD0,0x01,0xDD,0x02,0xD0,0x01,0xDD,0x02,0xD0,0x01,0xDD,0x01,0xD0,0x03,0x00,0x02,0x01,0x01,0x11,0x02,0x01, + 0x0C,0x00,0x02,0xCC,0x01,0x44,0x01,0x54,0x01,0x55,0x06,0x00,0x01,0xDD,0x07,0xBB,0x01,0xDD,0x04,0x00,0x01,0x10,0x01,0x11,0x01,0x10, + 0x0C,0x00,0x02,0xCC,0x01,0x44,0x01,0x54,0x01,0x55,0x07,0x00,0x01,0xDD,0x01,0xBB,0x01,0xBF,0x01,0xB0,0x01,0xBB,0x01,0xBF,0x01,0xB0,0x01,0xBB,0x01,0xDD,0x03,0x00,0x01,0x10,0x03,0x11,0x01,0x10, + 0x0A,0x00,0x02,0xCC,0x01,0x44,0x01,0x54,0x01,0x55,0x08,0x00,0x01,0xDD,0x01,0xDB,0x01,0xBB,0x01,0x3B,0x01,0x33,0x02,0xBB,0x01,0xDB,0x01,0xDD,0x03,0x00,0x02,0x01,0x01,0x11,0x02,0x01, + 0x0A,0x00,0x02,0xCC,0x01,0x44,0x01,0x55,0x09,0x00,0x02,0xDD,0x05,0xBB,0x02,0xDD,0x05,0x00,0x01,0x11, + 0x0C,0x00,0x02,0xCC,0x01,0x44,0x01,0x55,0x09,0x00,0x01,0x0D,0x01,0x00,0x01,0xBB,0x03,0xB1,0x01,0xBB,0x01,0x00,0x01,0x0D,0x04,0x00,0x02,0xBB, + 0x0C,0x00,0x01,0x0C,0x01,0x4C,0x01,0x44,0x01,0x55,0x0C,0x00,0x02,0xBB,0x06,0x00,0x01,0x20,0x01,0x22,0x01,0x2B,0x01,0x0B, + 0x0E,0x00, 0x02,0x05, 0x09,0x00, 0x01,0x20, 0x06,0x22, 0x03,0x20, + 0x02,0x22, 0x01,0x02, 0x09,0x00, + 0xff,0xff +}; + +static unsigned char worldmap_rle[]= +{ 0x28,0x28, +0x55,0x66,0x03,0xF6,0x17,0x66,0x02,0xF6,0x02,0xFF,0x01,0xF6, +0x07,0x66,0x03,0xFF,0x01,0x5F,0x02,0xFF,0x01,0xF6,0x13,0x66,0x01,0xF6,0x07,0xFF, +0x07,0x66,0x01,0x65,0x04,0x5F,0x01,0x6F,0x13,0x66,0x01,0x65,0x01,0x55,0x01,0x5F,0x02,0xFF,0x02,0x65, +0x1C,0x66,0x01,0xF6,0x01,0xFF,0x01,0x56, +0x24,0x66,0x01,0x8F,0x02,0xFF,0x01,0x85,0x04,0x66,0x05,0xD6, +0x11,0x66,0x01,0xD6,0x06,0xE6,0x02,0x46,0x01,0x96,0x02,0x88,0x01,0x48,0x01,0x58,0x01,0x88,0x01,0x86,0x02,0x66,0x05,0xD9, +0x05,0x66,0x07,0x46,0x04,0x44,0x01,0xD4,0x01,0xED,0x05,0xEE,0x02,0x44,0x01,0x84,0x01,0x98,0x03,0x88,0x01,0x48,0x01,0x88,0x01,0xA8,0x01,0x84,0x01,0x44,0x01,0x49,0x03,0xF9,0x01,0x49,0x04,0x46, +0x0B,0x44,0x01,0xD4,0x01,0xED,0x04,0xEE,0x01,0x4E,0x02,0x44,0x01,0x84,0x01,0x89,0x02,0x88,0x01,0x89,0x04,0x88,0x01,0x85,0x01,0x88,0x01,0x44,0x01,0x4F,0x01,0x40,0x01,0x4F,0x01,0x88, +0x0E,0x44,0x01,0xDD,0x01,0xED,0x05,0xEE,0x01,0x88,0x01,0x44,0x01,0x84,0x01,0x89,0x01,0x98,0x01,0x88,0x01,0x98,0x01,0x88,0x01,0x84,0x03,0x88,0x01,0x85,0x01,0x88,0x01,0xA8,0x02,0x44,0x01,0x94,0x01,0x88,0x01,0x58,0x01,0x84, +0x0B,0x44,0x01,0xDD,0x08,0xEE,0x01,0x88,0x02,0x84,0x04,0xE8,0x01,0x48,0x08,0x88,0x01,0x98,0x03,0x88, +0x0A,0x44,0x01,0xDD,0x11,0xEE,0x01,0xE4,0x04,0x44,0x02,0x48,0x01,0x89,0x03,0x88,0x01,0x85,0x01,0x88, +0x09,0x44,0x01,0xDD,0x12,0xEE,0x07,0x44,0x02,0x48,0x01,0x88,0x01,0x85,0x02,0x48, +0x09,0x44,0x01,0xDD,0x0C,0xEE,0x02,0xDE,0x02,0x4D,0x0C,0x44,0x02,0xC4, +0x0A,0x44,0x02,0x4E,0x08,0xEE,0x01,0xDE,0x02,0x4D,0x0C,0x44,0x01,0xC4,0x02,0xCC,0x01,0xC4,0x01,0xCC, +0x21,0x44,0x01,0xC4,0x02,0xCC,0x01,0xC4,0x03,0xCC, +0x1F,0x44,0x01,0xC4,0x01,0xCC,0x01,0xC4,0x01,0xCC,0x01,0x4C,0x02,0xCC,0x01,0x4C,0x01,0xCC, +0x1E,0x44,0x02,0xCC,0x01,0x4C,0x04,0xCC,0x01,0xC4,0x02,0xCC, +0x1D,0x44,0x01,0xCC,0x01,0x4C,0x02,0xCC,0x01,0xC4,0x01,0x4C,0x01,0xCC,0x01,0xC4,0x02,0xCC,0x01,0xC4, +0xff,0xff, +}; diff --git a/gr-sim/gr-sim.c b/gr-sim/gr-sim.c index e3cfa2f5..8555782d 100644 --- a/gr-sim/gr-sim.c +++ b/gr-sim/gr-sim.c @@ -812,6 +812,26 @@ int grsim_put_sprite(unsigned char *sprite_data, int xpos, int ypos) { int gr_copy(short source, short dest) { + short dest_addr,source_addr; + int i,j,l; + + for(i=0;i<8;i++) { + source_addr=gr_addr_lookup[i]+0x400; + dest_addr=gr_addr_lookup[i]; + + if (i<4) l=120; + else l=80; + + for(j=0;j10) yy-=2; + if ((ch=='m') || (ch==APPLE_DOWN)) if (yy<39) yy+=2; + if ((ch=='j') || (ch==APPLE_LEFT)) { + if (direction>0) direction=-1; + else { + xx--; + if (xx<0) xx=0; + } + } + if ((ch=='k') || (ch==APPLE_RIGHT)) { + if (direction<0) direction=1; + else { + xx++; + if (xx>35) xx=35; + } + } + + gr_copy(0x800,0x400); + + if (direction==-1) grsim_put_sprite(vince_left,xx,yy); + if (direction==1) grsim_put_sprite(vince_right,xx,yy); + + grsim_update(); + + usleep(10000); + } + return 0; } diff --git a/gr-sim/vince_sprites.h b/gr-sim/vince_sprites.h new file mode 100644 index 00000000..0b77b2d7 --- /dev/null +++ b/gr-sim/vince_sprites.h @@ -0,0 +1,51 @@ +static unsigned char vince_right[]={ + 0x4,0x6, + 0x00,0xDD,0xBD,0x00, + 0x00,0xDD,0xDB,0x0B, + 0x00,0x22,0x00,0x00, + 0x00,0x22,0x02,0x0B, + 0x00,0x22,0x00,0x00, + 0x00,0x82,0x80,0x00, +}; + +static unsigned char vince_left[]={ + 0x4,0x6, + 0x00,0xBD,0xDD,0x00, + 0x0B,0xDB,0xDD,0x00, + 0x00,0x00,0x22,0x00, + 0x0B,0x02,0x22,0x00, + 0x00,0x00,0x22,0x00, + 0x00,0x80,0x82,0x00, +}; + +#if 0 +static unsigned char test_sprite[]={ + 0x8,0x4, + 0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00, + 0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00, + 0xff,0x1f,0x4f,0x2f,0xff,0x22,0x20,0x00, + 0x5f,0x5f,0x5f,0x5f,0xff,0xf2,0xf2,0xf2, +}; +#endif + +static unsigned char ship_forward[]={ + 0x5,0x3, + 0x00,0x00,0x77,0x00,0x00, + 0x50,0x55,0x77,0x55,0x50, + 0x01,0x00,0x07,0x00,0x01, +}; + +static unsigned char ship_right[]={ + 0x5,0x3, + 0x50,0x00,0x70,0x77,0x00, + 0x01,0x55,0x77,0x55,0x50, + 0x00,0x77,0x07,0x00,0x15, +}; + +static unsigned char ship_left[]={ + 0x5,0x3, + 0x00,0x77,0x70,0x00,0x50, + 0x50,0x55,0x77,0x55,0x01, + 0x15,0x00,0x07,0x77,0x00, +}; + diff --git a/gr-utils/png2rle.c b/gr-utils/png2rle.c index 18f88335..37234eec 100644 --- a/gr-utils/png2rle.c +++ b/gr-utils/png2rle.c @@ -19,6 +19,7 @@ int main(int argc, char **argv) { unsigned char *image; int xsize,ysize,last=-1,next; FILE *outfile; + int size=0; if (argc<3) { fprintf(stderr,"Usage:\t%s INFILE OUTFILE\n\n",argv[0]); @@ -41,6 +42,8 @@ int main(int argc, char **argv) { x=0; enough=0; fprintf(outfile,"{ 0x%X,0x%x,\n",xsize,ysize); + size+=2; + last=image[x] | (image[x+xsize]<<4); run++; x++; @@ -49,14 +52,14 @@ int main(int argc, char **argv) { if (next!=last) { fprintf(outfile,"0x%02X,0x%02X,",run,last); + size+=2; run=0; last=next; } - run++; - - x++; + + enough++; if (enough>=xsize) { enough=0; @@ -65,15 +68,26 @@ int main(int argc, char **argv) { } - if (x>xsize*ysize) { + if (x>=xsize*ysize) { /* print tailing value */ - fprintf(outfile,"0x%02X,0x%02X,",run,last); + if (run!=0) { + fprintf(outfile,"0x%02X,0x%02X,",run,last); + size+=2; + } break; } + + run++; + + } + fprintf(outfile,"0xff,0xff,"); + size+=2; fprintf(outfile,"};\n"); fclose(outfile); + printf("Size %d bytes\n",size); + return 0; } diff --git a/tfv/Apple II Lowres.gpl b/tfv/Apple II Lowres.gpl index ba091f41..bbec9453 100644 --- a/tfv/Apple II Lowres.gpl +++ b/tfv/Apple II Lowres.gpl @@ -2,20 +2,20 @@ GIMP Palette Name: Apple II Lowres Columns: 0 # - 0 0 0 Untitled -227 30 96 Untitled - 96 78 189 Untitled -255 68 253 Untitled - 0 163 96 Untitled -156 156 156 Untitled - 20 207 253 Untitled -208 195 255 Untitled - 96 114 3 Untitled -255 106 60 Untitled -157 157 157 Untitled -255 160 208 Untitled - 20 245 60 Untitled -208 221 141 Untitled -114 255 208 Untitled -255 255 255 Untitled + 0 0 0 Black.0 +227 30 96 Red.1 + 96 78 189 DarkBlue.2 +255 68 253 Purple.3 + 0 163 96 DarkGreen.4 +156 156 156 Grey.5 + 20 207 253 MediumBlue.6 +208 195 255 LightBlue.7 + 96 114 3 Brown.8 +255 106 60 Orange.9 +157 157 157 Gray.A +255 160 208 Pink.B + 20 245 60 LightGreen.C +208 221 141 Yellow.D +114 255 208 Aqua.E +255 255 255 White.F