+#include "base.qh"
+#include "../_all.qh"
+
.float() cbc_func;
.entity cbc_next;
.float cbc_order;
entity e;
float n;
n = 0;
+ order = 0;
for(e = cb; e.cbc_next; e = e.cbc_next)
{
while(e.cbc_next.cbc_func == func)
return r; // callbacks return an error status, so 0 is default return value
}
-#define MAX_MUTATORS 8
+const float MAX_MUTATORS = 15;
string loaded_mutators[MAX_MUTATORS];
float Mutator_Add(mutatorfunc_t func, string name)
{
- float i, j;
+ int i, j;
j = -1;
for(i = 0; i < MAX_MUTATORS; ++i)
{
if(name == loaded_mutators[i])
return 1; // already added
- if(!loaded_mutators[i])
+ if (!(loaded_mutators[i]))
j = i;
}
if(j < 0)
// good
return 1;
}
- backtrace("WARNING: when adding mutator: adding failed\n");
- Mutator_Remove(func, name);
+
+ backtrace("WARNING: when adding mutator: adding failed, rolling back\n");
+
+ if(func(MUTATOR_ROLLING_BACK) != 0)
+ {
+ // baaaaad
+ error("WARNING: when adding mutator: rolling back failed");
+ }
return 0;
}
void Mutator_Remove(float(float) func, string name)
{
- float i;
+ int i;
for(i = 0; i < MAX_MUTATORS; ++i)
if(name == loaded_mutators[i])
break;