working tile fading test

This commit is contained in:
alpine9000 2016-04-25 14:35:21 +10:00
parent 1deae4565b
commit a0de566ab8
7 changed files with 63 additions and 128 deletions

View File

@ -128,7 +128,7 @@ out/panelFade.s: assets/panel.pal ../tools/fade/out/fade
../tools/fade/out/fade --from-grey --to=assets/panel.pal --output=panel > out/panelFade.s
out/tileFade.s: assets/tileFadeFrom.pal assets/tileFadeTo.pal ../tools/fade/out/fade
../tools/fade/out/fade --colors=2 --from=assets/tileFadeFrom.pal --to=assets/tileFadeTo.pal --output=tileFade > out/tileFade.s
../tools/fade/out/fade --steps=48 --colors=2 --from=assets/tileFadeFrom.pal --to=assets/tileFadeTo.pal --output=tileFade > out/tileFade.s
out/foreground-map.s: foreground.tmx
../tools/mapgen/out/mapgen --depth=3 --input=foreground.tmx

View File

@ -1,2 +1,2 @@
082 000 015 255
133 000 026 255
16 132 233 255
16 132 233 255

View File

@ -1,105 +0,0 @@
#include <stdio.h>
#include <getopt.h>
typedef struct {
unsigned char r, g, b, a;
} rgba_t;
typedef struct {
int verbose;
int numColors;
char** argv;
} config_t;
config_t config = {
.numColors = 16
};
#define MAX_COLORS 32
rgba_t original[MAX_COLORS];
rgba_t gray[MAX_COLORS];
rgba_t progress[MAX_COLORS];
int
main(int argc, char** argv)
{
config.argv = argv;
while (1) {
static struct option long_options[] = {
{"verbose", no_argument, &config.verbose, 1},
{"colors", required_argument, 0, 'c'},
{0, 0, 0, 0}
};
int option_index = 0;
c = getopt_long (argc, argv, "n:", long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 0:
break;
case 'c':
if (sscanf(optarg, "%d", &config.numColors) != 1) {
abort_("invalid width");
}
break;
case '?':
usage();
break;
default:
usage();
break;
}
}
FILE* fp = fopen(argv[1], "r");
rgba_t* p = original;
while (fscanf(fp, "%d %d %d %d", &p->r, &p->g, &p->b, &p->a) == 4) {
p++;
}
rgba_t* g = gray;
p = original;
for (int i = 0; i < config.numColors; i++) {
g->r = g->g = g->b = (p->r + p->g + p->b) / 3;
// printf("%d %d %d\n", g->r, g->g, g->b);
g++;
p++;
}
for (int s = 1; s <= 16; s++) {
printf(".step%d\n", s);
for (int i = 0; i < config.numColors; i++) {
int dr = ((((float)original[i].r)-(float)gray[i].r)/16.0)*s;
int dg = ((((float)original[i].g)-(float)gray[i].g)/16.0)*s;
int db = ((((float)original[i].b)-(float)gray[i].b)/16.0)*s;
#if 0
printf("r:%d %d %d -> %d\n"
"g:%d %d %d -> %d\n"
"b:%d %d %d -> %d\n",
original[i].r,gray[i].r, dr, gray[i].r+dr,
original[i].g,gray[i].g, dg, gray[i].g+dg,
original[i].b,gray[i].b, db, gray[i].b+db);
#endif
printf("\tdc.w\t$%03x\n",
((gray[i].r+dr)>>4)<<8|
((gray[i].g+dg)>>4)<<4|
((gray[i].b+db)>>4));
}
}
printf("%sFadeComplete:\n", argv[2]);
fclose(fp);
}

View File

@ -8,7 +8,7 @@
</tileset>
<layer name="foreground" width="100" height="8">
<data encoding="base64" compression="zlib">
eJxjZ2BgsGTEjtlH5eguZwekmYBYDAs9Kkd/OS0c8sTIhQNxJRn6RuVwy1ESn6zA/MXNOHjS1nCQA8XLbiDWBYarMSMqDZP7CNVzkgFVbjk0TgZL2hoOcsTE2WNofMkz4pb7TsU0MpLlqBXXdxlQ885gS3dDRW4wtvlGshwAqUxa2g==
eJxjZ2BgsGTEjtlH5eguZwekmYBYDAs9Kkd/OS0c8sTInQfij2ToG5XDLUdJfLIC8xc34+BJW8NBDhQvu4FYFxiuxoyoNEwOlgdOMqDKLYfGyWBJW8NBjpg4ewyNL3lG3HLfqZhGRrIcteL6LgNq3hls6W6oyA3GNt9IlgMAObNbyg==
</data>
</layer>
<layer name="items" width="100" height="8">

View File

