From f239e7d2c6245399040e68b59eba2ecd572b255b Mon Sep 17 00:00:00 2001 From: Florian Schulze Date: Mon, 5 Aug 2002 10:59:54 +0000 Subject: [PATCH] Finished gobpack and included it into the build process. Removed gobs. --- Makefile | 5 +- VisualC6/jumpnbump.dsp | 36 ++- VisualC6/jumpnbump.dsw | 3 + data/.cvsignore | 1 + data/Makefile | 14 +- data/font.gob | Bin 6293 -> 0 bytes data/font.pcx | Bin 0 -> 12019 bytes data/font.txt | 650 +++++++++++++++++++++++++++++++++++++++++ data/level.pcx | Bin 36203 -> 36203 bytes data/mask.pcx | Bin 5530 -> 5530 bytes data/menu.pcx | Bin 37443 -> 37443 bytes data/menumask.pcx | Bin 4608 -> 4608 bytes data/numbers.gob | Bin 3642 -> 0 bytes data/numbers.pcx | Bin 0 -> 7036 bytes data/numbers.txt | 82 ++++++ data/objects.gob | Bin 5454 -> 0 bytes data/objects.pcx | Bin 0 -> 7243 bytes data/objects.txt | 642 ++++++++++++++++++++++++++++++++++++++++ data/pack.bat | 6 +- data/rabbit.gob | Bin 16690 -> 0 bytes data/rabbit.pcx | Bin 0 -> 19583 bytes data/rabbit.txt | 578 ++++++++++++++++++++++++++++++++++++ gob.txt | 52 ++++ modify/gobpack.c | 283 +++++++++++++++--- 24 files changed, 2312 insertions(+), 40 deletions(-) delete mode 100644 data/font.gob create mode 100644 data/font.pcx create mode 100644 data/font.txt delete mode 100644 data/numbers.gob create mode 100644 data/numbers.pcx create mode 100644 data/numbers.txt delete mode 100644 data/objects.gob create mode 100644 data/objects.pcx create mode 100644 data/objects.txt delete mode 100644 data/rabbit.gob create mode 100644 data/rabbit.pcx create mode 100644 data/rabbit.txt create mode 100644 gob.txt diff --git a/Makefile b/Makefile index 41bca04..886e2fe 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ LIBS = -lm $(shell sdl-config --libs) -lSDL_mixer .PHONY: data -all: $(TARGET) jnbpack jnbunpack data +all: $(TARGET) jnbpack jnbunpack gobpack data $(TARGET): $(OBJS) $(CC) $(LFLAGS) -o $(TARGET) $(OBJS) $(LIBS) @@ -18,6 +18,9 @@ jnbpack: modify/jnbpack.o jnbunpack: modify/jnbunpack.o $(CC) $(LFLAGS) -o jnbunpack modify/jnbunpack.o $(LIBS) +gobpack: modify/gobpack.o + $(CC) $(LFLAGS) -o gobpack modify/gobpack.o $(LIBS) + data: jnbpack $(MAKE) -C data diff --git a/VisualC6/jumpnbump.dsp b/VisualC6/jumpnbump.dsp index 4fc4734..407ac4f 100644 --- a/VisualC6/jumpnbump.dsp +++ b/VisualC6/jumpnbump.dsp @@ -60,9 +60,23 @@ ProjDir=. InputPath=.\Release\jumpnbump.exe SOURCE="$(InputPath)" -"$(ProjDir)\..\data\jumpbump.dat" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - call "$(ProjDir)\..\data\pack.bat" "$(ProjDir)\..\data" "..\VisualC6\pack\Release\jnbpack.exe" +BuildCmds= \ + call "$(ProjDir)\..\data\pack.bat" "$(ProjDir)\..\data" "..\VisualC6\gobpack\Release\gobpack.exe" "..\VisualC6\pack\Release\jnbpack.exe" + +"$(ProjDir)\..\data\font.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(ProjDir)\..\data\rabbit.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +"$(ProjDir)\..\data\numbers.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(ProjDir)\..\data\objects.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(ProjDir)\..\data\jumpbump.dat" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) # End Custom Build !ELSEIF "$(CFG)" == "jumpnbump - Win32 Debug" @@ -95,9 +109,23 @@ ProjDir=. InputPath=.\Debug\jumpnbump.exe SOURCE="$(InputPath)" -"$(ProjDir)\..\data\jumpbump.dat" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - call "$(ProjDir)\..\data\pack.bat" "$(ProjDir)\..\data" "..\VisualC6\pack\Debug\jnbpack.exe" +BuildCmds= \ + call "$(ProjDir)\..\data\pack.bat" "$(ProjDir)\..\data" "..\VisualC6\gobpack\Debug\gobpack.exe" "..\VisualC6\pack\Debug\jnbpack.exe" + +"$(ProjDir)\..\data\font.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(ProjDir)\..\data\rabbit.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +"$(ProjDir)\..\data\numbers.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(ProjDir)\..\data\objects.gob" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"$(ProjDir)\..\data\jumpbump.dat" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) # End Custom Build !ENDIF diff --git a/VisualC6/jumpnbump.dsw b/VisualC6/jumpnbump.dsw index 64ab918..71c28fc 100644 --- a/VisualC6/jumpnbump.dsw +++ b/VisualC6/jumpnbump.dsw @@ -26,6 +26,9 @@ Package=<4> Begin Project Dependency Project_Dep_Name pack End Project Dependency + Begin Project Dependency + Project_Dep_Name gobpack + End Project Dependency }}} ############################################################################### diff --git a/data/.cvsignore b/data/.cvsignore index 40b815f..8ca1b48 100644 --- a/data/.cvsignore +++ b/data/.cvsignore @@ -1 +1,2 @@ jumpbump.dat +*.gob diff --git a/data/Makefile b/data/Makefile index 51e2f8a..c7645d3 100644 --- a/data/Makefile +++ b/data/Makefile @@ -1,7 +1,19 @@ all: jumpbump.dat +font.gob: + ../gobpack font + +rabbit.gob: + ../gobpack rabbit + +numbers.gob: + ../gobpack numbers + +objects.gob: + ../gobpack objects + jumpbump.dat: bump.mod calib.dat death.smp fly.smp font.gob jump.mod jump.smp levelmap.txt level.pcx mask.pcx menu.pcx menumask.pcx numbers.gob objects.gob rabbit.gob scores.mod splash.smp spring.smp ../jnbpack -o jumpbump.dat bump.mod calib.dat death.smp fly.smp font.gob jump.mod jump.smp levelmap.txt level.pcx mask.pcx menu.pcx menumask.pcx numbers.gob objects.gob rabbit.gob scores.mod splash.smp spring.smp clean: - rm -f jumpbump.dat + rm -f jumpbump.dat font.gob rabbit.gob numbers.gob objects.gob diff --git a/data/font.gob b/data/font.gob deleted file mode 100644 index ec41321d54bba92bd89101cdb1a332252d12224c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6293 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 diff --git a/data/menumask.pcx b/data/menumask.pcx index e9ad0ed18333fe1f0d96046340bec5d2d288322b..6c47bb0888bc48f0a9c79c32afad35e813326263 100644 GIT binary patch delta 40 tcmZorX;2a1VrArD0D^wT{|qO9aPma~gNY6-jEoZl^(Q9qY;0%{1OUNr3flkx delta 37 rcmZorX;2a1VrArD0D^wT{|pX{Cm1I28%%UynHZ=)F@bkuLxUgymTU=t diff --git a/data/numbers.gob b/data/numbers.gob deleted file mode 100644 index 9d91905dc5ab1f707b5e27d2deef82f020cc9073..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3642 zcmb`JvCh;$41^a10{u`>B$1*k(o<6LJd`{RC67eO<4`f*jGg4}bSELPLjT5Vuk9Io zeY}j%V~iiK#`yDkjBjto`1N*-FYm_q`F@PoFJpZFFvjnXV|*HmEXP>y)-=!jo7T$( z-IO)YOAe-4yHv}vTrQjR+Uj7JH?7Nj=w%i|+qdKBSNvgsqpMwt$k}HMY`6HlFHA}d zyOJ^6PV%HYES7#!-Z%0Zph;NzMd&Bpb7I;#kpymTE+}eA?oW0H27RyfG0*Et82t7k z^s**7;y83Aiwy^b6;bh;GsIOlujQsBTK@ij{V5;&PmMYvWS;;4=#T+#F3Z|Po7}g`w%@ptI!iVd8N2K)uS$zB zu2p4P;z5PA)u(N|Go$zCuCgE6#A4jG*plG*0i6TY1K^&_tDS>WFbaRD-+0IQG-$c; z-hU(?Ec5l4XFr;Q=X5W@AwtdDJVT_2FpmzS6d{Ih$6|5-2SJyPuPcI%=ALw1;ppy>D8R;Jg-$I3ibuvIk5_-~@Zj0`ctVmufL-(I ze4Gw{3g^MJygufcijv0anWQ~@?)%aMvGx#PJLlPaO@-5&_+sKKFI^8m)8rj`oNmcn z+rCm~>GOW*!Nt77J1SvTT0kSwU?&~R1-avPp*wDF?6j6BcXhq>q*?Acsw%YkdSmV! zPUao;3D5SLhSukzFV(y%N|?VlExwRMC=C*YJ$J;VV&iqdF<56N`TgjDtC%@GxLlcC7VhNkuV@>oak%o1 z6I@+t#VqS8^_Az+aR!BFkwi}NZDJrisqaSw40kMc(3kwUpItxx#1e#FY9CIjeR)qx zH*A?&ozOW>l0fwz=uNroq(^?1EyGmMD`@a94B7r z(4(t+nW&!kMjiU(tw;&melG@wKhKTpeh&Jy7W64_5=gq|elB)FpY`;2a3?xrV<%bx zosS<>eum8x`DroPkPS~^#It4d6(B7qpHx6r8N1!z6woPzCkFzUA3Qi~`8otvxv95mstnpua diff --git a/data/numbers.pcx b/data/numbers.pcx new file mode 100644 index 0000000000000000000000000000000000000000..d080bac3e438458299cc14d7719d028c307ae43e GIT binary patch literal 7036 zcmeHMEo>uK5FUdnRZ}S-yK6lySP&3k5MYo>0S62M3IYrc1Q-|`FgS3)ARyp?!2wqa zFbD`ZU=UCcaKPZC{juZt+EhBJ1_n`eARypCK;ZWK=DoG!YjwSAL5Y1o-nVbwH{Z;B zGrN+%`=<1*;L|PTA|)y1U-^;JPo)w8{^jR46U#sU%Y}dbkl1*!kH4{J;xNI{)cA?# z2SZ#AO^PcM#<-4+KbkKR;nJes(LwTwM~ z2%vyW;nefT;5Vn^`6dlb5&%ctz-@waq+}3NV3N>yyhERM&E)Bg7$iZDtoQ{B@J#|U z;x$r7@>vKYZh0B8a6knPmN2qp0$eli+=)H+vSgRf~!wy#Na8JG}#X>|7A-A0zaQqRE#3ULN zqG9kEn}9mBaK7eb!39MPI4>YrHWCGb(ZCum7-2VH|0ha_%@TqiV_NWWArglnKH_s} z)33K7cg7BFFf=G9jDEm;@SqcRJNp>`s2plG#)6cPoq|0}8V4yDXn|2bOcotX%T&OD zqXSmUR7Q>pL`_YFDd&fUvOAm%E>7(}ode1SL1Ug^R~vgoPV9SxK>>}J4BBzz;5Jw; zXNMYcs#!`7^5k%oQHDW6HDaNI6GcO!otq@Wa3Bz~!|rE@TxGb3IcQjK&L^Etn$sAQ zfy#-ON`?IV9T~I`GOaKmfL25Q0?cJGB@npr5s~Ora7@_fA;Pd!6ao8W5~Hw56war4 zG_><&F{T-TRktEjHXz3?X90brl46eK5@hUI?xeU|6b>?_<}@d^v)!5!Eshh5n*e2D z7+e|?TrYi>Xa-U5K*i($C1AQje-?*m1^ZZcdMEz_bj zIEW5$z|0t;p%10PYnxA86<*QTb8|4Vc*+QmN{*aj2q`q~6gN1#SsqKv`L(hiV+;C! zL<=piFEW~GMMcYTCTmi39uPrW0mF>r!OE7D=%p|O3Y4VE;TsC(kZow!8aB%q5%Udl zQGi9U@T#KkO|C`puA&%p0r;WwjIl7{{D3cu!H1KWOTI=ZPbI0>n2=;k=jdIcv8gR} zoGLsc?!b(B7;$qJSVTBKBBRU!@5q* zgvJ?eGdsm0YgQoIZ~Oo6`chonS*=!?$YrI1l?qlWC^WFj#3~caz-lTMI#^|5m5Eh9 z6dG7%;{VLV_xh8;y2z$TD6%C|5vhvoiPS`X6se0GiZn%9A}>Ua@YBTI-Q8?9n@lEy z!Jyyo_j2U1u1k<^~a?o+AMB&y2h zmaG$A^4m8L)85CVeS6Wkd0m_KD%USJ2d(vfeeLAQ+VPIGB6+$gyXz9Jsr~)z;pXiA z{j-nP)w_{QFC^*7&&P7wl1^P-)Z}niYTHr?rHrhIthc9?&g{#7km*(#^4EMMA4vWZ zPe_@F^fcEf01;-h{PZ+GJbYWL9akz(Ha8h>p1*$oaBzMvosa9sgN;^awTbtKqfwO9%8t-xafAftyXJ)e}8KW zDw6zudh_R>xs3bM^H*=W?OwZi)HpcY U-`m^Sj>;PEi?h$T{_k6V0;YkpY5)KL literal 0 HcmV?d00001 diff --git a/data/numbers.txt b/data/numbers.txt new file mode 100644 index 0000000..3055319 --- /dev/null +++ b/data/numbers.txt @@ -0,0 +1,82 @@ +num_images: 10 + +image: 1 +x: 0 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 2 +x: 18 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 3 +x: 36 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 4 +x: 54 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 5 +x: 72 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 6 +x: 90 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 7 +x: 108 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 8 +x: 126 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 9 +x: 144 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + +image: 10 +x: 162 +y: 0 +width: 16 +height: 22 +hotspot_x: 0 +hotspot_y: 0 + diff --git a/data/objects.gob b/data/objects.gob deleted file mode 100644 index a3e0d5f51b33d986b8c8e96aee5ebc7517720a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5454 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 2; + } + } +} static void write_pcx(FILE *pcxfile, unsigned char *data, int width, int height, unsigned char *palette) { @@ -105,6 +128,43 @@ int read_gob(FILE *handle, gob_t *gob, int len) return 0; } +int write_gob(FILE *handle, gob_t *gob) +{ + int i; + int offset; + + fputc((gob->num_images >> 0) & 0xff, handle); + fputc((gob->num_images >> 8) & 0xff, handle); + + offset = 2 + (gob->num_images * 4); + + for (i=0; inum_images; i++) { + fputc((offset >> 0) & 0xff, handle); + fputc((offset >> 8) & 0xff, handle); + fputc((offset >> 16) & 0xff, handle); + fputc((offset >> 24) & 0xff, handle); + + offset += 8; + offset += gob->width[i] * gob->height[i]; + } + for (i=0; inum_images; i++) { + fputc((gob->width[i] >> 0) & 0xff, handle); + fputc((gob->width[i] >> 8) & 0xff, handle); + + fputc((gob->height[i] >> 0) & 0xff, handle); + fputc((gob->height[i] >> 8) & 0xff, handle); + + fputc((gob->hs_x[i] >> 0) & 0xff, handle); + fputc((gob->hs_x[i] >> 8) & 0xff, handle); + + fputc((gob->hs_y[i] >> 0) & 0xff, handle); + fputc((gob->hs_y[i] >> 8) & 0xff, handle); + + fwrite(gob->data[i], 1, gob->width[i] * gob->height[i], handle); + } + return 0; +} + int main(int argc, char **argv) { int usage = 0; @@ -112,29 +172,59 @@ int main(int argc, char **argv) FILE *f; int len; gob_t gob; + char *filename = NULL; - if (argc < 4) { + if (argc < 2) { usage = 1; - } else if (argc == 5) { - unpack = 1; - if ((argv[1][0] != '-') || (argv[1][1] != 'u')) + } + if (argv[1][0] == '-') { + if (argv[1][1] == 'u') { + if (argc < 3) + usage = 1; + unpack = 1; + } else usage = 1; } if (usage) { - printf("Usage: gobpack [-u] \n\t-u to unpack the gob\n"); + printf("Usage: gobpack [-u] [palette.pcx] <\n\t-u to unpack the gob\n"); return 1; } if (unpack) { int width, height; + int x_count, y_count; + int xi, yi; int i; unsigned char *data; unsigned char *dst; + unsigned char palette[768]; + unsigned char *pal = NULL; + + if (argc > 3) { + f = fopen(argv[3], "rb"); + if (f) { + fseek(f, -769, SEEK_END); + i = fgetc(f); + if (i == 0x0c) { + pal = palette; + fread(pal, 1, 768, f); + } + fclose(f); + } + } - f = fopen(argv[2], "rb"); + filename = malloc(strlen(argv[2]) + 5); + if (!filename) { + printf("Not enough memory!\n"); + return -1; + } + + strcpy(filename, argv[2]); + strcat(filename, ".gob"); + f = fopen(filename, "rb"); if (!f) { - printf("Couldn't open file %s\n", argv[2]); + printf("Couldn't open file %s\n", filename); return -1; } fseek(f, 0, SEEK_END); @@ -148,55 +238,182 @@ int main(int argc, char **argv) width = 0; height = 0; for (i = 0; i < gob.num_images; i++) { - height += gob.height[i]; + if (gob.height[i] > height) + height = gob.height[i]; if (gob.width[i] > width) width = gob.width[i]; } + width+=2; + height+=2; - data = malloc(width*height); - memset(data, 0, width*height); - dst = data; + data = malloc(400*256); + if (!data) { + printf("Not enough memory!\n"); + return -1; + } + memset(data, 0, 400*256); - for (i = 0; i < gob.num_images; i++) { - int x,y; - unsigned char *src; + x_count = 400 / width; + y_count = 256 / width; + + for (yi = 0; yi < y_count; yi++) { + for (xi = 0; xi < x_count; xi++) { + int x,y; + unsigned char *src; - src = gob.data[i]; - for (y = 0; y < gob.height[i]; y++) { - for (x = 0; x < gob.width[i]; x++) { - dst[y * width + x] = src[y * gob.width[i] + x]; + i = yi * x_count + xi; + if (i >= gob.num_images) + continue; + + src = gob.data[i]; + dst = &data[(yi * height) * 400 + (xi * width)]; + for (y = 0; y < gob.height[i]; y++) { + for (x = 0; x < gob.width[i]; x++) { + dst[y * 400 + x] = src[y * gob.width[i] + x]; + } } } - dst += gob.height[i] * width; } - f = fopen(argv[3], "wb"); + strcpy(filename, argv[2]); + strcat(filename, ".pcx"); + f = fopen(filename, "wb"); if (!f) { - printf("Couldn't open file %s\n", argv[3]); + printf("Couldn't open file %s\n", filename); return -1; } - write_pcx(f, data, width, height, NULL); + write_pcx(f, data, 400, 256, pal); fclose(f); - f = fopen(argv[4], "w"); + strcpy(filename, argv[2]); + strcat(filename, ".txt"); + f = fopen(filename, "w"); if (!f) { - printf("Couldn't open file %s\n", argv[4]); + printf("Couldn't open file %s\n", filename); return -1; } fprintf(f, "num_images: %i\n\n", gob.num_images); - for (i = 0; i < gob.num_images; i++) { - fprintf(f, "width: %i\n", gob.width[i]); - fprintf(f, "height: %i\n", gob.height[i]); - fprintf(f, "hotspot_x: %i\n", -gob.hs_x[i]); - fprintf(f, "hotspot_y: %i\n", -gob.hs_y[i]); - fprintf(f, "\n"); + for (yi = 0; yi < y_count; yi++) { + for (xi = 0; xi < x_count; xi++) { + + i = yi * x_count + xi; + if (i >= gob.num_images) + continue; + + fprintf(f, "image: %i\n", i + 1); + fprintf(f, "x: %i\n", (xi * width)); + fprintf(f, "y: %i\n", (yi * height)); + fprintf(f, "width: %i\n", gob.width[i]); + fprintf(f, "height: %i\n", gob.height[i]); + fprintf(f, "hotspot_x: %i\n", gob.hs_x[i]); + fprintf(f, "hotspot_y: %i\n", gob.hs_y[i]); + fprintf(f, "\n"); + } } fclose(f); } else { + unsigned char *data; + int i; + int x_pos, y_pos; + + data = malloc(400*256); + if (!data) { + printf("Not enough memory!\n"); + return -1; + } + + filename = malloc(strlen(argv[1]) + 5); + if (!filename) { + printf("Not enough memory!\n"); + return -1; + } + + strcpy(filename, argv[1]); + strcat(filename, ".pcx"); + f = fopen(filename, "rb"); + if (!f) { + printf("Couldn't open file %s\n", filename); + return -1; + } + + read_pcx(f, data, 400*256, NULL); + + fclose(f); + + strcpy(filename, argv[1]); + strcat(filename, ".txt"); + f = fopen(filename, "r"); + if (!f) { + printf("Couldn't open file %s\n", filename); + return -1; + } + + gob.num_images = 0; + + while (!feof(f)) { + char buffer[1024]; + int value; + + fscanf(f, "%s %i\n", &buffer, &value); + if (strcmp(buffer, "num_images:") == 0) { + if (gob.num_images != 0) { + printf("Parse error in %s\n", filename); + return -1; + } + gob.num_images = value; + gob.width = malloc(gob.num_images*sizeof(int)); + gob.height = malloc(gob.num_images*sizeof(int)); + gob.hs_x = malloc(gob.num_images*sizeof(int)); + gob.hs_y = malloc(gob.num_images*sizeof(int)); + gob.data = malloc(gob.num_images*sizeof(void *)); + gob.orig_data = malloc(gob.num_images*sizeof(void *)); + } else if (strcmp(buffer, "image:") == 0) { + i = value - 1; + } else if (strcmp(buffer, "x:") == 0) { + x_pos = value; + } else if (strcmp(buffer, "y:") == 0) { + y_pos = value; + } else if (strcmp(buffer, "width:") == 0) { + gob.width[i] = value; + } else if (strcmp(buffer, "height:") == 0) { + gob.height[i] = value; + } else if (strcmp(buffer, "hotspot_x:") == 0) { + gob.hs_x[i] = value; + } else if (strcmp(buffer, "hotspot_y:") == 0) { + int x, y; + unsigned char *dst; + + gob.hs_y[i] = value; + gob.orig_data[i] = malloc(gob.width[i] * gob.height[i]); + gob.data[i] = gob.orig_data[i]; + dst = gob.data[i]; + for (y = 0; y < gob.height[i]; y++) { + for (x = 0; x < gob.width[i]; x++) { + dst[y * gob.width[i] + x] = data[(y_pos + y) * 400 + (x_pos + x)]; + } + } + } + } + + fclose(f); + + strcpy(filename, argv[1]); + strcat(filename, ".gob"); + f = fopen(filename, "wb"); + if (!f) { + printf("Couldn't open file %s\n", filename); + return -1; + } + + write_gob(f, &gob); + + fclose(f); + + printf("%s build\n", filename); } return 0; -- 2.39.2