working tile fading test
This commit is contained in:
parent
1deae4565b
commit
a0de566ab8
|
@ -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
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
082 000 015 255
|
||||
133 000 026 255
|
||||
16 132 233 255
|
||||
16 132 233 255
|
||||
|
|
105
028.bs/fade.c
105
028.bs/fade.c
|
@ -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);
|
||||
}
|
|
@ -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">
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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|
|
||||
|
|
|
@ -12,6 +12,7 @@ typedef struct {
|
|||
int numColors;
|
||||
int fromGrey;
|
||||
int fromBlack;
|
||||
int steps;
|
||||
char* toFile;
|
||||
char* fromFile;
|
||||
char* output;
|
||||
|
|
Loading…
Reference in New Issue