diff --git a/plugins/autoSyndrome.cpp b/plugins/autoSyndrome.cpp index a37d806fe..1298764de 100644 --- a/plugins/autoSyndrome.cpp +++ b/plugins/autoSyndrome.cpp @@ -299,10 +299,17 @@ int32_t processJob(color_ostream& out, int32_t jobId) { //add each syndrome to the guy who did the job df::syndrome* syndrome = inorganic->material.syndrome[b]; //check that the syndrome applies to that guy - bool applies = syndrome->syn_affected_class.size() == 0; - if ( applies ) { - //out.print("No syn_affected_class.\n"); - } + /* + * If there is no affected class or affected creature, then anybody who isn't immune is fair game. + * + * Otherwise, it works like this: + * add all the affected class creatures + * remove all the immune class creatures + * add all the affected creatures + * remove all the immune creatures + * you're affected if and only if you're in the remaining list after all of that + **/ + bool applies = syndrome->syn_affected_class.size() == 0 && syndrome->syn_affected_creature_1.size() == 0; for ( size_t c = 0; c < syndrome->syn_affected_class.size(); c++ ) { if ( applies ) break; @@ -313,11 +320,6 @@ int32_t processJob(color_ostream& out, int32_t jobId) { } } } - if ( syndrome->syn_affected_creature_1.size() != 0 ) { - applies = false; - } else { - //out.print("No syn_affected_creature.\n"); - } for ( size_t c = 0; c < syndrome->syn_immune_class.size(); c++ ) { if ( !applies ) break; @@ -342,10 +344,6 @@ int32_t processJob(color_ostream& out, int32_t jobId) { break; } } - if ( !applies ) { - //out.print("Not in syn_affected_creature.\n"); - continue; - } for ( size_t c = 0; c < syndrome->syn_immune_creature_1.size(); c++ ) { if ( creature_name != *syndrome->syn_immune_creature_1[c] ) continue; @@ -356,7 +354,6 @@ int32_t processJob(color_ostream& out, int32_t jobId) { } } if ( !applies ) { - //out.print("Creature is immune.\n"); continue; } if ( giveSyndrome(out, workerId, syndrome) < 0 )