update for backscrolling, badguy behaviour
[supertux.git] / src / scripting / squirrel_util.cpp
index f9cb648..664e548 100644 (file)
@@ -31,6 +31,7 @@
 #include "log.hpp"
 #include "level.hpp"
 #include "physfs/physfs_stream.hpp"
+#include "../random_generator.hpp"
 
 #ifdef ENABLE_SQDBG
 #include <sqdbg/sqrdbg.h>
@@ -59,8 +60,8 @@ void init_squirrel(bool enable_debugger)
   if(global_vm == NULL)
     throw std::runtime_error("Couldn't initialize squirrel vm");
 
-#ifdef ENABLE_SQDBG
   if(enable_debugger) {
+#ifdef ENABLE_SQDBG
     sq_enabledebuginfo(global_vm, SQTrue);
     debugger = sq_rdbg_init(global_vm, 1234, SQFalse);
     if(debugger == NULL)
@@ -71,16 +72,23 @@ void init_squirrel(bool enable_debugger)
     if(SQ_FAILED(sq_rdbg_waitforconnections(debugger)))
       throw SquirrelError(global_vm, "Waiting for debug clients failed");
     log_info << "debug client connected." << std::endl;
-  }
 #endif
+  }
 
   sq_pushroottable(global_vm);
-  if(sqstd_register_bloblib(global_vm) < 0)
+  if(SQ_FAILED(sqstd_register_bloblib(global_vm)))
     throw SquirrelError(global_vm, "Couldn't register blob lib");
-  if(sqstd_register_mathlib(global_vm) < 0)
+  if(SQ_FAILED(sqstd_register_mathlib(global_vm)))
     throw SquirrelError(global_vm, "Couldn't register math lib");
-  if(sqstd_register_stringlib(global_vm) < 0)
+  if(SQ_FAILED(sqstd_register_stringlib(global_vm)))
     throw SquirrelError(global_vm, "Couldn't register string lib");
+
+  // remove rand and srand calls from sqstdmath, we'll provide our own
+  sq_pushstring(global_vm, "srand", -1);
+  sq_deleteslot(global_vm, -2, SQFalse);
+  sq_pushstring(global_vm, "rand", -1);
+  sq_deleteslot(global_vm, -2, SQFalse);
+  
   // register supertux API
   register_supertux_wrapper(global_vm);
 
@@ -112,7 +120,10 @@ void exit_squirrel()
     debugger = NULL;
   }
 #endif
-  sq_close(global_vm);
+
+  if (global_vm)
+    sq_close(global_vm);
+
   global_vm = NULL;
 }