diff --git a/src/simulation/elements/ARAY.cpp b/src/simulation/elements/ARAY.cpp index be43af46f..baa4a1262 100644 --- a/src/simulation/elements/ARAY.cpp +++ b/src/simulation/elements/ARAY.cpp @@ -59,6 +59,7 @@ int Element_ARAY::update(UPDATE_FUNC_ARGS) if (!r) continue; if ((r&0xFF)==PT_SPRK && parts[r>>8].life==3) { + bool isBlackDeco = false; int destroy = (parts[r>>8].ctype==PT_PSCN)?1:0; int nostop = (parts[r>>8].ctype==PT_INST)?1:0; int colored = 0; @@ -76,6 +77,8 @@ int Element_ARAY::update(UPDATE_FUNC_ARGS) } else parts[nr].ctype = colored; parts[nr].temp = parts[i].temp; + if (isBlackDeco) + parts[nr].dcolour = 0xFF000000; } } else if (!destroy) { if ((r&0xFF)==PT_BRAY) { @@ -97,6 +100,8 @@ int Element_ARAY::update(UPDATE_FUNC_ARGS) //docontinue = 1; break; } + if (isBlackDeco) + parts[r>>8].dcolour = 0xFF000000; } else if ((r&0xFF)==PT_FILT) {//get color if passed through FILT if (parts[r>>8].tmp != 6) { @@ -104,6 +109,7 @@ int Element_ARAY::update(UPDATE_FUNC_ARGS) if (!colored) break; } + isBlackDeco = (parts[r>>8].dcolour==0xFF000000); parts[r>>8].life = 4; //this if prevents BRAY from stopping on certain materials } else if ((r&0xFF)!=PT_STOR && (r&0xFF)!=PT_INWR && ((r&0xFF)!=PT_SPRK || parts[r>>8].ctype!=PT_INWR) && (r&0xFF)!=PT_ARAY && (r&0xFF)!=PT_WIFI && !((r&0xFF)==PT_SWCH && parts[r>>8].life>=10)) { @@ -145,7 +151,9 @@ int Element_ARAY::update(UPDATE_FUNC_ARGS) parts[r>>8].tmp = 2; parts[r>>8].life = 1; docontinue = 1; - //this if prevents red BRAY from stopping on certain materials + if (isBlackDeco) + parts[r>>8].dcolour = 0xFF000000; + //this if prevents red BRAY from stopping on certain materials } else if ((r&0xFF)==PT_STOR || (r&0xFF)==PT_INWR || ((r&0xFF)==PT_SPRK && parts[r>>8].ctype==PT_INWR) || (r&0xFF)==PT_ARAY || (r&0xFF)==PT_WIFI || (r&0xFF)==PT_FILT || ((r&0xFF)==PT_SWCH && parts[r>>8].life>=10)) { if((r&0xFF)==PT_STOR) { @@ -154,6 +162,7 @@ int Element_ARAY::update(UPDATE_FUNC_ARGS) } else if ((r&0xFF)==PT_FILT) { + isBlackDeco = (parts[r>>8].dcolour==0xFF000000); parts[r>>8].life = 2; } docontinue = 1; diff --git a/src/simulation/elements/CRAY.cpp b/src/simulation/elements/CRAY.cpp index b226a8ecf..756f98d79 100644 --- a/src/simulation/elements/CRAY.cpp +++ b/src/simulation/elements/CRAY.cpp @@ -78,6 +78,7 @@ int Element_CRAY::update(UPDATE_FUNC_ARGS) continue; if ((r&0xFF)==PT_SPRK && parts[r>>8].life==3) { //spark found, start creating unsigned int colored = 0; + bool isBlackDeco = false; bool destroy = parts[r>>8].ctype==PT_PSCN; bool nostop = parts[r>>8].ctype==PT_INST; bool createSpark = (parts[r>>8].ctype==PT_INWR); @@ -105,7 +106,10 @@ int Element_CRAY::update(UPDATE_FUNC_ARGS) } else if ((r&0xFF)==PT_FILT) { // get color if passed through FILT if (parts[r>>8].tmp==0) { - colored = wavelengthToDecoColour(Element_FILT::getWavelengths(&parts[r>>8])); + if (parts[r>>8].dcolour == 0xFF000000) + colored = 0xFF000000; + else + colored = wavelengthToDecoColour(Element_FILT::getWavelengths(&parts[r>>8])); } parts[r>>8].life = 4; } else if ((r&0xFF) == PT_CRAY || nostop) {