Skip to content
Snippets Groups Projects
Commit 6c46caa2 authored by dg's avatar dg
Browse files

fix

git-svn-id: http://svn.net-core.org/repos/t-engine4@4663 51575b47-30f0-44d4-a5cc-537603b46e54
parent 2a73c38b
No related branches found
No related tags found
No related merge requests found
......@@ -79,7 +79,7 @@ function _M:init(t, no_default)
t.rank = t.rank or 3
t.old_life = 0
t.money_value_multiplier = 1 -- changes amounts in gold piles and such
mod.class.Actor.init(self, t, no_default)
......@@ -167,8 +167,8 @@ function _M:describeFloor(x, y)
local obj = game.level.map:getObject(x, y, i)
while obj do
local desc = true
if (obj.auto_pickup and not obj.unique) and self:pickupFloor(i, true) then desc = false end
if self:attr("has_transmo") and obj.__transmo == nil and (not obj.quest and not obj.plot) then
if obj.auto_pickup and self:pickupFloor(i, true) then desc = false end
if desc and self:attr("has_transmo") and obj.__transmo == nil and (not obj.quest and not obj.plot) then
if self:pickupFloor(i, true) then
desc = false
obj.__transmo = true
......
......@@ -78,7 +78,7 @@ choose_combat_stats = function(self, who, status, sub)
end
]=]
on_grant = function(self)
game.player.combat_atk = 24
game.player.combat_atk = 25
game.player.combat_dam = 7
game.player.combat_spellpower = 88
game.player.combat_def = 18
......
......@@ -134,17 +134,42 @@ newTalent{
local x1, y1 = x + math.cos(angle) * size, y + math.sin(angle) * size
local x2, y2 = x - math.cos(angle) * size, y - math.sin(angle) * size
local l = line.new(x, y, x1, y1)
local dx1, dy1 = math.abs(x1 - x), math.abs(y1 - y)
local dx2, dy2 = math.abs(x2 - x), math.abs(y2 - y)
local block_corner = function(_, bx, by)
if game.level.map:checkAllEntities(bx, by, "block_move") then return true
else addwall(bx, by) ; return false end
end
local l = core.fov.line(x, y, x1, y1, function(_, bx, by) return true end)
l:set_corner_block(block_corner)
-- use the correct tangent (not approximate) and round corner tie-breakers toward the player (via wiggles!)
if dx1 < dy1 then
l:change_step((x1-x)/dy1, (y1-y)/dy1)
if y < self.y then l:wiggle(true) else l:wiggle() end
else
l:change_step((x1-x)/dx1, (y1-y)/dx1)
if x < self.x then l:wiggle(true) else l:wiggle() end
end
while true do
local lx, ly = l()
if not lx or game.level.map:checkAllEntities(lx, ly, "block_move") then break end
local lx, ly, is_corner_blocked = l:step()
if not lx or is_corner_blocked or game.level.map:checkAllEntities(lx, ly, "block_move") then break end
addwall(lx, ly)
end
local l = line.new(x, y, x2, y2)
local l = core.fov.line(x, y, x2, y2, function(_, bx, by) return true end)
l:set_corner_block(block_corner)
-- use the correct tangent (not approximate) and round corner tie-breakers toward the player (via wiggles!)
if dx2 < dy2 then
l:change_step((x2-x)/dy2, (y2-y)/dy2)
if y < self.y then l:wiggle(true) else l:wiggle() end
else
l:change_step((x2-x)/dx2, (y2-y)/dx2)
if x < self.x then l:wiggle(true) else l:wiggle() end
end
while true do
local lx, ly = l()
if not lx or game.level.map:checkAllEntities(lx, ly, "block_move") then break end
local lx, ly, is_corner_blocked = l:step()
if not lx or is_corner_blocked or game.level.map:checkAllEntities(lx, ly, "block_move") then break end
addwall(lx, ly)
end
......
......@@ -697,6 +697,58 @@ static int lua_fov_line_step(lua_State *L)
return 4;
}
// Hmm, this function was just added and may change in the near-future. We probably want
// to create a line at a specific angle, so let's simply make a function that does just that.
static int lua_fov_line_change_step(lua_State *L)
{
lua_fov_line *lua_line;
if (lua_istable(L, 1)) {
lua_getfield(L, 1, "line");
lua_line = (lua_fov_line*)auxiliar_checkclass(L, "core{fovline}", -1);
lua_pop(L, 1);
} else {
lua_line = (lua_fov_line*)auxiliar_checkclass(L, "core{fovline}", 1);
}
fov_line_data *line = &(lua_line->line);
float step_x = lua_tonumber(L, 2);
float step_y = lua_tonumber(L, 3);
line->step_x = step_x;
line->step_y = step_y;
return 0;
}
// use to "wiggle" away from boundary cases
static int lua_fov_line_wiggle(lua_State *L)
{
lua_fov_line *lua_line;
if (lua_istable(L, 1)) {
lua_getfield(L, 1, "line");
lua_line = (lua_fov_line*)auxiliar_checkclass(L, "core{fovline}", -1);
lua_pop(L, 1);
} else {
lua_line = (lua_fov_line*)auxiliar_checkclass(L, "core{fovline}", 1);
}
fov_line_data *line = &(lua_line->line);
bool wiggle_me_gently = lua_toboolean(L, 2);
if (fabs(line->step_x) < fabs(line->step_y)) {
if (wiggle_me_gently) {
line->step_y += 0.001f;
} else {
line->step_y -= 0.001f;
}
} else {
if (wiggle_me_gently) {
line->step_x += 0.001f;
} else {
line->step_x -= 0.001f;
}
}
return 0;
}
// The next three functions aren't used anywhere and can probably be deleted
static int lua_fov_line_blocked_xy(lua_State *L)
{
......@@ -913,6 +965,8 @@ static const struct luaL_reg fovline_reg[] =
{"__gc", lua_free_fov_line},
{"__call", lua_fov_line_step},
{"step", lua_fov_line_step},
{"change_step", lua_fov_line_change_step},
{"wiggle", lua_fov_line_wiggle},
{"is_blocked", lua_fov_line_is_blocked},
{"blocked_xy", lua_fov_line_blocked_xy},
{"last_open_xy", lua_fov_line_last_open_xy},
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment