+
+ // if force_spawnpoint was set, move Tux there, then clear force_spawnpoint
+ if (force_spawnpoint != "") {
+ move_to_spawnpoint(force_spawnpoint);
+ force_spawnpoint = "";
+ }
+
+ tux->setup();
+
+ // register worldmap_table as worldmap in scripting
+ using namespace Scripting;
+
+ sq_pushroottable(global_vm);
+ sq_pushstring(global_vm, "worldmap", -1);
+ sq_pushobject(global_vm, worldmap_table);
+ if(SQ_FAILED(sq_createslot(global_vm, -3)))
+ throw SquirrelError(global_vm, "Couldn't set worldmap in roottable");
+ sq_pop(global_vm, 1);
+
+ if(init_script != "") {
+ std::istringstream in(init_script);
+ run_script(in, "WorldMap::init");
+ }
+}
+
+void
+WorldMap::leave()
+{
+ // remove worldmap_table from roottable
+ using namespace Scripting;
+
+ sq_pushroottable(global_vm);
+ sq_pushstring(global_vm, "worldmap", -1);
+ if(SQ_FAILED(sq_deleteslot(global_vm, -2, SQFalse)))
+ throw SquirrelError(global_vm, "Couldn't unset worldmap in roottable");
+ sq_pop(global_vm, 1);