diff --git a/game/modules/tome/data/talents/techniques/2h-assault.lua b/game/modules/tome/data/talents/techniques/2h-assault.lua index b6e288a5129644a13a0c7d9963470da124fa0c27..6601d74b421fe13264034babd93aff5a34a1dc67 100644 --- a/game/modules/tome/data/talents/techniques/2h-assault.lua +++ b/game/modules/tome/data/talents/techniques/2h-assault.lua @@ -82,6 +82,8 @@ newTalent{ if self:canMove(x, y) then self:move(x, y) moved = 1 + else + self:useEnergy(game.energy_to_act) end local fx, fy = util.coordAddDir(self.x, self.y, dir) diff --git a/game/modules/tome/data/zones/test/zone.lua b/game/modules/tome/data/zones/test/zone.lua index 16b12bdac84a1493193a4ae81c559dfdefd78b94..458438b5c8ca711a8cd55aac4431afcba6a68b7f 100644 --- a/game/modules/tome/data/zones/test/zone.lua +++ b/game/modules/tome/data/zones/test/zone.lua @@ -33,7 +33,7 @@ return { -- [[ class = "engine.generator.map.Empty", up = "FLOOR", - floor = "TREE", + floor = "FLOOR", --]] --[[ class = "engine.generator.map.Building", diff --git a/src/map.c b/src/map.c index 4b956d653c0603442d6ebd6a73091fc42baab366..efb6731edfe004bb717bdade4d1ec6467b68ba4c 100644 --- a/src/map.c +++ b/src/map.c @@ -99,6 +99,7 @@ static int map_object_new(lua_State *L) obj->dh = luaL_checknumber(L, 9); obj->scale = luaL_checknumber(L, 10); obj->shader = NULL; + obj->shader_ref = LUA_NOREF; obj->tint_r = obj->tint_g = obj->tint_b = 1; for (i = 0; i < nb_textures; i++) { @@ -117,9 +118,10 @@ static int map_object_free(lua_State *L) map_object *obj = (map_object*)auxiliar_checkclass(L, "core{mapobj}", 1); int i; - for (i = 0; i < obj->nb_textures; i++) + for (i = 0; i < obj->nb_textures; i++) { if (obj->textures_ref[i] != LUA_NOREF) luaL_unref(L, LUA_REGISTRYINDEX, obj->textures_ref[i]); + } free(obj->textures); free(obj->tex_x); @@ -141,6 +143,11 @@ static int map_object_free(lua_State *L) obj->cb_ref = LUA_NOREF; } + if (obj->shader_ref != LUA_NOREF) { + luaL_unref(L, LUA_REGISTRYINDEX, obj->shader_ref); + obj->shader_ref = LUA_NOREF; + } + lua_pushnumber(L, 1); return 1; } @@ -212,7 +219,11 @@ static int map_object_shader(lua_State *L) if (!lua_isnil(L, 2)) { shader_type *s = (shader_type*)lua_touserdata(L, 2); obj->shader = s; + lua_pushvalue(L, 2); + obj->shader_ref = luaL_ref(L, LUA_REGISTRYINDEX); } else { + luaL_unref(L, LUA_REGISTRYINDEX, obj->shader_ref); + obj->shader_ref = LUA_NOREF; obj->shader = NULL; } return 0; diff --git a/src/map.h b/src/map.h index e9556ba818b7a85e7528fa2a43982e768e954376..a6e40c37259ea08cf9ff36aadb0871c149713847 100644 --- a/src/map.h +++ b/src/map.h @@ -31,6 +31,7 @@ struct s_map_object { GLfloat *tex_x, *tex_y, *tex_factorx, *tex_factory; bool *textures_is3d; shader_type *shader; + int shader_ref; int cur_x, cur_y; float dx, dy, scale; float animdx, animdy;