@ -79,7 +79,8 @@ Reset:
move.w #0,moving
move.l #playareaFade,playareaFadePtr
move.l #panelFade,panelFadePtr
move.l #flagsFade,flagsFadePtr
move.l #flagsFade,flagsFadePtr
move.l #tileFade,tileFadePtr
move.l #0,foregroundScrollX
move.l #-1,frameCount
bsr InitAnimPattern
@ -164,7 +165,8 @@ GameLoop:
move.w #0,moving
.s2:
jsr ProcessJoystick
jsr InstallNextTileColor
jsr CheckPlayerMiss
bsr Update
bsr RenderNextForegroundFrame
@ -612,8 +614,6 @@ copperListBpl1Ptr:
dc.w BPL3PTH,0
dc.w BPL5PTL,0
dc.w BPL5PTH,0
copperListBpl2Ptr:
;; 3 bitplanes per playfield, playfield2 gets bitplanes 2,4,6
dc.w BPL2PTL,0
@ -636,7 +636,8 @@ copperListBpl2Ptr:
playAreaCopperPalettePtr1:
include "out/foreground-copper-list.s"
include "out/background-copper-list.s"
;; top flag row has it's own palette
dc.w $84d1
dc.w $fffe
flagsCopperPalettePtr1:
@ -644,12 +645,15 @@ flagsCopperPalettePtr1:
include "out/background-copper-list.s"
dc.w $94d1
dc.w $fffe
;;
playAreaCopperPalettePtr2:
include "out/foreground-copper-list.s"
include "out/background-copper-list.s"
;; bottom flag row has it's own palette
dc.w $f4d1
dc.w $fffe
flagsCopperPalettePtr2:
@ -887,6 +891,28 @@ InstallFlagsGreyPalette:
rts
InstallNextTileColor:
movem.l d0-a6,-(sp)
lea playAreaCopperPalettePtr2,a1
add.l #6,a1 ; point to COLOR01
move.l tileFadePtr,a0
lea tileFadeFadeComplete,a5
cmp.l a5,a0
bge .reset
move.l #1,d0 ; 2 colors to update
.loop:
move.w (a0),(a1)
add.l #2,a0
add.l #4,a1
dbra d0,.loop
add.l #2*2,tileFadePtr
bra .done
.reset:
move.l #tileFade,tileFadePtr
.done:
movem.l (sp)+,d0-a6
rts
InstallNextGreyPalette:
lea playAreaCopperPalettePtr1,a1
lea playAreaCopperPalettePtr2,a2
@ -982,6 +1008,8 @@ verticalBlankCount:
moving:
dc.w 0
tileFadePtr:
dc.l tileFade
playareaFadePtr:
dc.l playareaFade
panelFadePtr:
@ -1093,6 +1121,10 @@ flagsFade:
panelFade:
include "out/panelFade.s"
tileFade:
include "out/tileFade.s"
section .bss
foregroundBitplanes1:

View File

@ -14,7 +14,8 @@ typedef struct {
config_t config = {
.numColors = 16
.numColors = 16,
.steps = 16
};
#define MAX_COLORS 32
@ -64,13 +65,14 @@ main(int argc, char** argv)
{"to", required_argument, 0, 't'},
{"from", required_argument, 0, 'f'},
{"output", required_argument, 0, 'o'},
{"steps", required_argument, 0, 's'},
{"colors", required_argument, 0, 'c'},
{0, 0, 0, 0}
};
int option_index = 0;
c = getopt_long (argc, argv, "t:c:o:", long_options, &option_index);
c = getopt_long (argc, argv, "s:t:c:o:", long_options, &option_index);
if (c == -1)
break;
@ -92,6 +94,11 @@ main(int argc, char** argv)
abort_("invalid number of colors");
}
break;
case 's':
if (sscanf(optarg, "%d", &config.steps) != 1) {
abort_("invalid number of steps");
}
break;
case '?':
usage();
break;
@ -152,21 +159,21 @@ main(int argc, char** argv)
}
}
for (int s = 0; s < 16; s++) {
for (int s = 0; s < config.steps+1; s++) {
printf(".step%d\n", s);
for (int i = 0; i < config.numColors; i++) {
int dr = ((((float)original[i].r)-(float)from[i].r)/16.0)*s;
int dg = ((((float)original[i].g)-(float)from[i].g)/16.0)*s;
int db = ((((float)original[i].b)-(float)from[i].b)/16.0)*s;
int dr = ((((float)original[i].r)-(float)from[i].r)/(float)config.steps)*s;
int dg = ((((float)original[i].g)-(float)from[i].g)/(float)config.steps)*s;
int db = ((((float)original[i].b)-(float)from[i].b)/(float)config.steps)*s;
#if 0
printf("r:%d %d %d -> %d\n"
"g:%d %d %d -> %d\n"
"b:%d %d %d -> %d\n",
original[i].r,from[i].r, dr, from[i].r+dr,
original[i].g,from[i].g, dg, from[i].g+dg,
original[i].b,from[i].b, db, from[i].b+db);
#endif
if (config.verbose) {
printf("r:%d %d %d -> %d\n"
"g:%d %d %d -> %d\n"
"b:%d %d %d -> %d\n",
original[i].r,from[i].r, dr, from[i].r+dr,
original[i].g,from[i].g, dg, from[i].g+dg,
original[i].b,from[i].b, db, from[i].b+db);
}
printf("\tdc.w\t$%03x\n",
((from[i].r+dr)>>4)<<8|

View File

@ -12,6 +12,7 @@ typedef struct {
int numColors;
int fromGrey;
int fromBlack;
int steps;
char* toFile;
char* fromFile;
char* output;