/*
* File: l_dgntile.cc
* Summary: Tiles-specific dungeon builder functions.
*/
#include "AppHdr.h"
#include "cluautil.h"
#include "l_libs.h"
#include "branch.h"
#include "mapdef.h"
#ifdef USE_TILE
#include "tiledef-dngn.h"
#include "env.h"
unsigned int get_tile_idx(lua_State *ls, int arg)
{
if (!lua_isstring(ls, arg))
{
luaL_argerror(ls, arg, "Expected string for tile name");
return 0;
}
const char *tile_name = luaL_checkstring(ls, arg);
unsigned int idx;
if (!tile_dngn_index(tile_name, idx))
{
std::string error = "Couldn't find tile '";
error += tile_name;
error += "'";
luaL_argerror(ls, arg, error.c_str());
return 0;
}
return idx;
}
#endif
LUAFN(dgn_lev_floortile)
{
#ifdef USE_TILE
LEVEL(lev, br, 1);
tile_flavour flv;
tile_default_flv(lev, br, flv);
const char *tile_name = tile_dngn_name(flv.floor);
PLUARET(string, tile_name);
#else
PLUARET(string, "invalid");
#endif
}
LUAFN(dgn_lev_rocktile)
{
#ifdef USE_TILE
LEVEL(lev, br, 1);
tile_flavour flv;
tile_default_flv(lev, br, flv);
const char *tile_name = tile_dngn_name(flv.wall);
PLUARET(string, tile_name);
#else
PLUARET(string, "invalid");
#endif
}
LUAFN(dgn_lrocktile)
{
MAP(ls, 1, map);
#ifdef USE_TILE
unsigned short tile = get_tile_idx(ls, 2);
map->rock_tile = tile;
const char *tile_name = tile_dngn_name(tile);
PLUARET(string, tile_name);
#else
UNUSED(map);
PLUARET(string, "invalid");
#endif
}
LUAFN(dgn_lfloortile)
{
MAP(ls, 1, map);
#ifdef USE_TILE
unsigned short tile = get_tile_idx(ls, 2);
map->floor_tile = tile;
const char *tile_name = tile_dngn_name(tile);
PLUARET(string, tile_name);
#else
UNUSED(map);
PLUARET(string, "invalid");
#endif
}
LUAFN(dgn_change_rock_tile)
{
#ifdef USE_TILE
unsigned short tile = get_tile_idx(ls, 1);
if (tile)
env.tile_default.wall = tile;
const char *tile_name = tile_dngn_name(tile);
PLUARET(string, tile_name);
#else
PLUARET(string, "invalid");
#endif
}
LUAFN(dgn_change_floor_tile)
{
#ifdef USE_TILE
unsigned short tile = get_tile_idx(ls, 1);
if (tile)
env.tile_default.floor = tile;
const char *tile_name = tile_dngn_name(tile);
PLUARET(string, tile_name);
#else
PLUARET(string, "invalid");
#endif
}
LUAFN(dgn_ftile)
{
#ifdef USE_TILE
return dgn_map_add_transform(ls, &map_lines::add_floortile);
#else
return 0;
#endif
}
LUAFN(dgn_rtile)
{
#ifdef USE_TILE
return dgn_map_add_transform(ls, &map_lines::add_rocktile);
#else
return 0;
#endif
}
LUAFN(dgn_tile)
{
#ifdef USE_TILE
return dgn_map_add_transform(ls, &map_lines::add_spec_tile);
#else
return 0;
#endif
}
const struct luaL_reg dgn_tile_dlib[] =
{
{ "lrocktile", dgn_lrocktile },
{ "lfloortile", dgn_lfloortile },
{ "rtile", dgn_rtile },
{ "ftile", dgn_ftile },
{ "tile", dgn_tile },
{ "change_rock_tile", dgn_change_rock_tile },
{ "change_floor_tile", dgn_change_floor_tile },
{ "lev_floortile", dgn_lev_floortile },
{ "lev_rocktile", dgn_lev_rocktile },
{ NULL, NULL }
};