diff options
Diffstat (limited to 'lib/scpt/test.lua')
-rw-r--r-- | lib/scpt/test.lua | 364 |
1 files changed, 364 insertions, 0 deletions
diff --git a/lib/scpt/test.lua b/lib/scpt/test.lua new file mode 100644 index 00000000..81dd5c03 --- /dev/null +++ b/lib/scpt/test.lua @@ -0,0 +1,364 @@ +-- +-- This file takes care of providing the Shiny-Test class +-- with .. erm .. powerful spells +-- + +------------------------------ MAGICTYPE -- M KEY --------------------------------- + +zog_magic = add_magic +{ + ["fail"] = function(chance) + msg_print("So bad, we had "..chance.." chances to succeed.") + msg_print("Hooo bad luck the spell backfires !.") + take_hit("stupidity", 5) + end, + ["stat"] = A_CON, + -- Must return a number between 0 and 50 representing a level + ["get_level"] = function() + return get_skill_scale(SKILL_MAGIC, 25) + get_skill_scale(SKILL_SPIRITUALITY, 25) + end, + ["spell_list"] = + { + { + ["name"] = "Zog1", + ["desc"] = "dessssc zog1", + ["mana"] = 1, + ["level"] = 1, + ["fail"] = 10, + ["spell"] = function() + local ret, dir + -- Get a direction + ret, dir = get_aim_dir(); + if (ret == FALSE) then return end + fire_ball(GF_MANA, dir, 2000, 10) + end, + ["info"] = function() + return " dam 2000" + end, + }, + { + ["name"] = "Zog2", + ["desc"] = "dessssc zog2", + ["mana"] = 3, + ["level"] = 3, + ["fail"] = 30, + ["spell"] = function() + local ret, item, obj, o_name + + -- Ask for an item + ret, item = get_item("What to uber-ize?", + "You have nothing you can uber-ize", + bor(USE_INVEN, USE_EQUIP), + function (obj) + if (obj.tval == TV_HAFTED) or (obj.tval == TV_SWORD) or (obj.tval == TV_POLEARM) or (obj.tval == TV_AXE) then + return TRUE + end + return FALSE + end + ) + + if ret == TRUE then + -- get the item + obj = get_object(item) + -- modify it + obj.dd = 255 + obj.ds = 255 + obj.to_d = 1000 + obj.to_h = 1000 + + -- get the name + o_name = object_desc(obj, FALSE, 0); + msg_print("Your "..o_name.." is hit by a pure wave of uber-ification!") + end + end, + ["info"] = function() + return " cooool" + end, + }, + { + ["name"] = "Zog3", + ["desc"] = "dessssc zog3", + ["mana"] = 4, + ["level"] = 5, + ["fail"] = 50, + ["spell"] = function() + local list = {[1] = "Novice Warrior", [2] = "Novice Mage"} + local x, y, num, max + + num = rand_range(1, 2) + max = damroll(1, 2) + while (max > 0) do + y, x = find_position(player.py, player.px) + place_monster_one(y, x, test_monster_name(list[num]), 0, FALSE, MSTATUS_FRIEND) + max = max - 1 + end + end, + ["info"] = function() + return " summons 1d2 monsters" + end, + }, + }, +} + +-- Register a new magic type +MKEY_SHINY_TEST = 1000 +add_mkey +{ + ["mkey"] = MKEY_SHINY_TEST, + ["fct"] = function() + execute_magic(zog_magic) + + -- use up some energy + energy_use = energy_use + 100; + end +} + + +------------------------------ EXTRA POWERS --------------------------------- + + +-- Register a new power (the 'U' menu) +POWER_TEST = add_power +{ + ["name"] = "Test power", + ["desc"] = "You are a shinny test", + ["desc_get"] = "You become a shinny test", + ["desc_lose"] = "You are no more a shinny test", + ["level"] = 1, + ["cost"] = 5, + ["stat"] = A_CON, + ["fail"] = 6, + ["power"] = function() + msg_print("Zogzog !") + end, +} + + +---- tests + +function test_write() + local conn = zsock:new_connection() + zsock:setup(conn, "192.168.0.200", 2262, ZSOCK_TYPE_TCP, FALSE) + zsock:open(conn) + + local res, len = zsock:write(conn, "footest", FALSE) + msg_print("res "..res.." :: len "..len) + + zsock:close(conn) + zsock:unsetup(conn) + zsock:free_connection(conn); +end + +function test_read() + local conn = zsock:new_connection() + zsock:setup(conn, "192.168.0.200", 2262, ZSOCK_TYPE_TCP, FALSE) + zsock:open(conn) + + + zsock:wait(conn, 50) + local res, str, len = zsock:read(conn, 9, TRUE) + msg_print("res "..res.." :: len "..len.." '"..str.."'") + + zsock:close(conn) + zsock:unsetup(conn) + zsock:free_connection(conn); +end + + +-- A level generator being tested + +CORRIDOR = 1 +ROOM = 2 + +possible_walls = {} + +function level_generator_dungeon2_room(feat, y, x, h, w) + if feat == CORRIDOR then + -- Add the possible walls + for i = x, x + w - 1 do + tinsert(possible_walls, {y, i}) + tinsert(possible_walls, {y + h - 1, i}) + end + for i = x, x + w - 1 do + tinsert(possible_walls, {x, i}) + tinsert(possible_walls, {x, i + h - 1}) + end + + for i = x + 1, x + w - 2 do + for j = y + 1, y + h - 2 do + place_floor(j, i) + end + end + else + -- Add the possible walls + for i = x, x + w - 1 do + tinsert(possible_walls, {y, i}) + tinsert(possible_walls, {y + h - 1, i}) + end + for i = x, x + w - 1 do + tinsert(possible_walls, {x, i}) + tinsert(possible_walls, {x, i + h - 1}) + end + + for i = x, x + w - 1 do + for j = y, y + h - 1 do + cave(j, i).feat = 56 + end + end + for i = x + 1, x + w - 2 do + for j = y + 1, y + h - 2 do + place_floor(j, i) + end + end + end +end + +function select_feature(dir) + if magik(30) == TRUE then + return ROOM, rand_range(5, 12), rand_range(7, 17) + + -- Corridor selection + elseif dir == "up" or dir == "down" then + return CORRIDOR, rand_range(5, 17), 3 + else + return CORRIDOR, 3, rand_range(3, 15) + end +end + +function put_feature(feat, y, x, h, w) + level_generator_dungeon2_room(feat, y, x, h, w) +end + +function can_feature(y, x, h, w) + for i = x, x + w - 1 do + for j = y, y + h - 1 do + if j <= 0 or i <= 0 or i >= cur_wid - 1 or j >= cur_hgt - 1 then return nil end + + if cave_is(cave(j, i), FF1_WALL) == FALSE then return nil end + end + end + return not nil +end + +function is_near_wall(y, x) + if y <= 0 or x <= 0 or x >= cur_wid - 1 or y >= cur_hgt - 1 then return nil end + + if cave_is(cave(y, x), FF1_WALL) == FALSE then return nil end + if cave_is(cave(y - 1, x), FF1_FLOOR) == TRUE then return "down" end + if cave_is(cave(y + 1, x), FF1_FLOOR) == TRUE then return "up" end + if cave_is(cave(y, x - 1), FF1_FLOOR) == TRUE then return "right" end + if cave_is(cave(y, x + 1), FF1_FLOOR) == TRUE then return "left" end + return nil +end + +function find_spot() +--[[ local y, x = 1, 1 + + while not is_near_wall(y, x) do + y, x = rand_range(1, cur_hgt - 2), rand_range(1, cur_wid - 2) + end]] + local i = rand_range(1, getn(possible_walls)) + local y, x = possible_walls[i][1], possible_walls[i][2] + + while not is_near_wall(y, x) do + i = rand_range(1, getn(possible_walls)) + y, x = possible_walls[i][1], possible_walls[i][2] + end + + tremove(possible_walls, i) + return is_near_wall(y, x), y, x +end + +function adjust_dir(dir, y, x, h, w) + if dir == "up" then + y = y - (h - 1) + x = x - (w / 2) + elseif dir == "down" then + x = x - (w / 2) + elseif dir == "left" then + y = y - (h / 2) + x = x - (w - 1) + elseif dir == "up" then + y = y - (h / 2) + end + return y, x +end + +level_generator +{ + ["name"] = "dungeon2", + ["stairs"] = FALSE, + ["monsters"] = FALSE, + ["objects"] = FALSE, + ["miscs"] = FALSE, + ["gen"] = function() + for i = 1, cur_wid - 1 do + for j = 1, cur_hgt - 1 do + place_filler(j, i) + end + end + + + -- the first room + level_generator_dungeon2_room(ROOM, cur_hgt / 2, cur_wid / 2, rand_range(3, 10), rand_range(5, 15)) + + + -- Place 10 features + for nb = 1, 0 do + -- Find a spot near an empty space + local dir, y, x = find_spot() + + local feat, h, w = select_feature(dir) + + local sy, sx = adjust_dir(dir, y, x, h, w) + + if can_feature(sy, sx, h, w) then + put_feature(feat, sy, sx, h, w) + cave(y, x).feat = 32 + end + end + + player.py = cur_hgt / 2 + player.px = cur_wid / 2 + return TRUE + end, +} + + +-- exmaple of display_list +function input_list_example() + local list = { "a", "b", "c", "d", "e", "f", "h", "g" } + local sel = 1 + local begin = 1 + local res = nil + + screen_save() + + while not nil do + display_list(1, 0, 5, 9, "select", list, begin, sel, TERM_L_BLUE) + + local key = inkey() + + if key == ESCAPE then break + elseif key == strbyte("8") then + sel = sel - 1 + if sel < 1 then sel = 1 end + if sel < begin then + begin = begin - 1 + end + elseif key == strbyte("2") then + sel = sel + 1 + if sel > getn(list) then sel = getn(list) end + if sel >= begin + 4 then + begin = begin + 1 + end + elseif key == strbyte("\r") then + res = list[sel] + break + end + end + + screen_load() + + if res then msg_print("Selected: " .. res) end +end |