There is a short colored flame, and it appears as though it was originally a long colored flame. In both the tiff and the jpeg it looks like this flame was corrected. This flame also happens to be an odd numbered flame, which leads me to believe that the lengths of the odd numbered flames are still important.
Other then that, I spent a fair amount of time today trying to apply Bacon's cypher to various portions of the flames in all sorts of different ways and didn't find anything.
In case anyone wants here is the, somewhat lazily written, code I used today. Those who think a bacon cypher was used may find it useful, it has several options that you should be able to figure out how to use.., but if not feel free to ask.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* shift(char* string);
int getlines(FILE* stream, char** line, ssize_t* nread, int* ntot, size_t len);
char* normalize(char* string, int nflag);
void divideString(char* string);
void debacon(char* string, int btype);
void flip(char* string);
int verbose = 0;
int main(int argc, char* argv[]){
FILE* scram;
int nflag = 0;
int btype = 0;
int bitflip = 0;
char* line[16];
int i = 0;
int j = 0;
int k = 0;
size_t len = 0;
ssize_t nread[16];
int ntot = 0;
char buffer[1024];
if (argc < 3 || argc > 6){
printf("\nERROR: Must specify input file and bacon alphabet\n");
printf("\nUSAGE: ./debacon path_to_input_file bacon_alphabet_A_or_B normalize_type_0_1_2_3 flip_bits_t_or_f\n");
printf("\nUSAGE: Specify -v after all options for verbose mode\n");
printf("\nEXAMPLE: ./debacon file a 2 f -v\n");
exit(EXIT_FAILURE);
}
if(argv[2][0] == 'b' || argv[2][0] == 'B'){
btype = 1;
}
if(argc > 3){
if(atoi(argv[3]) < 4){
nflag = atoi(argv[3]);
}
if(argv[3][0] == 't' || argv[3][0] == 'T'){
bitflip = 1;
}
if(argv[3][1] == 'v' || argv[3][1] == 'V'){
printf("\nTurning on Verbose Mode...\n");
verbose = 1;
}
}
if(argc > 4){
if(argv[4][0] == 't' || argv[4][0] == 'T'){
bitflip = 1;
}
if(argv[4][1] == 'v' || argv[4][1] == 'V'){
printf("\nTurning on Verbose Mode...\n");
verbose = 1;
}
}
if(argc > 5){
if(argv[5][1] == 'v' || argv[5][1] == 'V'){
printf("\nTurning on Verbose Mode...\n");
verbose = 1;
}
}
scram = fopen(argv[1], "r");
i = getlines(scram, line, nread, &ntot, len);
if(verbose == 1){
for(j = 0; j < i; j++){
printf("Retrieved line of length %zu:\n", nread[j]);
printf("line %i is: %s\n", j, line[j]);
}
printf("Total Characters Read: %i\n\n", ntot);
j = 0;
}
for(j = 0; j < i; j++){
if(verbose == 1){
printf("Normalizeing line %i\n", j);
}
if(bitflip == 1){
flip(line[j]);
}
line[j] = normalize(line[j], nflag);
if(verbose == 1){
printf("Line %i is now: %s\n", j, line[j]);
}
}
j = 1;
strcpy(buffer, line[0]);
for(j = 1; j < i; j++){
strcat(buffer, line[j]);
}
if(verbose == 1){
printf("\nCombined String: %s\n", buffer);
}
for(k = 0; k <= strlen(buffer); k++){
divideString(buffer);
if(verbose == 1){
printf("\nString split into 5's for decoding:\n");
printf("%s\n", buffer);
printf("\nDebaconing:\n");
}
debacon(buffer, btype);
shift(buffer);
}
for(; i > 0; i--){
free(line[i-1]);
}
fclose(scram);
exit(EXIT_SUCCESS);
}
void flip(char *string){
char *i;
for(i=string; *i; i++){
if(*i == '1'){
*i = '0';
} else if(*i == '0'){
*i = '1';
}
}
}
void debacon(char *string, int btype){
char buffer[6];
int i = 0;
while(string[i] != '\0'){
buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
i++;
buffer[3] = string[i];
i++;
buffer[4] = string[i];
buffer[5] = '\0';
i+=2;
if(btype == 0){
if(strcmp(buffer, "00000") == 0){
printf("A");
} else if(strcmp(buffer, "00001") == 0){
printf("B");
} else if(strcmp(buffer, "00010") == 0){
printf("C");
} else if(strcmp(buffer, "00011") == 0){
printf("D");
} else if(strcmp(buffer, "00100") == 0){
printf("E");
} else if(strcmp(buffer, "00101") == 0){
printf("F");
} else if(strcmp(buffer, "00110") == 0){
printf("G");
} else if(strcmp(buffer, "00111") == 0){
printf("H");
} else if(strcmp(buffer, "01000") == 0){
printf("J");
} else if(strcmp(buffer, "01001") == 0){
printf("K");
} else if(strcmp(buffer, "01010") == 0){
printf("L");
} else if(strcmp(buffer, "01011") == 0){
printf("M");
} else if(strcmp(buffer, "01100") == 0){
printf("N");
} else if(strcmp(buffer, "01101") == 0){
printf("O");
} else if(strcmp(buffer, "01110") == 0){
printf("P");
} else if(strcmp(buffer, "01111") == 0){
printf("Q");
} else if(strcmp(buffer, "10000") == 0){
printf("R");
} else if(strcmp(buffer, "10001") == 0){
printf("S");
} else if(strcmp(buffer, "10010") == 0){
printf("T");
} else if(strcmp(buffer, "10011") == 0){
printf("V");
} else if(strcmp(buffer, "10100") == 0){
printf("W");
} else if(strcmp(buffer, "10101") == 0){
printf("X");
} else if(strcmp(buffer, "10110") == 0){
printf("Y");
} else if(strcmp(buffer, "10111") == 0){
printf("Z");
} else{
printf(" ");
}
}
if(btype == 1){
if(strcmp(buffer, "00000") == 0){
printf("A");
} else if(strcmp(buffer, "00001") == 0){
printf("B");
} else if(strcmp(buffer, "00010") == 0){
printf("C");
} else if(strcmp(buffer, "00011") == 0){
printf("D");
} else if(strcmp(buffer, "00100") == 0){
printf("E");
} else if(strcmp(buffer, "00101") == 0){
printf("F");
} else if(strcmp(buffer, "00110") == 0){
printf("G");
} else if(strcmp(buffer, "00111") == 0){
printf("H");
} else if(strcmp(buffer, "01000") == 0){
printf("I");
} else if(strcmp(buffer, "01001") == 0){
printf("J");
} else if(strcmp(buffer, "01010") == 0){
printf("K");
} else if(strcmp(buffer, "01011") == 0){
printf("L");
} else if(strcmp(buffer, "01100") == 0){
printf("M");
} else if(strcmp(buffer, "01101") == 0){
printf("N");
} else if(strcmp(buffer, "01110") == 0){
printf("O");
} else if(strcmp(buffer, "01111") == 0){
printf("P");
} else if(strcmp(buffer, "10000") == 0){
printf("Q");
} else if(strcmp(buffer, "10001") == 0){
printf("R");
} else if(strcmp(buffer, "10010") == 0){
printf("S");
} else if(strcmp(buffer, "10011") == 0){
printf("T");
} else if(strcmp(buffer, "10100") == 0){
printf("U");
} else if(strcmp(buffer, "10101") == 0){
printf("V");
} else if(strcmp(buffer, "10110") == 0){
printf("W");
} else if(strcmp(buffer, "10111") == 0){
printf("X");
} else if(strcmp(buffer, "11000") == 0){
printf("Y");
} else if(strcmp(buffer, "11001") == 0){
printf("Z");
} else{
printf(" ");
}
}
}
printf("\n");
}
void divideString(char *string){
int size = strlen(string);
int i = 1;
int j = 1;
int psize;
char buffer[1024];
strcpy(buffer,string);
string[0] = buffer[0];
for(i = 1; j < size; i++){
if(j%5 == 0){
string[i] = ' ';
i++;
}
string[i] = buffer[j];
j++;
}
string[i + 1] = '\0';
}
char* normalize(char* string, int nflag){
char *i;
switch(nflag){
case 0:
for(i=string; *i; i++){
if(*i == 'y'){
*i = '1';
} else if(*i == 'o'){
*i = '0';
} else if(*i == 'g'){
*i = '1';
} else if(*i == 'p'){
*i = '0';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
case 1:
for(i=string; *i; i++){
if(*i == 'y'){
*i = '0';
} else if(*i == 'o'){
*i == '1';
} else if(*i == 'g'){
*i = '1';
} else if(*i == 'p'){
*i = '0';
} else if(*i == '\n'){
*i == '\0';
}
}
return string;
case 2:
for(i=string; *i; i++){
if(*i == 'y'){
*i = '1';
} else if(*i == 'o'){
*i = '0';
} else if(*i == 'g'){
*i == '0';
} else if(*i == 'p'){
*i == '1';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
case 3:
for(i=string; *i; i++){
if(*i == 'y'){
*i = '0';
}else if(*i == 'o'){
*i = '1';
} else if(*i == 'g'){
*i = '0';
} else if(*i == 'p'){
*i = '1';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
default:
printf("\nERROR: Could not normalize stirng\n");
return string;
}
}
int getlines(FILE* stream, char** line, ssize_t* nread, int* ntot, size_t len){
int i = 0;
for(i = 0; i < 16; i++){
nread[i] = getline(&line[i], &len, stream);
if(nread[i] == -1){
break;
}
*ntot += nread[i];
}
return i;
}
char* shift(char* string){
char *nospace = string;
char *temp = string;
char buffer[1024];
buffer;
char t;
int i = 0;
int size;
if(verbose == 1){
printf("\nRemoving Spaces\n");
}
while(*temp != 0){
*nospace = *temp++;
if(*nospace != ' '){
nospace++;
}
}
*nospace = 0;
if(verbose == 1){
printf("\n%s\n", string);
printf("\nShifting String\n");
}
strcpy(buffer, string);
if(verbose == 1){
printf("Buffer: \n%s\n\n", buffer);
}
t = string[0];
size = strlen(string);
for(i = 0; i < (size-1); i++){
string[i] = buffer[i+1];
}
string[i] = t;
string[i+1] = '\0';
if(verbose == 1){
printf("%s\n", string);
}
}
You can feed the program a text file with up to 16 lines, like below. Note though, I didn't dynamically allocate memory, so you are limited to using a character buffer of size 1024 (Which honestly should be more then enough for anything from this puzzle). Also, I didn't do anything fancy as far as combining the lines go, it just concatenates them together, and shifts the bits by 1 each iteration.
001110
010001011010
110111
010011001110100010010
oyoooyooyoo
oooogppggppgppgp
pgpgppgg
And it'll output something like this
HELLOTHISISATEST
OIWW GOREREBGJFG
RNN M CJCICMSKM
ZC UZ ESEQEZEUZ
SFVXJTUJEJAJSJJT
ELLOTHISISATESTH
IWW GOREREBGJFGO
RNN M CJCICMSKM
C UZ ESEQEZEUZZ
FVXJTUJEJAJSJJTS
LLOTHISISATESTHE
WW GOREREBGJFGOI
NN M CJCICMSKM R
UZ ESEQEZEUZZC
VXJTUJEJAJSJJTSF
LOTHISISATESTHEL
W GOREREBGJFGOIW
N M CJCICMSKM RN
UZ ESEQEZEUZZC
XJTUJEJAJSJJTSFV
OTHISISATESTHELL
GOREREBGJFGOIWW
M CJCICMSKM RNN
UZ ESEQEZEUZZC
JTUJEJAJSJJTSFVX
THISISATESTHELLO
GOREREBGJFGOIWW
M CJCICMSKM RNN
Z ESEQEZEUZZC U
TUJEJAJSJJTSFVXJ
HISISATESTHELLOT
OREREBGJFGOIWW G
CJCICMSKM RNN M
ESEQEZEUZZC UZ
UJEJAJSJJTSFVXJT
ISISATESTHELLOTH
REREBGJFGOIWW GO
CJCICMSKM RNN M
ESEQEZEUZZC UZ
JEJAJSJJTSFVXJTU
SISATESTHELLOTHI
EREBGJFGOIWW GOR
JCICMSKM RNN M C
SEQEZEUZZC UZ E
EJAJSJJTSFVXJTUJ
ISATESTHELLOTHIS
REBGJFGOIWW GORE
CICMSKM RNN M CJ
EQEZEUZZC UZ ES
JAJSJJTSFVXJTUJE
SATESTHELLOTHISI