return r; // callbacks return an error status, so 0 is default return value
}
-float Mutator_Add(float(float) func)
+#define MAX_MUTATORS 8
+string loaded_mutators[MAX_MUTATORS];
+float Mutator_Add(mutatorfunc_t func, string name)
{
+ float i, j;
+ j = -1;
+ for(i = 0; i < MAX_MUTATORS; ++i)
+ {
+ if(name == loaded_mutators[i])
+ return 1; // already added
+ if(!loaded_mutators[i])
+ j = i;
+ }
+ if(j < 0)
+ {
+ backtrace("WARNING: too many mutators, cannot add any more\n");
+ return 0;
+ }
+ loaded_mutators[j] = name;
+
if(func(MUTATOR_ADDING) == 0)
{
// good
return 1;
}
backtrace("WARNING: when adding mutator: adding failed\n");
- Mutator_Remove(func);
+ Mutator_Remove(func, name);
return 0;
}
-void Mutator_Remove(float(float) func)
+void Mutator_Remove(float(float) func, string name)
{
+ float i;
+ for(i = 0; i < MAX_MUTATORS; ++i)
+ if(name == loaded_mutators[i])
+ break;
+ if(i >= MAX_MUTATORS)
+ {
+ backtrace("WARNING: removing not-added mutator\n");
+ return;
+ }
+ loaded_mutators[i] = string_null;
+
if(func(MUTATOR_REMOVING) != 0)
{
// baaaaad