diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -1,2 +1,3 @@ syntax: glob build/** +.idea/** \ No newline at end of file diff --git a/items.lua b/items.lua --- a/items.lua +++ b/items.lua @@ -12,12 +12,6 @@ item_book_on_navjiarr = obj { end; }; -item_bankbook = obj { - nam = "item_bankbook"; - disp = "Сберкнижка"; - inv = [[Ваша сберкнижка. Согласно ей, у вас есть 150 шиллингов на банковском счете. ]]; -}; - item_book_dlg = dlg { var = { a = false; diff --git a/london.lua b/london.lua --- a/london.lua +++ b/london.lua @@ -603,61 +603,6 @@ starlight_dlg = dlg { }; }; ---[[ - Банк -]] -london_bank_street = room { - nam = "london_bank_street"; - disp = "Улица"; - dsc = [[На улице перед банком людно -- прохожие спешат по своим делам, то и дело натыкаясь друг на друга и разбегаясь в разные стороны. Среди этой суеты возвышается, словно игнорируя ее, здание, высокое и широкое, с резными колоннами, мраморными ступенями, ведущими к широким и тяжелым дверям из красного дерева и позолоченной табличкой над входом, гласящей, что перед лицезреющими это ни что иное, как банк. ]]; - way = { - kh_vroom("В банк", "london_bank"); - }; - entered = function(s) - move(char_coachman, here()); - end; -}; - -london_bank = room { - nam = "london_bank"; - disp = "Банк"; - dsc = [[Внутри банка прохладно и светло. ]]; - way = { - kh_vroom("На улицу", "london_bank_street"); - }; - obj = { - "bank_clerks"; - "bank_guard"; - }; -}; - -bank_clerks = npc { - nam = "bank_clerks"; - dsc = [[Людей внутри почти нет, не считая нескольких скучающих за мраморной стойкой {клерков} ]]; - dlg = "bank_clerks_dlg"; -}; - -bank_clerks_dlg = dlg { - nam = "bank_clerks_dlg"; - disp = "Клерк"; - entered = [[Вы подходите к одному из клерков. Молодой человек в аккуратном пиджаке и галстуке уставляет свой взор на вас и спрашивает: "Чем я могу помочь?"]]; - phr = { - {"[Передать сберкнижку] Я хотел бы снять деньги со своего счета. ", [[Вы протягиваете клерку сберкнижку. Он просматривает ее и отвечает: "Конечно. Минутку". Он уходит из зала и через несколько минут возвращается с мешочком монет. ]], code [[ remove(item_bankbook, pl); pl.money = pl.money + 150; ]]}; - {always=true; "Я вернусь позже. ", [[Клерк возвращается к своим делам. ]], code [[ back(); ]]} - }; -}; - -bank_guard = npc { - nam = "bank_guard"; - dsc = "и одинокого {охранника}, застывшего у входа."; - phrases = { - [[Охранник вежливо приветствует вас: "Добро пожаловать, господин". ]]; - [[Охранник пожимает плечами: "Я ничем не могу вам помочь". ]]; - [[Охранник зевает. ]]; - [[Охранник задумчиво чешет подбородок. ]]; - }; -}; - money_dock = obj { nam = "money_dock"; dsc = "Среди куч мусора вы видите что-то {блестящее}. "; diff --git a/london_checkers.lua b/london_checkers.lua deleted file mode 100644 --- a/london_checkers.lua +++ /dev/null @@ -1,375 +0,0 @@ -checkers_game = room { - var { - board = {}; - selected = 0; - select_lock = false; - }; - nam = "checkers_game"; - nosave = true; - noautosave = true; - forcedsc = true; - randomness = 15; - depth = 6; - cutoff_lo = -3; - cutoff_hi = 3; - draw_board = function(board) - rval = { - {0,0,0,0,0,0,0,0}; - {0,0,0,0,0,0,0,0}; - {0,0,0,0,0,0,0,0}; - {0,0,0,0,0,0,0,0}; - {0,0,0,0,0,0,0,0}; - {0,0,0,0,0,0,0,0}; - {0,0,0,0,0,0,0,0}; - {0,0,0,0,0,0,0,0}; - }; - - for i = 1, #board do - if board[i][3] then - if board[i][4] then - rval[board[i][1]][board[i][2]] = 3; - else - rval[board[i][1]][board[i][2]] = 1; - end; - else - if board[i][4] then - rval[board[i][1]][board[i][2]] = 4; - else - rval[board[i][1]][board[i][2]] = 2; - end; - end; - end; - - return rval; - end; - calc_take = function(s, x, y, w, q, map) - local rval = {}; - local r = nil; - if w then - -- белый рубит черного - рубит вверх - if (map[x - 1][y - 1] == 2 or map[x - 1][y - 1] == 4) - and map[x - 2][y - 2] == 0 and x - 2 > 0 and y - 2 > 0 then - mcopy = deepcopy(map); - r = s:calc_take(x - 2, y - 2, w, q or y == 2, mcopy); - if #r == 0 then - rval[#rval + 1] = {1, {{x-1, y-1}}, q or y == 2, x-2, y-2}; - end; - for i = 1, #r do - r[i][1] = r[i][1] + 1; - r[i][2][#r[i][2] + 1] = {x-1, y-1}; - r[i][3] = r[i][3] or q or y == 2; - rval[#rval + 1] = r[i] - end; - end; - if (map[x + 1][y - 1] == 2 or map[x + 1][y - 1] == 4) - and map[x + 2][y - 2] == 0 and x + 2 < 9 and y - 2 > 0 then - mcopy = deepcopy(map); - r = s:calc_take(x + 2, y - 2, w, q or y == 2, mcopy); - if #r == 0 then - rval[#rval + 1] = {1, {{x+1, y-1}}, q or y == 2, x+2, y-2}; - end; - for i = 1, #r do - r[i][1] = r[i][1] + 1; - r[i][2][#r[i][2] + 1] = {x+1, y-1}; - r[i][3] = r[i][3] or q or y == 2; - rval[#rval + 1] = r[i] - end; - end; - --Дамка может рубить и вниз - if q and (map[x - 1][y + 1] == 2 or map[x - 1][y + 1] == 4) - and map[x - 2][y + 2] == 0 and x - 2 > 0 and y + 2 < 9 then - mcopy = deepcopy(map); - r = s:calc_take(x - 2, y + 2, w, q, mcopy); - if #r == 0 then - rval[#rval + 1] = {1, {{x-1, y+1}}, q, x-2, y+2}; - end; - for i = 1, #r do - r[i][1] = r[i][1] + 1; - r[i][2][#r[i][2] + 1] = {x-1, y+1}; - r[i][3] = r[i][3] or q; - rval[#rval + 1] = r[i]; - end; - end; - if q and (map[x + 1][y + 1] == 2 or map[x + 1][y + 1] == 4) - and map[x + 2][y + 2] == 0 and x + 2 < 9 and y + 2 < 9 then - mcopy = deepcopy(map); - r = s:calc_take(x + 2, y + 2, w, q, mcopy); - if #r == 0 then - rval[#rval + 1] = {1, {{x+1, y+1}}, q, x+2, y+2}; - end; - for i = 1, #r do - r[i][1] = r[i][1] + 1; - r[i][2][#r[i][2] + 1] = {x+1, y+1}; - r[i][3] = r[i][3] or q; - rval[#rval + 1] = r[i]; - end; - end; - else - --черный рубит белого - рубит вниз - if (map[x - 1][y + 1] == 1 or map[x - 1][y + 1] == 3) - and map[x - 2][y + 2] == 0 and x - 2 > 0 and y + 2 < 9 then - mcopy = deepcopy(map); - r = s:calc_take(x - 2, y + 2, w, q or y == 6, mcopy); - if #r == 0 then - rval[#rval + 1] = {1, {{x-1, y+1}}, q or y == 6, x-2, y+2}; - end; - for i = 1, #r do - r[i][1] = r[i][1] + 1; - r[i][2][#r[i][2] + 1] = {x-1, y+1}; - r[i][3] = r[i][3] or q or y == 6; - rval[#rval + 1] = r[i] - end; - end; - if (map[x + 1][y + 1] == 1 or map[x + 1][y + 1] == 3) - and map[x + 2][y + 2] == 0 and x + 2 < 9 and y + 2 < 9 then - mcopy = deepcopy(map); - r = s:calc_take(x + 2, y + 2, w, q or y == 6, mcopy); - if #r == 0 then - rval[#rval + 1] = {1, {{x+1, y+1}}, q or y == 6, x+2, y+2}; - end; - for i = 1, #r do - r[i][1] = r[i][1] + 1; - r[i][2][#r[i][2] + 1] = {x+1, y+1}; - r[i][3] = r[i][3] or q or y == 2; - rval[#rval + 1] = r[i] - end; - end; - --Дамка может рубить и вниз - if q and (map[x - 1][y - 1] == 1 or map[x - 1][y - 1] == 3) - and map[x - 2][y - 2] == 0 and x - 2 > 0 and y - 2 > 0 then - mcopy = deepcopy(map); - r = s:calc_take(x - 2, y - 2, w, q, mcopy); - if #r == 0 then - rval[#rval + 1] = {1, {{x-1, y-1}}, q or y == 6, x-2, y-2}; - end; - for i = 1, #r do - r[i][1] = r[i][1] + 1; - r[i][2][#r[i][2] + 1] = {x-1, y-1}; - r[i][3] = r[i][3] or q; - rval[#rval + 1] = r[i]; - end; - end; - if q and (map[x + 1][y - 1] == 1 or map[x + 1][y - 1] == 3) - and map[x + 2][y - 2] == 0 and x + 2 < 9 and y - 2 > 0 then - mcopy = deepcopy(map); - r = s:calc_take(x + 2, y - 2, w, q, mcopy); - if #r == 0 then - rval[#rval + 1] = {1, {{x+1, y-1}}, q or y == 6, x+2, y-2}; - end; - for i = 1, #r do - r[i][1] = r[i][1] + 1; - r[i][2][#r[i][2] + 1] = {x+1, y-1}; - r[i][3] = r[i][3] or q; - rval[#rval + 1] = r[i]; - end; - end; - end; - return rval; - end; - calc_turn = function(s, d, w, board) - if d > s.depth then - return nil, 0; - end; - local cost = 0; - local turns = {}; - local bmap = s.draw_board(board); - local takes = false; - for i = 1, #board do - --Рубка обязательна, поэтому сперва проверяем рубки - if board[i][3] == w then - -- своя фигура. Проверяем рубки - local r = s:calc_take(board[i][1], board[i][2], w, board[i][4], bmap); - if #r > 0 then - takes = true; - for j = 1, #r do - --Восстанавливаем состояние поля после рубки и уходим глубже - local bcopy = deepcopy(board); - for k = #bcopy, 1, -1 do - for l = 1, #r[j][2] do - if r[j][2][1] == bcopy[k][2] and r[j][2][1] == bcopy[k][2] then - table.remove(bcopy, k); - break; - end; - end; - end; - local rr, pts = s:calc_turn(d + 1, not w, bcopy); - turns[#turns + 1] = {board[i][1], board[i][2], r[j][4], r[j][5], r[j][2], r[j][1] - pts}; - end; - end; - end; - end; - -- Если была рубка, не обрабатываем дальше - if takes then - table.sort(turns, function(a,b) - return a[6] > b[6]; - end); - return turns[0], turns[0][6]; - end; - for i = 1, #board do - if board[i][3] == w then - --Проверяем ходы - if q or w then - --белая или дамка - ходит вверх - if bmap[board[i][1] - 1][board[i][2] - 1] == 0 then - local bcopy = deepcopy(board); - bcopy[i][1] = bcopy[i][1] - 1; - bcopy[i][2] = bcopy[i][2] - 1; - local rr, pts = s:calc_turn(d + 1, not w, bcopy); - turns[#turns + 1] = {board[i][1], board[i][2], bcopy[i][1], bcopy[i][2], nil, - pts}; - end; - if bmap[board[i][1] - 1][board[i][2] + 1] == 0 then - local bcopy = deepcopy(board); - bcopy[i][1] = bcopy[i][1] - 1; - bcopy[i][2] = bcopy[i][2] + 1; - local rr, pts = s:calc_turn(d + 1, not w, bcopy); - turns[#turns + 1] = {board[i][1], board[i][2], bcopy[i][1], bcopy[i][2], nil, - pts}; - end; - end; - if q or not w then - --черная или дамка - ходит вниз - if bmap[board[i][1] + 1][board[i][2] - 1] == 0 then - local bcopy = deepcopy(board); - bcopy[i][1] = bcopy[i][1] + 1; - bcopy[i][2] = bcopy[i][2] - 1; - local rr, pts = s:calc_turn(d + 1, not w, bcopy); - turns[#turns + 1] = {board[i][1], board[i][2], bcopy[i][1], bcopy[i][2], nil, - pts}; - end; - if bmap[board[i][1] + 1][board[i][2] + 1] == 0 then - local bcopy = deepcopy(board); - bcopy[i][1] = bcopy[i][1] + 1; - bcopy[i][2] = bcopy[i][2] + 1; - local rr, pts = s:calc_turn(d + 1, not w, bcopy); - turns[#turns + 1] = {board[i][1], board[i][2], bcopy[i][1], bcopy[i][2], nil, - pts}; - end; - end; - end; - end; - - table.sort(turns, function(a,b) - return a[6] > b[6]; - end); - return turns[0], turns[0][6]; - end; - enemy_turn = function(s) - end; - click = function(s, x, y) - x = math.floor((x - 4) / 24) + 1; - y = math.floor((y - 4) / 24) + 1; - if x > 0 and x < 9 and y > 0 and y < 9 then - for i = 1,#s.board do - if s.board[i][1] == x and s.board[i][2] == y then - if s.board[i][3] then - s.selected = i; - walkin(here()); - return; - else - --Может рубим? - if s.selected > 0 then - print("q"); - local dx = x - s.board[s.selected][1]; - local dy = y - s.board[s.selected][2]; - if s.board[s.selected][4] then - if math.abs(dx) == 1 and math.abs(dy) == 1 then - s.board[s.selected][1] = s.board[s.selected][1] + dx * 2; - s.board[s.selected][2] = s.board[s.selected][2] + dy * 2; - s.selected = 0; - walkin(here()); - return; - end; - else - if math.abs(dx) == 1 and dy == -1 then - s.board[s.selected][1] = s.board[s.selected][1] + dx * 2; - s.board[s.selected][2] = s.board[s.selected][2] + dy * 2; - s.selected = 0; - walkin(here()); - return; - end; - end; - end; - return; - end; - end; - end; - - if s.selected > 0 then - local dx = x - s.board[s.selected][1]; - local dy = y - s.board[s.selected][2]; - print(dx, dy); - if s.board[s.selected][4] then - if math.abs(dx) == 1 and math.abs(dy) == 1 then - s.board[s.selected][1] = x; - s.board[s.selected][2] = y; - s.selected = 0; - walkin(here()); - return; - end; - else - if math.abs(dx) == 1 and dy == -1 then - s.board[s.selected][1] = x; - s.board[s.selected][2] = y; - print(s.board[s.selected][1], s.board[s.selected][2]) - s.selected = 0; - walkin(here()); - return; - end; - end; - end; - s.selected = 0; - - - end; - walkin(here()); - end; - disp = "Шашки"; - reset = function(s) - s.board = { - {2, 3, false, false}; - {4, 3, false, false}; - {6, 3, false, false}; - {8, 3, false, false}; - - --{1, 2, false, false}; - --{3, 2, false, false}; - --{5, 2, false, false}; - --{7, 2, false, false}; - - {2, 5, false, false}; - {4, 5, false, false}; - {6, 5, false, false}; - {8, 5, false, false}; - - {1, 6, true, false}; - {3, 6, true, false}; - {5, 6, true, false}; - {7, 6, true, false}; - - {2, 7, true, false}; - {4, 7, true, false}; - {6, 7, true, false}; - {8, 7, true, false}; - - {1, 8, true, false}; - {3, 8, true, false}; - {5, 8, true, false}; - {7, 8, true, false}; - }; - end; - pic = function(s) - local rval = "images/checkerboard.png"; - if s.selected > 0 then - rval = rval .. [[;box:24x24,red,32@]] .. tostring(s.board[s.selected][1] * 24 - 20) .. "," .. tostring(s.board[s.selected][2] * 24 - 20); - end; - for i = 1, #s.board do - if s.board[i][3] and s.board[i][4] then - rval = rval .. [[;images/checkerwhiteq.png@]] .. tostring(s.board[i][1] * 24 - 20) .. "," .. tostring(s.board[i][2] * 24 - 20); - elseif not s.board[i][3] and s.board[i][4] then - rval = rval .. [[;images/checkerblackq.png@]] .. tostring(s.board[i][1] * 24 - 20) .. "," .. tostring(s.board[i][2] * 24 - 20); - elseif s.board[i][3] and not s.board[i][4] then - rval = rval .. [[;images/checkerwhite.png@]] .. tostring(s.board[i][1] * 24 - 20) .. "," .. tostring(s.board[i][2] * 24 - 20); - elseif not s.board[i][3] and not s.board[i][4] then - rval = rval .. [[;images/checkerblack.png@]] .. tostring(s.board[i][1] * 24 - 20) .. "," .. tostring(s.board[i][2] * 24 - 20); - end; - end; - return rval; - end; -}; \ No newline at end of file diff --git a/main.lua b/main.lua --- a/main.lua +++ b/main.lua @@ -18,7 +18,7 @@ dofile "battlefield.lua"; dofile "items.lua" dofile "party.lua" dofile "game_over.lua"; --- Часть 1: Лондон +-- Часть 1: Лондон. Пролог dofile "london.lua" dofile "wright.lua" dofile "travel.lua" diff --git a/startup.lua b/startup.lua --- a/startup.lua +++ b/startup.lua @@ -69,7 +69,7 @@ player_drake = player { disp3 = "Дрейку"; where = 'port'; - obj = {'hp_indicator', 'item_umbrella', 'item_charts', 'item_note_1', 'item_money', "item_bankbook"}; + obj = {'hp_indicator', 'item_umbrella', 'item_charts', 'item_note_1', 'item_money'}; pay = function(s, c) if (s.money >= c) then diff --git a/travel.lua b/travel.lua --- a/travel.lua +++ b/travel.lua @@ -31,11 +31,8 @@ coachman_dlg = dlg { dsc = [[Вы подходите к повозке и кэбмен спрашивает вас: _"Куда поедем?"_]]; hideinv = true; entered = function(s) - poff(1, 2, 3, 4, 5, 6, 7); - if (where(char_coachman) ~= london_bank_street) then - pon(7); - end; - if (where(char_coachman) ~= port_street) then + poff(1, 2, 3, 4, 5, 6); + if (where(char_coachman) ~= port_street) then pon(6); end; if (where(char_coachman) ~= hotel_street) then @@ -121,17 +118,6 @@ coachman_dlg = dlg { end; end }, - {7, always = true, "В банк (5 монет). ", - function (s) - if (pl:pay(5)) then - walk 'london_bank_street'; - return coachman_responses_ok[rnd(#coachman_responses_ok)]; - else - back(); - return coachman_responses_fail[rnd(#coachman_responses_fail)]; - end; - end - }, {255, always = true, "Я передумал. ", function(s) back() end} diff --git a/wright.lua b/wright.lua --- a/wright.lua +++ b/wright.lua @@ -75,7 +75,7 @@ wright_dlg = dlg { s.state = 5; warehouse32_found = true; psub('warehouse_discovered'); - pl.money = pl.money + 100; + pl.money = pl.money + 50; return [[Джек отвлекается от документов: "Добрый день. У меня хорошие новости. Я нашел склад 32", -- он достает карту города и показывает вам место. Потом он достает из стола мешочек денег и протягивает вам со словами: "Надеюсь, это поможет тебе в поисках". ]]; end; elseif (s.state == 4) then