精華區beta PttNewhand 關於我們 聯絡資訊
這是一份 BBSLua 程式,可在 PTT2 上 按 L 開始執行 (若出現錯誤或無反應,請先試著重登) 若您中途想中斷程式執行,按下 Ctrl-C 即可 相關資訊請見 PTT2 BBSLua 板 這是最近發現BBS lua後,練習試做的RPG 很久以前就想寫支援telnet的RPG,跟mud不一樣的是,我希望是以圖型為主文字為輔 好加在lua這種程式語言並不難,寫起來跟qbasic大同小異 修改了幾個範例就很容易上手 以前也有試過用Qbasic寫過幾個不成熟的RPG 這次想說一邊練習lua,順便一邊試著完成從以前開始就想做的事 目前大概只完成30%左右的系統架構 其中裡面某些程式碼是參考板上某些前輩的 希望能引起各位大大的指教及更多人對lua的興趣 2008/11/18 更新 增加了旅館功能 2008/10/31 更新 終於回家了 ~_~ 因為遊戲系統跟劇情內容還在構思 所以一直沒有很大的更新 在戰鬥中可以按下i,呼叫假面超人 --#BBSLUA -- Interface: 0.119 -- Title: mimicat RPG (未完成) -- Notes: TEST -- Version: 0.1 Beta -- Author: KIM -- Date: 2008/11/19 -- 戰士系 劍客/劍豪/劍聖(sword) -- 武者/武術家/武聖(axe,hammer) -- 騎士/聖騎士/光之聖騎(spear) -- 法師系 僧侶/牧師/教皇 -- 魔法士/魔導師/大魔導師 -- 鍊金者/鍊金術士/白金鍊金術士 -- 遊俠系 -- 盜賊/刺客/隱殺者(dagger) -- 探險者/冒險家/考古學家 -- 弓箭手/獵人/神箭手 -- 法師(staff)/冒險家(dagger)/弓箭手(bow)/劍客(sword)/騎士(spear)/狂戰士(axe) -- 裝備魔法屬性 -- ar atk_range -- 技能 戰鬥系 dagger(無限斬擊,天舞無雙) sword(連續劍,居合斬) -- hammer 大地吼,擊破 -- axe 使用起來笨重的武器,威力奇高但命中率低,必需很接近才能使用 旋風斧 -- spear 攻擊力普通,攻擊距離大,可無視敵人防禦 橫掃千軍,猛龍出海 map01={ {59,59,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}, {59,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,61,63,61,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,61,00,61,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {59,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {59,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {59,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {59,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,61,63,61,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,61,42,61,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,51,52,51,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,51,00,51,00,00,00,02,02,02,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,02,02,02,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,61,00,00,00,00,00,00,00,00}, {00,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,00,00,00,00,00,00,00,00}, {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}, {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}, {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}, {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}, {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}, } storeimgs = { imgs = { [1] = {' 價目表 | 人客你要什麼 ', ' 休息 300 | \\ ', ' 住宿 1200 | ', ' 小姐 2500 | _(OwO )__ ', ' └∕ \\ ︶ \\ \\───', ' \\ ノ ︵╮ /____ ', ' Λ Λ ╲  ̄≡) _/ | | ', ' ( ) ▕ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄', ' | u ▕ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄', ' ∪ ∪ ▕ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄', '▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔', '按下alt+f4鍵離開 ', } }, name = { [1] = "貴到爆道具店", }, } game_imgs = { [1] = {'*[1;36;40m╭═╮╭═╮╔╦╮╔═╮ ╭═╮╭ ╮╔═╮╔═╮*[m', '*[1;37;40m║╭╗╠═╣║║║╠═ ║ ║║ ║╠═ ╠═╝*[m', '*[1;34;40m╰═╝╙ ╜╯╜╜╚═╯ ╰═╯╚═╝╚═╯╙ ╰ *[m', '*[1;31;40m 你已經屎了*[m', '*[1;30;40m Gamedesign by KIM*[m', }, [2] = { '*[1m ______════_▕▔▔▔▔▏______< ≡≡≡≡<______*[m', '*[m *[0;30;47m◤*[1;33mo*[37m╭──╮▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔╭──╮*[36mo*[0;30;47m◥*[m', '*[m *[30;47m◤ *[1m█│*[30m██*[37m│________________║________________│*[30m██*[37m│*[30m█ *[0;30;47m◥*[m', '*[1;34m ▕*[37;44m ㊣ │*[30m██*[37m│*[0;34;40m████████*[1;44m║*[0;34;40m████████*[1;37;44m│ │ ㊣ *[34;40m▏*[m', '*[1;34m ▕*[37;44m E404│*[30m██*[37m│ *[34m ║ *[37m │ │E404 *[34;40m▏*[m', '*[1;34m ▕*[44m■══▃▃▃══════════════════▃▃▃══■*[40m▍*[m', '*[1;34m◢◤*[36m▔*[37m◎=◎=◎▔▔ \==========// ≡≡≡≡▔▔▔▔*[37m◎=◎=◎*[36m▔\*[1;34m◣*[m', }, [3] = { ' ', ' ', ' ', ' ', ' ', ' System is busy ', ' ', ' The system is busy waiting for the close program dialog box to be ', ' displayed. You can wait and see if it appears, or you can restart ', ' your computer. ', ' ', ' * Press any key to return to Windows and wait. ', ' * Press CTRL+ALT+DEL again to restart your computer. You will ', ' lose all information in all programs that are running. ', ' ', ' ', ' Press any key to continue ', ' ', ' ', ' ', ' ', ' ', ' ', }, } mimicat = { x = 10, y = 17, plocx = 0, plocy = 10, lv = 1, exp = 0, con = 4, dex = 4, str = 4, int = 4, luk = 4, cha = 1, def = 2, use_def = 0, ap = 0, hp = 0, mp = 0, hpmax = 0, mpmax = 0, move_range = 4, act_range = 4, -- index of image img_i = 0, -- mimicat's images imgs = { [0] = { ' Λ Λ ', '(′Δ‵)', '<︳ ︱>', ' ∪ ∪', }, [1] = { ' Λ Λ ', '(′Δ‵)', 'U︳ ︱\\', ' U ∪ ', }, [2] = { ' Λ Λ ', '(′Δ‵)', '/︳ ︱U', ' ∪ U ', }, [3] = { ' Λ Λ ', '(′▽‵)', '<︳宅 ︱Y', ' ∪ ∪ ', }, [4] = { ' Λ Λ ', ' (‵△′) ', ' <︳ ︱O ', ' ∪ ∪ ', }, [5] = { ' Λ Λ ', ' (‵△′) ', ' <︳ ︱O ', ' U ∪ ', }, [6] = { ' Λ Λ ', ' (‵△′) ', ' <︳ ︱O ', ' ∪ U ', }, [7] = { ' Λ Λ ', ' (ㄧ▁ㄧ) ', ' O︳烙▕o ', ' ∪ U ', }, [8] = { ' Λ Λ ', ' (ㄧ▁ㄧ) ', ' o︳跑▕O ', ' U ∪ ', }, }, wp_type = "staff", wp_atk = 40, wp_range = 0, wp_sk = "summon train", wp_sk_lv = 5, eq = { helm = { name = '', def = 0, }, }, } -- mr 魔法抵消 dmg 額外攻擊力 -- ah 吸血 am 吸魔 magic = { def = 0, str = 5, dex = 0, con = 0, int = 2, cha = 0, mov_range = 0, atk_range = 0, mr = 0, ah = 10, am = 10, addexp = 0, dmg = 0, } item = { eq = { helm = { }, armor, glove, weapon, shield, boot, ring = {}, }, potion = { [1] = { name = "經驗測試藥水", price = 50, }, }, book = { [1] = { name = "無限斬擊之書", price = 100, sk = "final hit", }, }, } npc = { count = 6, npc = { [1] = { name = "提拉米蘇", img = { [1] = { ' Ω Ω', '(‧π‧) ', '/︳提︱\\', ' ∪ ∪', }, }, locx = 9, locy = 15, mob = 0, visable = 1, talkcount = 2, talk = { [1] = {'您好,我叫提拉米蘇', '我是作者製造的第一隻npc', '旁邊那沱像大便的是史萊姆', }, [2] = {'目前這個程式只完成20%', '所以有很多東西不能執行', }, }, }, [2] = { name = "武器木板", img = { [1] = { '*[33m┌──┐*[m', '*[33m│≡≡│*[m', '*[33m└┬┬┘*[m', '*[33m ∥∥ *[m', }, }, locx = 8, locy = 15, visable = 1, mob = 0, talkcount = 5, talk = { [1] = {'這個遊戲的武器系統共分為劍,鎚,斧,矛,匕首,弓,杖', '以下大概做個說明', }, [2] = {'劍的命中率高,攻擊力平穩,範圍中等,', '算是最適合初期所使用的武器,', '鎚的命中率較低,攻擊力強,攻擊距離小,', '但是有機會將敵人敲暈使敵人無法行動', }, [3] = {'斧的命中率低,攻擊力最強,攻擊距離小,', '可以無視對手防禦力給予重擊', '矛的命中率中等,攻擊力平穩,攻擊距離遠,', '算是最適合初期所使用的武器', }, [4] = {'匕首命中率高,攻擊力小,暴擊率高,', '適合遊俠型玩家使用,可以搭配特殊技給予敵人重創', '弓箭命中率中,攻擊力中,攻擊距離最遠,可以在遠處就讓敵人重創', '杖為法術專用,發射光箭,威力強距離遠,使用光箭需耗費魔力', }, [5] = {'其中還有一些隱藏性質的kuso武器,等待開發完成,', '不同的武器需要搭配不同的特殊技,之後請等待遊戲開發後', '完成請玩家自行發覺', }, }, }, [3] = { name = "史萊姆王", img = { [1] = { ' *[30;44m◤*[m◣', '*[0;30;44m◤ *[37m◥*[m◣', '*[1;33;44m ⊙⊙ *[m', '*[0;30;44m◣*[31m ︶ *[m◤', }, }, locx = 7, locy = 15, visable = 1, mob = 3, talkcount = 1, talk = { [1] = {'(\\__/#)', '沒看過囂張的大便嗎' }, }, }, [4] = { name = "北七熊", img = { [1] = { '*[31m n___n*[m', '*[31m(-*[37m(*)*[31m-)*[m', '*[31m/_ _\\*[m', '*[31m(m m)*[m' }, }, locx = 9, locy = 18, visable = 1, type = 'npc', mob = 0, talkcount = 3, talk = { [1] = {'這遊戲一隻角色只能學習一種特技', '不同的特技要配合不同的武器', '例如無限斬擊一定要搭配匕首(dagger)', '連續劍就要使用劍類武器(sword)才能使用', }, [2] = {'必殺技的學習是經由書本(book)來學習', '書本的取得方式為購買或是寶箱開啟取得', '必殺技會消耗mp或是hp或是金幣', }, [3] = {'我向前跑進人群,大叫要他們停手,67754但…我在泥巴', '裡摔倒。我抬頭看到一位老奶奶慈祥的臉。我抓住她的手…', '但她竟然一腳踢到我的牙齒...', }, }, }, [5] = { name = "史萊姆", img = { [1] = { ' *[30;43m◤*[m◣', '*[0;30;43m◤ *[37m◥*[m◣', '*[1;33;43m ⊙⊙ *[m', '*[0;30;43m◣*[31m ︶ *[m◤', }, }, locx = 6, locy = 15, visable = 1, type = 'mob', mob = 1, talkcount = 1, talk = { [1] = {'不要踩到我,不要踩到我,不要踩到我..', }, }, }, [6] = { name = "火星人", img = { [1] = { ' |||||| ', ' (⊙⊙) ', ' ( ) ', '╭||||╮', }, }, locx = 9, locy = 20, visable = 1, type = 'mob', mob = 4, talkcount = 1, talk = { [1] = {'想跟火星人溝通,你頭殼有洞喔?....', }, }, }, }, -- end npc } mob = { [1] = { name = "史萊姆", mov_range = 4, atk_range = 4, atk = 10, hp = 40, exp = 10, def = 2, imgs = { [1] = {' ',' ',' ',' ',' ', ' __/ \\__ ', ' / ⊙ ⊙ \\ ', ' \\_______/ ', }, }, }, [2] = { name = "千本針", mov_range = 4, atk_range = 4, atk = 100, hp = 240, exp = 500, def = 5, imgs = { [1] = {' ', ' ◢█◣ ', ' ██●◣◢◣ ', ' ◥●██◣◥ ', ' ◣◥███◣█ ', ' ◥◤◥█◤◥◤ ', ' ◢◤ ', ' █ ', }, }, }, [3] = { name = "史萊姆王", mov_range = 3, atk_range = 4, atk = 20, hp = 1000, exp = 300, def = 5, imgs = { [1] = { ' ' , ' ',' ',' ', ' *[0;30;44m◤*[m◣ ', ' *[0;30;44m◤ *[37m◥*[m◣ ', ' *[1;33;44m ⊙⊙ *[m ', ' *[0;30;44m◣*[31m ︶ *[m◤ ', }, }, }, [4] = { name = "火星人", mov_range = 3, atk_range = 4, atk = 10, hp = 500, exp = 200, def = 5, imgs = { [1] = { ' ',' ', ' ', ' ○||||||| ', ' ╰(⊙ ⊙)╮ ', ' ( )○ ', ' ╭╯|||╰╮ ', }, }, }, } fp = { name, hp, hpmax, mp, mpmax, def, plocx, plocy = 10, lv = 1, str = 4, con = 4, dex = 4, int = 4, luk = 4, cha = 1, def = 2, use_def = 0, wp_sk, wp_sk_lv, imgs ={}, } fmob = { index, name, hp, hpmax, mp, mpmax, atk, def, ar, locx, exp, imgs, atk_range, mov_range, stat, stat_index, } movex1 = 0 movex2 = 0 cline = "" for i = 1 , 40 do cline = cline .. " " end -- ======================================================================== function deepcopy(object) local lookup_table = {} local function _copy(object) if type(object) ~= "table" then return object elseif lookup_table[object] then return lookup_table[object] end local new_table = {} lookup_table[object] = new_table for index, value in pairs(object) do new_table[_copy(index)] = _copy(value) end return setmetatable(new_table, getmetatable(object)) end return _copy(object) end -- ======================================================================== -- ANSI轉換函數 function ConvertANSI(s) return (s:gsub("%*(%[[%d;]*m)", string.char(27).."%1")) end -- ======================================================================== -- abs 函數 function abs(x) if x > 0 then x = x - x - x return x end end -- end function abs -- ======================================================================== -- abs 函數 function int(x) x = math.floor(x) return x end -- end function int -- ======================================================================== -- list function clamp(val, min, max) if val < min then return min elseif val > max then return max else return val end end -- --- class ListBox ----- ListBox = {} ListBox.prototype = { items = {}, selectionFinished = false, selectedIndex = 1, borderStyle = { upperLeft = '+', upper = '-', upperRight = '+', left = '|', right = '|', bottomLeft = '+', bottom = '-', bottomRight = '+' }, x = 0, y = 0, } ListBox.metatable = { __index = ListBox.prototype } function ListBox:new(o) local obj = o or {} setmetatable(obj, ListBox.metatable) return obj end function ListBox.prototype:getSelectedItem() return self.items[self.selectedIndex] end function ListBox.prototype:handleInput() c = bbs.getch() if c == 'UP' then self.selectedIndex = self.selectedIndex - 1 self.selectedIndex = clamp(self.selectedIndex, 1, #(self.items)) elseif c == 'DOWN' then self.selectedIndex = self.selectedIndex + 1 self.selectedIndex = clamp(self.selectedIndex, 1, #(self.items)) elseif c == 'ENTER' then self.selectionFinished = true end end function ListBox.prototype:show() self.selectionFinished = false local maxLength = 0 for __, v in ipairs(self.items) do local length = string.len(v) if maxLength < length then maxLength = length end end local border = self.borderStyle local repTimes = math.ceil(maxLength / string.len(border.upper)) local innerWidth = repTimes * string.len(border.upper) repeat local y = self.y local x = self.x bbs.move(y, x) bbs.outs(border.upperLeft .. string.rep(border.upper, repTimes) .. border.upperRight) y = y + 1 for i = 1, #(self.items) do local item = self.items[i] local fillWidth = innerWidth - string.len(item) bbs.move(y, x) bbs.outs(border.left) if i == self.selectedIndex then bbs.color(7) end bbs.outs(item .. string.rep(' ', fillWidth)) bbs.color() bbs.outs(border.right) y = y + 1 end bbs.move(y, x) bbs.outs(border.bottomLeft .. string.rep(border.bottom, repTimes) .. border.bottomRight) self:handleInput() until self.selectionFinished end -- ======================================================================== -- 自製title 函數 function funtitle(str) bbs.move(1,1) bbs.color(1,37,46) bbs.outs("【" , str,"】") bbs.color() end -- end function title -- ======================================================================== -- 判斷hp mp 副程式 function sub_check_hp() mimicat.hpmax = (mimicat.con + magic.con)* 30 + mimicat.lv * 10 + 10 mimicat.mpmax = (mimicat.int + magic.int)* 15 + mimicat.lv * 10 + 20 if mimicat.hp >= mimicat.hpmax then mimicat.hp = mimicat.hpmax end if mimicat.mp >= mimicat.mpmax then mimicat.mp = mimicat.mpmax end end -- end function check hp -- ======================================================================== -- 同msgbox ( 字串 , y座標 , x座標) function msgbox(msgstr,l_y,l_x) local i local n local tn local selectindex = 1 bbs.color() bbs.kbreset() bbs.move(l_y,l_x) if #msgstr <= 12 then tn = 12 else tn = #msgstr + 7 end bbs.rect(5,tn + 1) if tn % 2 == 1 then tn = tn + 1 end drawBoundary(l_x, l_x + tn , l_y, l_y + 6) bbs.move(l_y + 1,l_x + 2) bbs.outs(" ",msgstr) bbs.move(l_y + 3,l_x + 2) bbs.outs(" Yes") bbs.move(l_y + 4,l_x + 2) bbs.outs(" No") bbs.color(1,36) bbs.move(l_y + 2 + selectindex ,l_x + 2) bbs.outs("→") bbs.move(23,79) repeat if bbs.kbhit(1) then char = bbs.getch() if bbs.clock() - last_update > 0.1 then if char == 'UP' then bbs.move(l_y + 2 + selectindex ,l_x + 2) bbs.outs(" ") selectindex = 1 elseif char == 'DOWN' then bbs.move(l_y + 2 + selectindex ,l_x + 2) bbs.outs(" ") selectindex = 2 elseif char == 'ENTER' then bbs.rect(5,tn + 1) bbs.color() return selectindex end bbs.move(l_y + 2 + selectindex ,l_x + 2) bbs.outs("→") bbs.move(24,79) last_update = bbs.clock() end end bbs.move(24,79) until (gamefin == 1) end -- end function -- ======================================================================== -- 顯示戰鬥時敘述 function sub_show_msg(str_msg,nlocy,nlocx) bbs.color() bbs.move(nlocy,0) bbs.print(cline) bbs.color() bbs.move(nlocy,nlocx) bbs.print(str_msg) end -- ======================================================================== -- draw lines image 畫出圖型 function draw_img(img, x, y) local i = 0 for key, value in ipairs(img) do -- bbs.move(y + i, x) bbs.move(y + i, x) value = ConvertANSI(value) bbs.addstr(value) i = i + 1 end bbs.refresh() bbs.move(24,80) end --end function drawinmage -- ======================================================================== -- draw lines image 畫出圖型(限制locy的範圍,超出不畫) function draw_img_d(img, x, y , y_start,y_end) local i = 0 local n = 0 for key, value in ipairs(img) do -- bbs.move(y + i, x) n = y + i bbs.move(n, x) value = ConvertANSI(value) if n >= y_start and n <= y_end then bbs.addstr(value) end i = i + 1 end bbs.refresh() bbs.move(23,79) end --end function drawinmage -- ======================================================================== -- 繪製出地圖上的 npc function draw_npc_in_map() if gamefin == 1 then return -1 end local i = 0 for i = 1 , npc.count do local n1 = mimicat.x - npc.npc[i].locx local n2 = mimicat.y - npc.npc[i].locy -- 出現在螢幕範圍內再繪製 if (n1 > -5 and n1 < 5) and (n2 > -2 and n2 < 3) then draw_img(npc.npc[i].img[1], 35 - n1 * 8, 9 - n2 * 4) end end end -- end function npc -- ======================================================================== -- 頭上跳出level up動畫副程式 & 動畫處理 (傳入值,字串&文字顏色 function draw_show_get(showstr,ncolor) for i = 1 , 4 do bbs.color(1,ncolor); bbs.move(mimicat.plocy - i,mimicat.plocx + 2) bbs.outs(showstr) bbs.move(23,79) bbs.sleep(0.3) bbs.color();bbs.move(mimicat.plocy - i,mimicat.plocx + 2) bbs.outs(" ") end bbs.move(23,79) end -- end function -- ======================================================================== -- 戰鬥時隱身或現身 1 隱身 其他 現身 function draw_hide_mimicat(hide_index) local i if hide_index == 1 then for i = 1 , 4 do if i == 1 then bbs.color(1,36,40) end if i == 2 then bbs.color(1,37,40) end if i == 3 then bbs.color(1,30,40) end if i == 4 then bbs.color(0,30,40) end draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) bbs.sleep(0.3) end bbs.move(mimicat.plocy,mimicat.plocx) bbs.rect(4,12) else for i = 1 , 4 do if i == 1 then bbs.color(0,30,40) end if i == 2 then bbs.color(1,30,40) end if i == 3 then bbs.color(1,37,40) end if i == 4 then bbs.color() end draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) bbs.sleep(0.3) end end end -- function hide_mimicat -- ======================================================================== -- 畫出地圖 8 -- 00 1 2 4 function draw_map() local tempmap = {} local i = 0 ; local j = 0; for i = 1, 9 do for j = 1 , 4 do local tempn1 = (j - 1) * 4 local tempn2 = (i - 1) * 8 + 2 local locx = mimicat.y - 3 + j local locy = mimicat.x - 5 + i if locx < 0 then locx = 1 end if locy < 0 then locy = 1 end if map01[locx][locy] == 09 then tempmap[1] = " " tempmap[2] = "─┐ " tempmap[3] = " │ " tempmap[4] = " │ " elseif map01[locx][locy] == 07 then tempmap[1] = " " tempmap[2] = " ┌──" tempmap[3] = " │ " tempmap[4] = " │ " elseif map01[locx][locy] == 04 then tempmap[1] = " │ " tempmap[2] = " │ " tempmap[3] = " │ " tempmap[4] = " │ " elseif map01[locx][locy] == 03 then tempmap[1] = " │ " tempmap[2] = "─┘ " tempmap[3] = " " tempmap[4] = " " elseif map01[locx][locy] == 02 then tempmap[1] = "*[1;32;42m \' \" *[m" tempmap[2] = "*[1;32;42m \" \' *[m" tempmap[3] = "*[1;32;42m \' \" *[m" tempmap[4] = "*[1;32;42m \' \" *[m" elseif map01[locx][locy] == 59 then tempmap[1] = "*[1;36;44m~ - - ~ *[m" tempmap[2] = "*[1;36;44m ~ ~ - ~*[m" tempmap[3] = "*[1;36;44m ~ - ~ *[m" tempmap[4] = "*[1;36;44m ~ - - ~ *[m" elseif map01[locx][locy] == 51 then tempmap[1] = "*[0;30;47m┬┴┬┴*[m" tempmap[2] = "*[0;30;47m┴┬┴┬*[m" tempmap[3] = "*[0;30;47m┬┴┬┴*[m" tempmap[4] = "*[0;30;47m┴┬┴┬*[m" elseif map01[locx][locy] == 52 then tempmap[1] = "*[0;30;47m┴┬┴┬*[m" tempmap[2] = "*[1;33;42m [7-11] *[m" tempmap[3] = "*[0;30;42m 商店 *[m" tempmap[4] = "*[0;30;47m┴┬┴┬*[m" elseif map01[locx][locy] == 53 then tempmap[1] = "*[0;30;47m┴┬┴┬*[m" tempmap[2] = "*[1;33;42m [INN] *[m" tempmap[3] = "*[0;30;42m 旅館 *[m" tempmap[4] = "*[0;30;47m┴┬┴┬*[m" elseif map01[locx][locy] == 61 then tempmap[1] = "*[0;30;43m┬┴┬┴*[m" tempmap[2] = "*[0;30;43m┴┬┴┬*[m" tempmap[3] = "*[0;30;43m┬┴┬┴*[m" tempmap[4] = "*[0;30;43m┴┬┴┬*[m" elseif map01[locx][locy] == 62 then tempmap[1] = "*[0;30;43m┴┬┴┬*[m" tempmap[2] = "*[1;33;47m [7-11] *[m" tempmap[3] = "*[0;30;47m 商店 *[m" tempmap[4] = "*[0;30;43m┴┬┴┬*[m" elseif map01[locx][locy] == 63 then tempmap[1] = "*[0;30;43m┴┬┴┬*[m" tempmap[2] = "*[1;33;47m [INN] *[m" tempmap[3] = "*[0;30;47m 旅館 *[m" tempmap[4] = "*[0;30;43m┴┬┴┬*[m" else tempmap[1] = " " tempmap[2] = " " tempmap[3] = " " tempmap[4] = " " bbs.color() end bbs.move( tempn1 + 1 , tempn2+ 1) bbs.outs(ConvertANSI(tempmap[1])) -- bbs.outs(i,",",j) -- bbs.outs("123456789abcdef") bbs.move( tempn1 + 2 , tempn2+ 1) bbs.outs(ConvertANSI(tempmap[2])) bbs.move( tempn1 + 3 , tempn2+ 1) bbs.outs(ConvertANSI(tempmap[3])) bbs.move( tempn1 + 4 , tempn2+ 1) bbs.outs(ConvertANSI(tempmap[4])) tempmap[1] = " " tempmap[2] = " " tempmap[3] = " " tempmap[4] = " " end -- next j end -- next i end --end function map -- ======================================================================== -- 選擇標題畫面 function sub_start_select() local out_i bbs.clear() bbs.move(6,30) bbs.outs("BBS RPG") local x1 = 12 local y1 = 12 bbs.move(y1,x1) bbs.outs("1 新的故事") bbs.move(y1+2,x1) bbs.outs("2 繼續旅程") bbs.move(y1+4,x1) bbs.outs("3 結束冒險") bbs.move(23,79) repeat if bbs.kbhit(1) then char = bbs.getch() -- should we update the mimicat? if bbs.clock() - last_update > move_speed then if char == '1' then out_i = 1 elseif char == '2' then sub_load_game() elseif char == '3' then out_i = 1 gamefin = 1 end last_update = bbs.clock() end end until (out_i == 1) end -- function game logo -- ======================================================================== -- 進入遊戲進度 function sub_load_game() bbs.move(1,1) -- str = bbs.getdata(60) string = "7a647d" string = "79647d" local charstr = encrypt(string, bbs.userid); bbs.outs("show",charstr) bbs.pause() end -- function -- ======================================================================== function encrypt(input, key) bbs.outs(key) for i = 1,#key do -- bbs.outs("rerwe",string.asc(i)) end end -- ======================================================================== function decrypt(input, key) local output = ""; local ix = 1; for i = 1, (#input)/2 do local c = tonumber("0x" .. string.sub(input,(i-1)*2+1,i*2)); -- get singlebyte local d = string.byte(string.sub(key,ix,ix)); ix = (ix % #key) +1; output = output .. string.format("%c", bit.bxor(c,d)); end return output; end -- ======================================================================== -- 繪製商店 function draw_store() bbs.clear() -- 自制title function (因為bbs.title使用後無法取消) funtitle(storeimgs.name[1]) bbs.kbreset(); bbs.move(1,45) bbs.color() bbs.rect(16,32) bbs.color(0,37,40) drawBoundary(45, 79, 1, 16) bbs.move(1,45);bbs.outs("┌────────┬──────┐") bbs.move(2,45);bbs.outs("│ 買進 │ 賣 │") bbs.move(3,45);bbs.outs("│ └──────┤") -- 繪畫商店的圖 draw_img(storeimgs.imgs[1], 4, 4) draw_start() end -- end function draw_store -- ======================================================================== -- 繪製道具視窗 function draw_item_window() local ty local tx local tn bbs.clear() -- 自制title function (因為bbs.title使用後無法取消) bbs.kbreset(); bbs.move(1,1) bbs.color() bbs.rect(16,32) drawBoundary(1, 43, 1, 16) -- 繪製人物圖欄 drawBoundary(3, 17, 2, 8) -- 繪製出mimicat draw_img(mimicat.imgs[mimicat.img_i], 6, 3) bbs.color() drawBoundary(45, 79, 1, 16) ty = 8;tx = 5 -- ****************************************** bbs.move(ty + 1, tx) tn = mimicat.str + magic.str if tn < 0 then tn = 0 end tm = fun_check_magic_show_color(magic.str) bbs.outs(ConvertANSI("力量 (Str): "..tn..tm)) bbs.move(ty + 2, tx) tn = mimicat.dex + magic.dex if tn < 0 then tn = 0 end tm = fun_check_magic_show_color(magic.dex) bbs.outs(ConvertANSI("敏捷 (Dex): "..tn..tm)) bbs.move(ty + 3, tx) tn = mimicat.con + magic.con if tn < 0 then tn = 0 end tm = fun_check_magic_show_color(magic.con) bbs.outs(ConvertANSI("體質 (Con): "..tn..tm)) bbs.move(ty + 4, tx) tn = mimicat.int + magic.int if tn < 0 then tn = 0 end tm = fun_check_magic_show_color(magic.int) bbs.outs(ConvertANSI("智力 (Int): "..tn..tm)) bbs.move(ty + 5, tx) tn = mimicat.cha + magic.cha if tn < 0 then tn = 0 end tm = fun_check_magic_show_color(magic.cha) bbs.outs(ConvertANSI("魅力 (Cha): "..tn..tm)) bbs.move(ty + 6, tx) tn = mimicat.def + magic.def if tn < 0 then tn = 0 end tm = fun_check_magic_show_color(magic.def) bbs.outs(ConvertANSI("防禦 (Def): "..tn..tm)) ty = 8;tx = 26 bbs.move(ty + 1, tx) bbs.outs("移動距離: ",mimicat.move_range + magic.mov_range," ") bbs.move(ty + 2, tx) tn = mimicat.act_range + magic.atk_range + mimicat.wp_range bbs.outs("攻擊範圍: ", tn ," ") bbs.move(ty + 3, tx) bbs.outs("增加傷害: ",magic.dmg," ") bbs.move(ty + 4, tx) bbs.outs("吸取體力: ",magic.ah,"% ") bbs.move(ty + 5, tx) bbs.outs("吸取魔力: ",magic.am,"% ") bbs.move(ty + 6, tx) bbs.outs("增加經驗: ",magic.addexp,"% ") draw_start() bbs.pause() bbs.color() bbs.clear() draw_start() draw_map() -- 繪製地圖上的npc draw_npc_in_map() map_walk() end -- end function item windows -- ======================================================================== -- 確認增加的魔法屬性是正的還是負的 正 黃色 0 白色 負 紅色 -- 傳入值 增加的屬性值(數字) 傳出值 *[1;33m+數字 function fun_check_magic_show_color(magicnum) local temp = "" if magicnum == nil then return -1 end if magicnum == 0 then elseif magicnum > 0 then temp = "(*[1;33m+"..magicnum.."*[m) " elseif magicnum < 0 then temp = "(*[0;31m"..magicnum.."*[m) " end return temp end -- ======================================================================== -- 玩家選擇 function sub_act_play_change_load(i_n) if i_n == 1 then fp.name = mimicat.userid fp.lv = mimicat.lv fp.hp = mimicat.hp fp.mp = mimicat.mp fp.hpmax = mimicat.hpmax fp.mpmax = mimicat.mpmax fp.def = mimicat.def fp.plocx = mimicat.plocx fp.plocy = mimicat.plocy fp.str = mimicat.str fp.con = mimicat.con fp.dex = mimicat.dex fp.int = mimicat.int fp.luk = mimicat.luk fp.cha = mimicat.cha fp.wp_type = mimicat.wp_type fp.wp_sk = mimicat.wp_sk fp.wp_sk_lv = mimicat.wp_sk_lv fp.imgs = micat.imgs end end -- ======================================================================== -- 繪出戰鬥開場動畫 function draw_fight() local tm = "" local line2 = "" bbs.kbreset() -- 給予怪物屬性 i = fmob.index fmob.name = mob[i].name fmob.hp = mob[i].hp fmob.hpmax = mob[i].hp fmob.exp = mob[i].exp fmob.atk = mob[i].atk fmob.def = mob[i].def fmob.imgs = mob[i].imgs[1] fmob.atk_range = mob[i].atk_range fmob.mov_range = mob[i].mov_range fmob.locx = 62 fmob.y = 6 -- 給予玩家屬性 fp.hp = mimicat.hp fp.mp = mimicat.mp sub_act_play_change_load(i_n) -- draw_img(mob[1].imgs[1],4,4) -- draw_img(fmob.imgs,5,4) -- bbs.pause() for i = 1 , 40 do line2 = line2 .. "▄" end -- 戰鬥畫面開場 bbs.color() for i = 1 , 6 do bbs.color() bbs.move(8 - i + 1, 0);bbs.outs(cline) bbs.move(8 + i - 1, 0);bbs.outs(cline) bbs.color(47) bbs.move(8 - i , 0);bbs.outs(cline) bbs.move(8 + i , 0);bbs.outs(cline) bbs.sleep(0.1) end bbs.color() bbs.move(3 , 0);bbs.outs(cline) bbs.color(1,34,44) bbs.move(2 , 0);bbs.outs(line2) bbs.color() bbs.color();bbs.move(2,28) tm = "【 " ..bbs.userid.. " VS " ..fmob.name if string.len(tm) % 2 == 0 then tm = tm .. "】" else tm = tm .. " 】" end bbs.outs(tm) bbs.move(16,0);bbs.outs(cline) bbs.move(16,3);bbs.outs("A 普通攻擊 / S 特殊技 / D 防禦 / Q 逃跑") bbs.color() end -- end function show -- ======================================================================== -- 繪製戰鬥時可行走之範圍 & 限制行走範圍 function draw_fight_move_range() local n local n2 bbs.color(46) n = ((mimicat.move_range + magic.mov_range)* 2) + 4 for i = 1 , n do n2 = (mimicat.plocx - (mimicat.move_range + magic.mov_range)* 2 + 4) + i * 2 if n2 < 0 then n2 = 0 end if n2 > 78 then n2 = 78 end bbs.move(14 , n2) bbs.outs("= ") end bbs.color() movex1 = (mimicat.plocx + (mimicat.move_range + magic.mov_range)* 2) movex2 = (mimicat.plocx - (mimicat.move_range + magic.mov_range)* 2 + 4) if movex2 < 0 then movex2 = 0 end end -- ======================================================================== -- 繪製怪物戰鬥時可行走之範圍 function draw_mob_move_range() local n local n2 bbs.color(46) n = (fmob.mov_range * 2) + 4 for i = 1 , n do n2 = (fmob.locx - fmob.mov_range* 2) + i * 2 if n2 < 0 then n2 = 0 end if n2 > 78 then n2 = 78 end bbs.move(14 , n2) bbs.outs("= ") end bbs.move(23,79) bbs.color() end -- ======================================================================== -- 繪製mimicat 手上武器 function draw_mimicat_wp(plocx) local temp if mimicat.wp_type == "dagger" then temp = " O︳ ︱O+- " elseif mimicat.wp_type == "sword" then temp = " <︳ ︱O← " elseif mimicat.wp_type == "spear" then temp = " O┼─┼O→ " elseif mimicat.wp_type == "hammer" then temp = " O┼─┼O□ " elseif mimicat.wp_type == "bow" then temp = " <︳ ┼} " elseif mimicat.wp_type == "axe" then temp = " O┼─┼OⅡ " elseif mimicat.wp_type == "staff" then temp = " /︳ ╞O=- " elseif mimicat.wp_type == "" then temp = " O︳ ╞O " end bbs.move(mimicat.plocy + 2,plocx) bbs.outs(temp) bbs.move(23,79) end -- ======================================================================== -- 繪製怪物的血量表情 (怪物的剩餘血量以表情來表達) function draw_mob_hp_img() local n local temp n = (fmob.hp / fmob.hpmax) * 100 bbs.color() if n >= 90 then bbs.color(1,32) temp = " (▔▽▔ ) " elseif n >= 80 then bbs.color(1,36) temp = " (ㄧ︵ㄧ#) " elseif n >= 60 then bbs.color(1,33) temp = " (⊙▁⊙;) " elseif n >= 40 then bbs.color(1,35) temp = " (☆▁☆ ) " elseif n >= 20 then bbs.color(37) temp = " (′O‵;) " elseif n > 0 then bbs.color(33) temp = " (> ︹ <;) " elseif n <= 0 then bbs.color(31) temp = " (ㄨQㄨ ) " end bbs.move(3,68) bbs.outs(temp) bbs.color() bbs.move(23,79) end -- end function mob_image -- ======================================================================== -- 繪製戰鬥中光箭動畫(1 光箭 2 普通箭 3 穿心箭) function sub_show_light_bolt(i_n) local temp local t_img local tc if i_n == 1 then temp = "光箭 (light bolt)" t_img = ">>" tc = 36 elseif i_n == 2 then temp = "箭矢 " t_img = "->" tc = 37 elseif i_n == 3 then temp = "穿心箭 (magnum shot)" t_img = "→" end -- 顯示目前字串 sub_show_msg(temp,4,24) bbs.sleep(1) draw_start() for i = 1, (fmob.locx - mimicat.plocx - 10 )/ 2 do if i_n == 3 then tc = math.random(7) + 30 end bbs.color(1,tc,40) bbs.move(mimicat.plocy + 2 ,mimicat.plocx + 10 + i*2) bbs.outs(" "..t_img) bbs.move(23,79) bbs.sleep(0.1) end bbs.color() -- 繪出怪物立姿 draw_img(fmob.imgs, fmob.locx, fmob.y) end -- end function draw_atk_show_light_bolt -- ======================================================================== -- 畫出表格 function drawBoundary(xStart, xEnd, yStart, yEnd) if xStart>xEnd-4 or yStart>yEnd-2 or xStart<0 or yStart<0 then return nil, nil, nil, nil; end local previousY, previousX = bbs.getyx(); bbs.move(yStart, xStart); bbs.addstr('┌'); bbs.move(yStart, xEnd-2); bbs.addstr('┐'); bbs.move(yEnd-1, xStart); bbs.addstr('└'); bbs.move(yEnd-1, xEnd-2); bbs.addstr('┘'); local xPointer; for xPointer = xStart+2, xEnd-4, 2 do bbs.move(yStart,xPointer); bbs.addstr('─'); bbs.move(yEnd-1, xPointer); bbs.addstr('─'); end local yPointer; for yPointer = yStart+1, yEnd-2 do bbs.move(yPointer, xStart); bbs.addstr('│'); bbs.move(yPointer, xEnd-2); bbs.addstr('│'); end bbs.move(previousY, previousX); return xStart+2, xEnd-2, yStart+1, yEnd-1 end --drawBoundary -- ======================================================================== -- 繪製主表單狀態欄 function draw_start() drawBoundary(1, 79, 17, 23); bbs.move(18,5); bbs.outs("I 道具"); bbs.move(19,5); bbs.outs("S 技能"); bbs.move(20,5); bbs.outs("P 戰鬥方針:"); bbs.move(21,5); bbs.outs("按下Ctrl+C離開"); bbs.move(20,16); bbs.color(1,37); if fight_mode == 1 then bbs.outs("手動戰鬥 ") end if fight_mode == 2 then bbs.outs("自動戰鬥 ") end if fight_mode == 3 then bbs.outs("安全第一 ") end if fight_mode == 4 then bbs.outs("跑為上策 ") end bbs.color() -- hp/mp判斷副程式 sub_check_hp() bbs.move(18,30); bbs.outs("LV: ",mimicat.lv," "); bbs.move(19,30); bbs.outs("Exp: ",mimicat.exp,"/",mimicat.lv^2*100," "); bbs.move(20,30); bbs.outs("HP: ",mimicat.hp,"/",mimicat.hpmax," "); bbs.move(21,30); bbs.outs("MP: ",mimicat.mp,"/",mimicat.mpmax," "); bbs.move(18,50); bbs.outs("Gold: ",gold," "); end -- end function -- ======================================================================== -- 繪製旅館休息動畫(休息模式 1 休息 2 睡覺 3 叫小姐) function draw_inn_resting(rest_mode) local i local n = 0 local j = 0 local temp = "" local local_imgs = { [0] = { ' ', ' ', ' ', ' ', ' *[44m ╮╮╮╭╭ ╮╮╭╭╭ *[30m 貝 一', ' ◢█◣◢█◣ ╭──╮ ╭──╮ ', ' ██████ │╭╮│ │╭╮│ ! 起', ' ██████ │╰╯│ │╰╯│ ', ' ◥████◤ ╰──╯ ╰──╯ ', ' ◥██◤ ◥██◤◥██◤◥██◤ ', ' ◥◤ ◢██◣ ◥◤ ◥◤ ◥◤ ◢██◣ ╯ 玩', ' ████ ████ ', ' ████ ████ ', ' ╰─╮ ◥██◤ ◥██◤ ╭─╯ ', ' ', ' ◢◣ ◢◣ ◢◣ ', ' ◢██◣◢██◣◢██◣ ', ' ╲ ◢◣ ◢◣ ╱ ', ' ╲╴╴╴◢██◣╴╴╴╴◢██◣╴╴╴╱ ', ' ', ' ', }, [1] = { ' ', ' ▁▂▃▂ ', ' ▆▃_ ▂▅▆◣ ', ' *[44m *[33;47m◤ ▆▄*[33mb ', ' O / \\ ', ' r \\_ ', ' a *[40m *[30;44m▊ / ', ' n *[40m *[30;44m▉ ', ' g _▄█ *[30m` ', ' e_▁▄▆ / ', ' Y▅▄▁ ▁_ ', ' u◥▎ ◢▍ ', ' ◥_◢ *[35mn *[44m \\ ', ' _*[37m *[43m▊ *[43ml ', ' ', ' _ ▅_\\▎ ', ' \\ ', ' _◢ \\ / *[43m ', ' \\ _▃ / ', ' *[43me▃▅▆ ', ' *[47m* [45m _▂▅▃_ ', ' ▆▄▆ *[37m *[33m_▃▆▅/ ', ' \\ _▂▃▅ ▎*[43mc \\ ', }, [2] = {' ', ' *[43me▍◥∥ ▌ ◥W\\', ' ▍▎ \\▂▁_ \\◣ ▉ ', ' ▋▋▍▁ ◤/▎\\ ', ' { *[43mk *[40m *[1;37m / ` █▍', ' ▎|\'*[0;47m █▎◥\\ ', ' *[43mk{ *[37me / ', ' ▎\\◥ _=( ◥', ' \' ▍◥\\W ▅*[37m *[m ▎ ', ' / WV ▎ *[1;46m', ' \\ *[46m *[1;30mL, ', ' *[30m _▃*[46m / *[ml', ' N/ ', ' *[0;30mn *[47m *[33m,▄ *[46m V/ *[36mH▄▂_ ▂▄ *[36m▂,', ' / \' ▊ ∕ Nㄟ. ◣▄▇ *[43me▆ *[30md', ' ▋ *[36;40m *[1;30;46m w ,V *[40me █/ ◣', ' *[46m *[1m ^ ∕\\ ▎', ' ▄*[33me▅/ *[36m *[1;30m ^` ', ' *[46m v" *[47m ', ' /▆▃▂_ |', ' ▏ .V▅▃ ', ' N ▆▃ *[43mf ', ' *[30m *[36;40m▏ ', }, } -- 繪出商店的圖 , 將場景變暗 bbs.color(1,37);draw_img(storeimgs.imgs[1], 4, 4);bbs.sleep(0.3) bbs.color();draw_img(storeimgs.imgs[1], 4, 4);bbs.sleep(0.3) bbs.color(1,30);draw_img(storeimgs.imgs[1], 4, 4);bbs.sleep(0.3) bbs.color(0,30);draw_img(storeimgs.imgs[1], 4, 4);bbs.sleep(0.5);bbs.color() bbs.move(2,1);bbs.rect(15,43) if rest_mode == 1 then temp = "QK " end if rest_mode == 2 then temp = "Zzz " end if rest_mode == 3 then j = math.random(6) if j == 1 then temp = "......" end if j == 2 then temp = "救命呀" end if j == 3 then temp = "扛爸爹" end if j == 4 then temp = "咦~~爹" end if j == 5 then temp = "烏龍爹" end if j == 6 then temp = "亞美爹" end end -- function draw_img_d(img, x, y , y_start,y_end) if j == 2 then n = 0 else n = math.random(2) end if rest_mode == 3 then for i = 15 , 1 , -1 do draw_img_d(local_imgs[n], 0, i - 3 ,2, 16) bbs.sleep(0.1) end -- 強調作者id bbs.sleep(2) bbs.color(32,47);bbs.move(16,52) if n == 0 then bbs.outs(" ascii by ptt cafelife ") end if n == 1 then bbs.outs(" ascii by 無名 OrangeYu ") end if n == 2 then bbs.outs(" ascii by 無名 OrangeYu ") end bbs.sleep(1.5);bbs.color() end for i = 1 , 9 do bbs.move(24,79) if j == 1 then bbs.sleep(0.1) else bbs.sleep(0.3) end bbs.move(4 + i,math.random(4,64)) bbs.outs(temp) end bbs.move(23,79) if j == 1 and rest_mode == 3 then bbs.sleep(3) bbs.move(5,15);bbs.outs("結束了喔?");bbs.sleep(1.5) bbs.move(6,15);bbs.outs(bbs.userid .. ":.....");bbs.sleep(1) end bbs.sleep(0.5) -- 以下是起床 bbs.move(2,0);bbs.rect(15,80) -- 繪出商店的圖 , 將場景變亮 if rest_mode == 3 then funtitle("龍門大賓館") end bbs.color(1,30);draw_img(storeimgs.imgs[1], 4, 4);bbs.sleep(0.3) bbs.color(0,33);draw_img(storeimgs.imgs[1], 4, 4);bbs.sleep(0.3) bbs.color(1,37);draw_img(storeimgs.imgs[1], 4, 4);bbs.sleep(0.3) bbs.color();draw_img(storeimgs.imgs[1], 4, 4) bbs.kbreset() return j end -- ======================================================================== -- 在地圖上行走 function map_walk() if gamefin == 1 then return -1 end -- 繪製出mimicat draw_img(mimicat.imgs[mimicat.img_i], 35, 9) bbs.move(23,79) -- bbs.refresh() if bbs.kbhit(1) then char = bbs.getch() -- should we update the mimicat? if bbs.clock() - last_update > move_speed then backx = 0;backy = 0 if char == 'UP' then mimicat.y = mimicat.y - 1;backx = 0;backy = 1 elseif char == 'DOWN' then mimicat.y = mimicat.y + 1;backx = 0;backy = -1 elseif char == 'LEFT' then mimicat.x = mimicat.x - 1;backx = 1;backy = 0 elseif char == 'RIGHT' then mimicat.x = mimicat.x + 1;backx = -1;backy = 0 elseif char == 'q' then move_speed = 0 else main_meun_inkey(char) end -- 重繪地圖 -- 限制行走範圍 (41 商店 42 旅館) if map01[mimicat.y][mimicat.x] == 41 then -- 退回去 mimicat.x = mimicat.x + backx mimicat.y = mimicat.y + backy -- item_arr[1] = "ea" store_mode = 3 select_enter_store(store_mode) elseif map01[mimicat.y][mimicat.x] == 42 then -- 退回去 mimicat.x = mimicat.x + backx mimicat.y = mimicat.y + backy -- 進入旅館副程式 sub_enter_inn() elseif map01[mimicat.y][mimicat.x] > 50 then -- 退回去 mimicat.x = mimicat.x + backx mimicat.y = mimicat.y + backy end -- 判斷有沒有撞到npc i = 0 for i = 1 , npc.count do if mimicat.x == npc.npc[i].locx and mimicat.y == npc.npc[i].locy then -- 退回去 mimicat.x = mimicat.x + backx mimicat.y = mimicat.y + backy -- 進入npc 說話function fun_npc_talk(i) end end if gamefin == 1 then return -1 end -- 繪製地圖 draw_map() -- 繪製地圖上的npc draw_npc_in_map() -- change image index mimicat.img_i = mimicat.img_i + 1 if mimicat.img_i > 2 then mimicat.img_i = 1 end bbs.move(21,50) bbs.outs("座標:",mimicat.x,",",mimicat.y," ") bbs.move(21,60) bbs.outs("[",map01[mimicat.y][mimicat.x],"] ") last_update = bbs.clock() end else --超過10秒 變宅 if bbs.clock() - last_update > 20 then mimicat.img_i = 3 else mimicat.img_i = 0 end end end --end function map_walk -- ======================================================================== -- 按下方向鍵以外的鍵 function main_meun_inkey(char) -- 轉換戰鬥模式 if char == 'p' or char == 'P' then fight_mode = fight_mode + 1 if fight_mode > 4 then fight_mode = 1 end draw_start() elseif char == 'd' or char == 'D' then fmob.index = 2 draw_fight() fun_fight() elseif char == 'i' or char == 'I' then -- 繪製道具視窗 draw_item_window() elseif char == 't' or char == 'T' then -- 繪製道具視窗 draw_img(game_imgs[3], 0 , 0) -- msgbox("test",5,25) bbs.pause() end end -- end function main_inkey -- ======================================================================== -- 進入旅館副程式 function sub_enter_inn() local n local temp = "" local get_hp local get_mp bbs.clear() -- title funtitle("龍門客棧") -- 繪出商店的圖 draw_img(storeimgs.imgs[1], 4, 4) draw_start() -- 同msgbox ( 字串 , y座標 , x座標) -- msgbox(msgstr,l_y,l_x) box = ListBox:new() box.x = 50;box.y = 3 local select_item = { [1] = '休息 300', [2] = '睡覺 1000', [3] = '叫小姐 2500', [4] = '離開', } box.items = {select_item[1],select_item[2],select_item[3],select_item[4]} box:show() temp = box:getSelectedItem() -- hp/mp判斷副程式 sub_check_hp() if temp == select_item[1] then -- 休息 hp mp + 40% if gold >= 300 then gold = gold - 300 -- 繪出休息中動畫 draw_inn_resting(1) get_hp = int(mimicat.hpmax * 50 / 100) get_mp = int(mimicat.mpmax * 40 / 100) mimicat.hp = mimicat.hp + get_hp mimicat.mp = mimicat.hp + get_mp -- hp/mp判斷副程式 sub_check_hp() bbs.sleep(1) bbs.move(12,50);bbs.outs("休息過後,覺得神清氣爽") bbs.color(1,32);bbs.move(13,50);bbs.outs("HP +",get_hp) bbs.color(1,36);bbs.move(14,50);bbs.outs("mp +",get_mp) bbs.color() else bbs.move(12,50);bbs.outs("你的金錢似乎不夠喔") end elseif temp == select_item[2] then if gold >= 1000 then gold = gold - 1000 -- 繪出休息中動畫 draw_inn_resting(2) get_hp = mimicat.hpmax - mimicat.hp get_mp = mimicat.mpmax - mimicat.mp mimicat.hp = mimicat.hp + get_hp mimicat.mp = mimicat.hp + get_mp -- hp/mp判斷副程式 sub_check_hp() bbs.sleep(1) bbs.move(12,50);bbs.outs("一覺起來,身體完全回復了") bbs.color(1,32);bbs.move(13,50);bbs.outs("HP +",get_hp) bbs.color(1,36);bbs.move(14,50);bbs.outs("mp +",get_mp) bbs.color() else bbs.move(12,50);bbs.outs("你的金錢似乎不夠喔") end elseif temp == select_item[3] then n = msgbox("叫小姐可能會扣血,還要叫嗎? ",3,44) if n == 1 then if gold >= 2500 then gold = gold - 2500 -- 繪出休息中動畫(模式3叫小姐) n = draw_inn_resting(3) bbs.sleep(1) -- n = 2 表示遇到怪獸 if n == 1 then bbs.color();bbs.move(4,24);bbs.outs("小藥丸可以算你便宜一點") bbs.color();bbs.move(12,50);bbs.outs("你四周被人投來同情的眼神..") bbs.color(1,32);bbs.move(13,50);bbs.outs("HP Full ") bbs.color(1,36);bbs.move(14,50);bbs.outs("MP Full ") mimicat.hp = mimicat.hpmax mimicat.mp = mimicat.mpmax elseif n == 2 then bbs.color();bbs.move(4,24);bbs.outs("..............") bbs.move(12,50);bbs.outs("剛從地獄逃出,你現在濱死狀態") bbs.color(31);bbs.move(13,50);bbs.outs("HP = 1") bbs.color(31);bbs.move(14,50);bbs.outs("MP = 1") mimicat.hp = 1 mimicat.mp = 1 else bbs.color();bbs.move(4,24);bbs.outs("少年耶,很賣力喔") get_hp = int(mimicat.hpmax * 50 / 100) get_mp = int(mimicat.mpmax * 40 / 100) bbs.move(12,50);bbs.outs("雖然很累,但是覺得很爽") bbs.color(1,32);bbs.move(13,50);bbs.outs("HP +",get_hp) bbs.color(1,36);bbs.move(14,50);bbs.outs("MP +",get_mp) end else bbs.move(12,50);bbs.outs("你的金錢不夠") end else bbs.move(12,50);bbs.outs("(我還是自己OGC好了...)") end elseif temp == select_item[4] then end bbs.color() draw_start() bbs.pause() bbs.clear() draw_start() end -- function -- ======================================================================== -- 選擇是否進入商店 store_mode 商店種植 1 武器店 2 道具店 3 inn function select_enter_store() bbs.move(23,79) repeat if bbs.kbhit(1) then char = bbs.getch() -- should we update the mimicat? if bbs.clock() - last_update > move_speed then bbs.move(4 + sell_index ,48);bbs.outs(" ") if char == 'UP' then sell_index = sell_index - 1 elseif char == 'DOWN' then sell_index = sell_index + 1 elseif char == 'LEFT' then sell_mode = 1 sell_index = 1 elseif char == 'RIGHT' then sell_mode = 2 sell_index = 1 end if sell_index < 1 then sell_index = 1 end if sell_index > 9 then sell_index = 9 end bbs.move(4 + sell_index ,48) bbs.outs("→") if sell_mode == 1 then bbs.move(1,45);bbs.outs("┌────────┬──────┐") bbs.move(2,45);bbs.outs("│ 買進 │ 賣 │") bbs.move(3,45);bbs.outs("│ └──────┤") else bbs.move(1,45);bbs.outs("┌──────┬────────┐") bbs.move(2,45);bbs.outs("│ 買 │ 賣出 │") bbs.move(3,45);bbs.outs("├──────┘ │") end bbs.move(24,79) last_update = bbs.clock() end end until (char == 'Q' or char == 'q') bbs.pause() bbs.color() bbs.clear() draw_start() draw_map() -- 繪製地圖上的npc draw_npc_in_map() map_walk() end -- function select_enter_store -- ======================================================================== -- 戰鬥副程式 function fun_fight() local n local n2 -- 玩家跟怪物的戰鬥座標 plocx 玩家 nlocx 怪物 mimicat.plocx = 10 -- 繪出玩家及手上武器 draw_img(mimicat.imgs[4], mimicat.plocx ,mimicat.plocy) draw_mimicat_wp(mimicat.plocx) -- 繪出怪物 & 怪物表情 draw_img(fmob.imgs, fmob.locx, fmob.y) draw_mob_hp_img() -- 繪製戰鬥可行走之範圍 draw_fight_move_range() repeat -- 顯示目前字串 sub_show_msg(bbs.userid.."的行動",4,30) if bbs.kbhit(1) then char = bbs.getch() if bbs.clock() - last_update > 0.1 then if char == 'LEFT' then mimicat.plocx = mimicat.plocx - 2 elseif char == 'RIGHT' then mimicat.plocx = mimicat.plocx + 2 end if mimicat.plocx < 0 then mimicat.plocx = 0 end if mimicat.plocx > movex1 then mimicat.plocx = movex1 end if mimicat.plocx < movex2 then mimicat.plocx = movex2 end if mimicat.plocx + 10 >= fmob.locx then mimicat.plocx = mimicat.plocx - 2 end n = fmob.locx - mimicat.plocx if n < mimicat.act_range + 16 then ar = (mimicat.act_range + magic.atk_range + 18 - n) / n * 100 + mimicat.dex * 0.3 if ar > 100 then ar = 100 end else ar = 0 end bbs.color() bbs.move(3,1);bbs.outs(string.format("命中率:%2.1f",ar),"% ") -- bbs.move(6,1);bbs.print(nlocx," ",plocx," ") -- 繪製mimicat 及手上武器 -- change image index mimicat.img_i = mimicat.img_i + 1 if mimicat.img_i > 2 then mimicat.img_i = 1 end n = mimicat.imgs[4 + mimicat.img_i] draw_img(n , mimicat.plocx ,mimicat.plocy) draw_mimicat_wp(mimicat.plocx) -- 按下A 普通攻擊 S 大絕招 D 防禦 Q 逃跑(必須跑到最後一格) if char == 'ENTER' then elseif char == 'a' or char == 'A' then -- 戰鬥普攻計算副程式 sub_act(ar) -- 輪到對方行動 sub_mob_act() elseif char == 's' or char == 'S' then -- 使用技能 sub_skills_select() elseif char == 'd' or char == 'D' then -- 戰鬥防禦計算副程式 sub_def() -- 輪到對方行動 sub_mob_act() elseif char == 'q' or char == 'Q' then if mimicat.plocx <= 2 then -- 逃跑副程式 sub_quit() -- 如果戰鬥還沒結束,繪出行動範圍 if fmob.hp > 0 then -- 輪到對方行動 sub_mob_act() end else -- 顯示目前字串 sub_show_msg("好像要再退後一點才能逃跑",4,24) end elseif char == 'i' then sub_test() bbs.pause() end bbs.move(24,79) last_update = bbs.clock() end end bbs.move(24,79) until (char == '^Q' or fmob.hp <= 0 or gamefin == 1) bbs.pause() bbs.color() bbs.clear() if gamefin ~= 1 then draw_start() draw_map() -- 繪製地圖上的npc draw_npc_in_map() map_walk() end end -- end function fight -- ======================================================================== -- 使用技術判斷(判斷使用的武器符不符合及選擇副程式動畫) function sub_skills_select() -- bbs.move(1,2) -- bbs.outs(mimicat.wp_sk) -- bbs.pause() -- 補血技能 (武器不限) if mimicat.wp_sk =='healing' then if mimicat.mp >= mimicat.wp_sk_lv * 2 then -- 回復術副程式 & 動畫 sub_sk_heal() -- 輪到對方行動 sub_mob_act() else sub_show_msg("MP不足無法施展回復術",4,30) end elseif mimicat.wp_sk == 'summon train' then -- 召喚宇宙電車(阪急號 if gold >= mimicat.wp_sk_lv * 100 then -- 宇宙列車阪急號 sub_sk_summon_train() -- 輪到對方行動 sub_mob_act() else sub_show_msg("沒錢付車票..",4,30) end elseif mimicat.wp_sk == 'final hit' then -- 無限斬擊 限匕首 if mimicat.wp_type == 'dagger' then -- 無限斬擊副程式 & 動畫 sub_final_hit() -- 輪到對方行動 sub_mob_act() else sub_show_msg("你拿的不是匕首,無法施展",4,30) end elseif mimicat.wp_sk == 'magnum shot' then -- 穿心箭 限弓箭 if mimicat.wp_type == 'bow' then if mimicat.mp >= mimicat.wp_sk_lv * 5 then -- 穿心箭副程式 & 動畫 sub_sk_magnum_shot() -- 輪到對方行動 sub_mob_act() else sub_show_msg("MP不足無法施展穿心箭",4,30) end else sub_show_msg("你拿的不是弓箭,無法施展",4,30) end else end bbs.color() end -- end -- ======================================================================== -- 使用回復術副程式 & 動畫 function sub_sk_heal() local get_hp -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) bbs.color() sub_show_msg("LV "..mimicat.wp_sk_lv.."回復術 (healing)",4,30) mimicat.mp = mimicat.mp - mimicat.wp_sk_lv * 2 bbs.sleep(1.4) get_hp = mimicat.wp_sk_lv * 5 + mimicat.int * 2 + 10 mimicat.hp = mimicat.hp + get_hp -- hp 判斷程式 sub_check_hp() -- 頭上跳出文字 draw_show_get("mp - "..mimicat.wp_sk_lv * 2,31) draw_show_get("hp + "..get_hp,32) bbs.color() draw_start() end -- function sub_sk_heal -- ======================================================================== -- 使用無限斬擊 & 動畫 function sub_final_hit() local n -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) bbs.color() sub_show_msg("LV "..mimicat.wp_sk_lv.."無限斬擊 (final hit)",4,30) -- 主角身體發光,然後隱藏在黑暗 -- 之後瞬移到敵人面前連擊 -- 將主角彩色隱身 draw_hide_mimicat(1) bbs.color() n = fmob.locx - 12 draw_img(mimicat.imgs[4], n , mimicat.plocy) draw_mimicat_wp(n) c_hit = 0 while (c_hit ~= 1) do bbs.sleep(0.3) c_hit = math.random(3 + mimicat.wp_sk_lv) hit_atk = math.random(mimicat.dex * 2 + mimicat.wp_atk) + mimicat.dex - fmob.def if hit_atk <=0 then hit_atk = 1 end fmob.hp = fmob.hp - hit_atk -- 怪物失血表情 draw_mob_hp_img() -- mimicat 匕首發光攻擊 bbs.color(1,30,40);draw_mimicat_wp(n) bbs.sleep(0.3) bbs.color(1,37);draw_mimicat_wp(n) -- 怪物身上閃紅光 bbs.color(31) draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.sleep(0.3) bbs.color() draw_img(fmob.imgs, fmob.locx, fmob.y) temp = bbs.userid.."的攻擊,"..fmob.name.."受到了"..hit_atk.."點傷害" sub_show_msg(temp,4,24) bbs.color();draw_mimicat_wp(n) if fmob.hp <=0 then bbs.color(0,30,40) draw_img(mimicat.imgs[4], n , mimicat.plocy) draw_mimicat_wp(n) bbs.color() draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) -- 怪物死掉 & 計算副程式 sub_mob_die() c_hit = 1 end end if fmob.hp > 0 then bbs.color() bbs.move(mimicat.plocy,n) bbs.rect(4,12) bbs.color() -- 將主角彩色現身 draw_hide_mimicat(2) end end -- end function final hit -- ======================================================================== -- 召喚阪急號 function sub_sk_summon_train() local i local d_atk local temp local t_img = { [1] = { '*[1m ______════_▕▔▔▔▔▏______< ≡≡≡≡<______*[m', '*[m *[0;30;47m◤*[1;33mo*[37m╭──╮▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔╭──╮*[36mo*[0;30;47m◥*[m', '*[m *[30;47m◤ *[1m█*[37m│*[30m██*[37m│________________║________________│*[30m██*[37m│*[30m█ *[0;30;47m◥*[m', '*[1;34m ▕*[37;44m ㊣ │*[30m██*[37m│*[0;34;40m████████*[1;44m║*[0;34;40m████████*[1;37;44m│ │ ㊣ *[34;40m▏*[m', '*[1;34m ▕*[37;44m E404│*[30m██*[37m│ *[34m ║ *[37m │ │E404 ▏*[m', '*[1;34m ▕*[44m■══▃▃▃══════════════════▃▃▃══■*[40m▍*[m', '*[1;34m◢◤*[36m▔*[37m◎=◎=◎▔▔ \==========// ≡≡≡≡▔▔▔▔*[37m◎=◎=◎*[36m▔\*[1;34m◣*[m', }, [2] = { '*[1m ≡≡≡≡<______*[m', '*[1;37;47m▔▔▔▔▔▔▔╭──╮*[36mo*[0;30;47m◥*[m', '*[1;37;47m _____________│*[30m██*[37m│*[30m█ *[0;30;47m◥*[m', '*[0;34;40m███████*[1;37;44m│ │ ㊣ *[1;34;40m▏*[m', '*[1;37;44m │ │E404 ▏*[m', '*[1;34;44m═══════▃▃▃══■*[40m▍*[m', '*[1;36m≡≡≡▔▔▔▔*[37m◎=◎=◎*[36m▔\*[1;34m◣*[m', }, [3] = { '*[1m ______════_▕▔▔▔▔▏', '*[m *[0;30;47m◤*[1;33mo*[37m╭──╮▔▔▔▔▔▔▔▔▔*[m', '*[m *[30;47m◤ *[1m█│*[30m██*[37m│________________║*[m', '*[1;34m ▕*[37;44m ㊣ │*[30m██*[37m│*[0;34;40m█████████*[m', '*[1;34m ▕*[37;44m E404│*[30m██*[37m│ *[34m ║*[m', '*[1;34m ▕*[44m■══▃▃▃═════════ *[m', '*[1;34m◢◤*[36m▔*[37m◎=◎=◎▔▔ \==========// ≡*[m', }, [4] = { '*[1m ______═', '*[m *[0;30;47m◤*[1;33mo*[37m╭──╮*[m', '*[m *[30;47m◤ *[1m█│*[30m██*[37m│*[m', '*[1;34m ▕*[37;44m ㊣ │*[30m██*[37m│*[m', '*[1;34m ▕*[37;44m E404│*[30m██*[37m│*[m', '*[1;34m ▕*[44m■══▃▃▃ *[m', '*[1;34m◢◤*[36m▔*[37m◎=◎=◎▔*[m', }, } -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) bbs.color() sub_show_msg("LV "..mimicat.wp_sk_lv.." 阪急號 宇宙の電車 ",4,26) n = mimicat.wp_sk_lv * 100 draw_show_get("-"..n.." gold",31) gold = gold - mimicat.wp_sk_lv * 100 draw_start() -- 將主角彩色隱身 draw_hide_mimicat(1) sub_show_msg("噹噹噹噹..........",4,30) -- 阪急號現身 以1/20的機會碾過兩次 -- d_atk是雙重碾過的旗標 d_atk = math.random(20) if bbs.userid == 'guest' then d_atk = math.random(2) end if d_atk == 1 then n1 = 2 else n1 = 1 end hit_atk = 0 n = 0 for i = 1 , n1 do bbs.sleep(2.5) draw_img(t_img[2], 0 , 7) bbs.sleep(0.1) bbs.move(7,0);bbs.rect(7,30) draw_img(t_img[1], 0 , 7) bbs.sleep(0.1) bbs.move(7,0);bbs.rect(7,16) draw_img(t_img[1], 16 , 7) bbs.sleep(0.1) bbs.move(7,0);bbs.rect(7,16) bbs.move(7,0);bbs.rect(7,54) draw_img(t_img[3], 45 , 7) bbs.sleep(0.1) bbs.move(7,0);bbs.rect(7,62) draw_img(t_img[4], 62 , 7) bbs.sleep(0.1) bbs.color() bbs.move(7,0);bbs.rect(7,80) n = n + math.random(100) + mimicat.wp_sk_lv * 150 hit_atk = hit_atk + n fmob.hp = fmob.hp - n -- 怪物現身 (被擊退到最後面) fmob.locx = 62 bbs.color() draw_img(fmob.imgs, fmob.locx, fmob.y) -- 怪物失血表情 draw_mob_hp_img() end -- 阪急號駛過 -- 怪物失血表情 draw_mob_hp_img() -- 主角現身 draw_hide_mimicat(2) bbs.sleep(1) draw_img(fmob.imgs, fmob.locx, fmob.y) if d_atk == 1 then temp = "被阪急號跟新東日號碾過,"..fmob.name.."受到了"..hit_atk.."點傷害" else temp = "被阪急號碾過,"..fmob.name.."受到了"..hit_atk.."點傷害" end sub_show_msg(temp,4,20) bbs.sleep(1.4) if fmob.hp <=0 then -- 怪物死掉 & 計算副程式 sub_mob_die() end end -- end function summon train -- ======================================================================== -- 特技 穿心箭 function sub_sk_magnum_shot() -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) bbs.color() sub_show_msg("LV "..mimicat.wp_sk_lv.." 穿心箭 (magnum shot) ",4,26) n = mimicat.wp_sk_lv * 5 draw_show_get("-"..n.." mp",31) mimicat.mp = mimicat.mp - mimicat.wp_sk_lv * 5 draw_start() bbs.color(1,36) for i = 1 , 100 do bbs.move(mimicat.plocy - 1,mimicat.plocx + 4) bbs.outs(i,"% ") bbs.sleep(0.01) bbs.move(23,79) end bbs.color();draw_mimicat_wp(mimicat.plocx) hit_atk = math.random(mimicat.dex * 2 + mimicat.wp_atk) + mimicat.dex hit_atk = hit_atk * 2 + mimicat.wp_sk_lv * 25 fmob.hp = fmob.hp - hit_atk -- 穿心箭動畫副程式 sub_show_light_bolt(3) bbs.move(mimicat.plocy - 1,mimicat.plocx + 4) bbs.outs(" ") -- 怪物被擊退 fmov = fmob.locx if fmob.locx < 62 then fmov = fmob.locx + math.random(62 - fmob.locx) end for i = fmob.locx , fmov do fmob.locx = i bbs.color() draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.sleep(0.1) end -- 怪物失血表情 draw_mob_hp_img() bbs.color() draw_img(fmob.imgs, fmob.locx, fmob.y) temp = bbs.userid.."的攻擊,"..fmob.name.."受到了"..hit_atk.."點傷害" sub_show_msg(temp,4,24) bbs.sleep(1.5) if fmob.hp <=0 then -- 怪物死掉 & 計算副程式 sub_mob_die() end end -- end function -- ======================================================================== -- 特技 旋風斧,往前打3 + wp_sk 格 function sub_sk_whirlwind() end -- end function -- ======================================================================== -- 圓桌武士相救 function sub_act_a() end -- ======================================================================== -- 普通攻擊計算副程式 & 動畫處理 (傳入值,命中率) function sub_act(ar) local n local n1 local n2 -- 繪出mimicat站立姿 draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) -- 顯示目前字串 sub_show_msg("普通攻擊",4,30) bbs.sleep(1) if ar == 0 then -- 顯示目前字串 sub_show_msg("太遠了,打不到",4,30) bbs.sleep(1) else -- 近武類 劍 斧 鎚 if mimicat.wp_type == 'sword' then hit_atk = math.random(mimicat.str + mimicat.wp_atk) + mimicat.str * 2 elseif mimicat.wp_type == 'axe' then hit_atk = math.random(mimicat.str + mimicat.wp_atk * 3) + mimicat.str elseif mimicat.wp_type == 'hammer' then -- 槌類武器 elseif mimicat.wp_type == 'bow' then -- 弓箭類武器 hit_atk = math.random(mimicat.dex * 2 + mimicat.wp_atk) + mimicat.dex -- 光箭動畫副程式 -- draw_atk_show_light_bolt(2) sub_show_light_bolt(2) elseif mimicat.wp_type == 'dagger' then -- 匕首類武器 hit_atk = math.random(mimicat.dex * 2 + mimicat.wp_atk) + mimicat.dex -- mimicat 匕首發光攻擊 bbs.color(1,30,40);draw_mimicat_wp(mimicat.plocx) bbs.sleep(0.2) bbs.color(1,37);draw_mimicat_wp(mimicat.plocx) bbs.sleep(0.2) bbs.color();draw_mimicat_wp(mimicat.plocx) elseif mimicat.wp_type == 'staff' then -- 法杖類武器 if mimicat.mp >= 10 then mimicat.mp = mimicat.mp - 10 -- 光箭動畫副程式 -- draw_atk_show_light_bolt(1) sub_show_light_bolt(1) hit_atk = mimicat.int * 3 + 10 + mimicat.wp_atk else -- 顯示目前字串 sub_show_msg("MP不足無法施展",4,30) bbs.sleep(1) end end -- 怪物防禦減傷 hit_atk = hit_atk - fmob.def if hit_atk <= 0 then hit_atk = 0 end -- 判斷有沒有命中 n2 = math.random(ar) if n2 < 100 - ar then hit_atk = 0 end -- 判斷有沒有暴擊 cri = math.random(11 - mimicat.luk) if cri <= 1 then get_cri = 1 hit_atk = hit_atk + mimicat.wp_atk * 2 + 5 else -- 匕首擁有33%暴擊率 if mimicat.wp_type == 'dagger' then cri = math.random(3) if cri == 1 then get_cri =1 end end get_cri = 0 end -- 擊中怪物,怪物閃紅光 if hit_atk > 1 then -- 擊中怪物,怪物閃紅光 if get_cri == 1 then bbs.color(1,31) else bbs.color(31) end -- 繪出怪物立姿 draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.sleep(0.3) bbs.color() draw_img(fmob.imgs, fmob.locx, fmob.y) -- 顯示目前字串 temp = bbs.userid.."的攻擊,"..fmob.name.."受到了"..hit_atk.."點傷害" sub_show_msg(temp,4,24) bbs.sleep(1) -- 扣血 fmob.hp = fmob.hp - hit_atk - magic.dmg draw_mob_hp_img() -- 吸血吸魔 mimicat.hp = mimicat.hp + math.floor((hit_atk + magic.dmg) * (magic.ah / 100)) mimicat.mp = mimicat.mp + math.floor((hit_atk + magic.dmg) * (magic.am / 100)) -- hp 判斷程式 sub_check_hp() -- 繪出狀態 draw_start() -- 如果怪物死亡 if fmob.hp <=0 then -- 怪物死掉 & 計算副程式 sub_mob_die() end else -- 沒擊中怪物,頭上冒出miss for i = 1 , 3 do draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.color(1,31);bbs.move(7 - i,fmob.locx + 4);bbs.outs("miss") bbs.sleep(0.3) bbs.color();bbs.move(7 - i,fmob.locx + 4);bbs.outs(" ") end draw_img(fmob.imgs, fmob.locx, fmob.y) -- 顯示目前字串 sub_show_msg(bbs.userid.."的攻擊,被"..fmob.name.."閃了過去",4,24) bbs.sleep(1) end end end -- end function -- ======================================================================== -- 防禦計算副程式 & 動畫處理 function sub_def() -- 繪出mimicat站立姿 draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) -- 顯示目前字串 sub_show_msg("技能 (Defence) 回復少量HP&MP",4,24) bbs.sleep(1) -- 頭上跳出文字 draw_show_get("hp + "..mimicat.con * 2,32) draw_show_get("mp + "..mimicat.int * 2,36) mimicat.hp = mimicat.hp + mimicat.con * 2 mimicat.mp = mimicat.mp + mimicat.int * 2 -- 使用防禦技能旗標 use_def = 2 if mimicat.hp > mimicat.hpmax then mimicat.hp = mimicat.hpmax end if mimicat.mp > mimicat.mpmax then mimicat.mp = mimicat.mpmax end draw_start() end -- end function sub_def -- ======================================================================== -- 怪物死掉計算副程式 & 動畫處理 function sub_mob_die() local get_exp local img = {[1]={' ╲│╱ ', ' ─O─ ', ' /│╲ ', }, [2]={' ︱ ', ' -‧-', ' ︱ ', }, [3]={' ╲ ╱ ', ' ‧ ', ' / ╲ ', }, [4]={' ‧ ‧', ' + ', ' ‧ ‧', }, } fmob.hp = 0 -- 清除怪物 & mimicat bbs.move(fmob.y,fmob.locx) bbs.rect(8,80 - fmob.locx) -- 繪製怪物表情 draw_mob_hp_img() for i = 1 , 4 do if i == 1 then bbs.color(1,33,40) end if i == 2 then bbs.color(1,37,40) end if i == 3 then bbs.color(0,33,40) end if i == 4 then bbs.color(1,30,40) end draw_img(img[i], fmob.locx + 4, fmob.y + 4) -- draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.sleep(0.3) end bbs.color() bbs.move(fmob.y,fmob.locx) bbs.rect(8,80 - fmob.locx) bbs.move(23,79) bbs.sleep(1.4) -- 清除mimicat戰鬥姿 bbs.color(0,30,40) draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) bbs.color() -- 清除將mimicat回復站立姿 draw_img(mimicat.imgs[3], mimicat.plocx + 2 , mimicat.plocy) -- 顯示目前字串 get_exp = fmob.exp + math.floor(magic.addexp * fmob.exp / 100) sub_show_msg("戰鬥勝利,獲得"..get_exp.."點經驗值",4,28) -- 頭上跳出文字 draw_show_get("exp +"..get_exp,36) -- 打倒怪物獲得金幣 n = math.random(4) if n == 1 then n = math.random(fmob.exp) * mimicat.luk gold = gold + n sub_show_msg("戰鬥勝利,獲得"..n.."金幣",4,28) -- 頭上跳出文字 draw_show_get("Gold +"..n,33) bbs.sleep(1) end bbs.sleep(1) mimicat.exp = mimicat.exp + get_exp -- 升級 while (mimicat.exp >= mimicat.lv^2*100) do mimicat.exp = mimicat.exp - mimicat.lv^2*100 mimicat.lv = mimicat.lv + 1 mimicat.hpmax = (mimicat.con + magic.con )* 30 + mimicat.lv * 10 + 10 mimicat.mpmax = (mimicat.int + magic.int )* 15 + mimicat.lv * 10 + 20 mimicat.hp = mimicat.hpmax mimicat.mp = mimicat.mpmax mimicat.ap = mimicat.ap + 1 -- 顯示目前字串 sub_show_msg("等級上升為 "..mimicat.lv,4,28) -- 頭上跳出文字 draw_show_get("Level UP!",33) bbs.sleep(2) -- 顯示狀態欄 draw_start() end end -- end function sub_mob_die -- ======================================================================== -- 戰鬥逃跑計算副程式 & 動畫處理 function sub_quit() -- 清除mimicat站立姿 bbs.color(0,37,40) draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) -- 顯示目前字串 sub_show_msg("逃跑中準備",4,30) for i = 1 , 10 do draw_img(mimicat.imgs[6 + mimicat.img_i], mimicat.plocx , mimicat.plocy) draw_img(mimicat.imgs[6 + mimicat.img_i], mimicat.plocx , mimicat.plocy) -- change image index mimicat.img_i = mimicat.img_i + 1 if mimicat.img_i > 2 then mimicat.img_i = 1 end bbs.sleep(0.3) end get_quit = math.random(10) if get_quit >= 6 then bbs.color(0,37,40) draw_img(mimicat.imgs[6 + mimicat.img_i], mimicat.plocx , mimicat.plocy) bbs.color() n = mimicat.plocy - 1 bbs.move(n + 0,0);bbs.outs(" ╭╮ ") bbs.move(n + 1,0);bbs.outs(" ───╯ ") bbs.move(n + 2,0);bbs.outs(" ─── ") bbs.move(n + 3,0);bbs.outs(" ───╮ ") bbs.move(n + 4,0);bbs.outs(" ╰╯ ") fmob.hp = 0 -- 顯示目前字串 sub_show_msg("bye bye (▔▽▔)\\~/",4,30) -- 怪物表情變更生氣 bbs.color(1,31);bbs.move(3,67) bbs.outs(" !!(‵□′#)") bbs.color() else -- 顯示目前字串 sub_show_msg("逃跑失敗(⊙⊙)",4,30) end bbs.sleep(1) end -- end function sub_mob_act -- ======================================================================== -- 戰鬥怪物攻擊計算副程式 & 動畫處理 function sub_mob_act() local i if fmob.hp <= 0 then return -1 end -- 顯示目前字串 sub_show_msg(fmob.name.."的行動",4,30) -- 顯示怪物可移動範圍 draw_mob_move_range() -- bbs.outs(fmob.locx - mimicat.plocx + 10) bbs.sleep(1.5) -- 如果距離大於攻擊範圍,移動前進 if fmob.locx - mimicat.plocx + 10 > fmob.atk_range * 2 + 20 then -- 顯示目前字串 sub_show_msg(fmob.name.."的移動..",4,30) for i= 1 , fmob.mov_range do bbs.color(0,30,40) draw_img(fmob.imgs, fmob.locx, fmob.y) fmob.locx = fmob.locx - 2 if mimicat.plocx + 10 >= fmob.locx then fmob.locx = fmob.locx + 2 end bbs.color() draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.sleep(0.3) end bbs.color() -- draw_img(fmob.imgs, fmob.locx, fmob.y) -- 如果移動到範圍內,進行普通攻擊 if fmob.locx - mimicat.plocx + 10 <= fmob.atk_range * 2 + 20 then -- 顯示目前字串 sub_show_msg(fmob.name.."的攻擊..",4,30) bbs.sleep(1) -- 普通攻擊 fun_mob_atk() end else -- 普通攻擊 fun_mob_atk() end -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) -- 如果戰鬥還沒結束,繪出行動範圍 if fmob.hp > 0 then draw_fight_move_range() end end -- end function sub_mob_act -- ======================================================================== -- npc 怪物攻擊副程式 function fun_mob_atk() local msg hit_atk = math.random(fmob.atk) + fmob.atk hit_atk = hit_atk - math.random(mimicat.def * 4) if hit_atk <= 1 then hit_atk = 1 end -- 假如有使用防禦技能 if mimicat.use_def > 0 then hit_atk = hit_atk - (mimicat.def * 3) - math.random(50) mimicat.use_def = mimicat.use_def - 1 if mimicat.use_def < 0 then mimicat.use_def = 0 end if hit_atk <= 1 then hit_atk = 1 end msg = fmob.name.."的攻擊,被你格擋下來,你受到"..hit_atk.."點傷害" else msg = fmob.name.."的攻擊,對你造成了"..hit_atk.."點傷害" end cri = math.random(10) if cri == 1 then hit_atk = hit_atk * 2 end -- 顯示目前字串 sub_show_msg(msg,4,24) -- 繪出mimicat站立姿 被擊中閃紅光 if cri == 1 then bbs.color(1,31) else bbs.color(31) end draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) bbs.sleep(0.4) bbs.color() draw_img(mimicat.imgs[4], mimicat.plocx , mimicat.plocy) draw_mimicat_wp(mimicat.plocx) mimicat.hp = mimicat.hp - hit_atk if mimicat.hp <=0 then mimicat.hp = 0 -- 畫出狀態欄 draw_start() -- 繪出game over draw_img(game_imgs[1], 15 , 9) gamefin = 1 bbs.pause() end -- 畫出狀態欄 draw_start() end -- end fun_mob_atk -- ======================================================================== -- 測試用function function sub_test() local i local tc local temp = "" local temp2 = "" local local_img = { [0] = { ' ', ' _ ▂▄▂ ▁|MASKED RIDER', ' ▂▄—─ │ ', ' /  ̄| ▅▅▆ ▅▆ ▅▅ ▅▆ ▅▅ ▆', ' ▏ ︳ ◢◤▄ ◢_▋ ▌ ◢_▋◢◤ ◢◤◢', ' ▎ ︱ ◢ ▅◤◢◤ ▋ ▊ ◢◤ ▋█▅ ◢◤ ◣', ' / / ▄▊ ▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃', ' / ', ' RIDER FORM', ' ', ' .', ' ', ' \\▂▅ ▅▂\ 「人と人との信賴を利用するワーム、', ' ˍ ──╴ / ', ' ◢◤ ◥◣── おれは絕對に許\さない!!」', ' ◥◣ ', ' ▇▅▃ █▎ ∕ ', '▄▄▃ ▅▃▁', '███◤ ', '◥▇▆▃▁ ˍ▂ ', ' ▇▆▆▇ ▇▇◣ ', ' ◥█▎ ZEPHYR', ' ◢◤ ̄ ▁▃  ̄ ̄ ̄ ̄ ̄ ̄ ̄', ' ', }, [1] = {' ', ' ', ' ', ' ', ' ', ' ', ' ', }, [2] = {' ',' ', ' ', ' ', '◣◣█◢◢ ', }, [3] = { ' *[1;34m↑︹↑*[m ', ' *[1;34m(*[1;32;44m●*[1;37;44mΞ*[1;32m●*[0;1;34m)*[m ', ' /*[1;33m▽*[1;36;44m==*[0;1;33m▽*[m\\ ', ' *[1;34m◤ ◥*[m ', }, } -- 清除地板的藍線 bbs.color(47);bbs.move(14,0);bbs.print(cline) sub_show_msg("假面騎士GATACK RIDER FORM",4,24) -- 怪物表情變更驚嚇 bbs.color(1,33);bbs.move(3,67) bbs.outs(" !!(⊙□⊙;)") bbs.color() -- 怪物,頭上冒出!!!! for i = 1 , 3 do draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.color(1,37);bbs.move(7 - i,fmob.locx + 4);bbs.outs("!!!!") bbs.sleep(0.3) bbs.color();bbs.move(7 - i,fmob.locx + 4);bbs.outs(" ") end draw_img(fmob.imgs, fmob.locx, fmob.y) sub_show_msg("假面騎士GATACK RIDER FORM",4,24) -- 怪物被嚇退 fmov = fmob.locx if fmob.locx < 40 then fmov = fmob.locx + 40 - fmob.locx end for i = fmob.locx , fmov do fmob.locx = i bbs.color() draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.sleep(0.1) end -- 主角隱身 draw_hide_mimicat(1) for i = 15 , 1 , -1 do draw_img_d(local_img[0], 0, i - 3 ,4,13) bbs.sleep(0.1) end -- 強調作者id bbs.sleep(2) bbs.color(32,47);bbs.move(13,52) bbs.outs(" ascii by 巴哈 SRXPOWERED ") bbs.sleep(1.5) -- 清除戰鬥畫面 bbs.color();bbs.move(4,0);bbs.rect(10,80) -- 繪出怪物立姿 draw_img(fmob.imgs, fmob.locx, fmob.y) -- draw_img(game_imgs[3], 0, 0) -- 繪出從天而降的光影 for i = 1 , 13 do draw_img_d(local_img[1], 11, i - 3 ,4,13) bbs.sleep(0.05) end draw_img(local_img[2], 11, 9) bbs.sleep(0.1) draw_img(local_img[3], 11, 10) bbs.sleep(1) bbs.move(12,11) bbs.outs(ConvertANSI(" <*[1;33m▽*[1;36;44m==*[0;1;33m▽*[m▔ ")) bbs.move(23,79) bbs.sleep(1) -- 手掌發光 math.randomseed(bbs.clock()) for i = 1 , 30 do tc = math.random(7) + 30 bbs.color(0,1,tc) bbs.move(12,20);bbs.outs("▔") bbs.move(23,79) bbs.sleep(0.05) end bbs.color() bbs.move(12,20);bbs.outs("▔");bbs.move(23,79) -- 發射雷射光 for i = 1 , 29 do temp = temp .."▔" temp2 = temp2 .." " end bbs.color(1,33) bbs.move(12,22);bbs.outs(temp);bbs.move(23,79) -- 怪物被擊中 閃紅光 bbs.color(31);draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.color() bbs.sleep(0.5) bbs.color() bbs.move(12,22);bbs.outs(temp2);bbs.move(23,79) -- 繪出怪物立姿 draw_img(fmob.imgs, fmob.locx, fmob.y) bbs.sleep(1) temp = "假面超人的攻擊,"..fmob.name.."受到了"..fmob.hp.."點傷害" sub_show_msg(temp,4,24) -- 繪出從天而降的光影 for i = 13 , 1 , -1 do draw_img_d(local_img[1], 11, i - 3 ,4,13) bbs.sleep(0.05) end -- 主角現身 draw_hide_mimicat(2) fmob.hp = 0 -- 怪物死亡計算副程式 sub_mob_die() end -- end test function -- ======================================================================== -- npc 說話副程式 function fun_npc_talk(npc_index) bbs.move(0,0) -- bbs.color(46) bbs.rect(6,80) bbs.color() drawBoundary(0, 18, 0, 7); drawBoundary(18, 80, 0, 7); draw_img(npc.npc[npc_index].img[1], 5, 1) bbs.move(5,5) bbs.outs(npc.npc[npc_index].name) -- 將對話顯示在對話匡 for i = 1 , npc.npc[npc_index].talkcount do bbs.move(1,20) bbs.rect(5,58) draw_img(npc.npc[npc_index].talk[i], 20, 1) bbs.pause() end if npc.npc[npc_index].type == 'mob' then -- 進入戰鬥模式 fmob.index = npc.npc[npc_index].mob draw_fight() fun_fight() end bbs.color() bbs.clear() bbs.kbreset() draw_start() draw_map() -- 繪製地圖上的npc draw_npc_in_map() map_walk() end -- end function npc talk -- ======================================================================== -- last update time last_update = bbs.clock() -- 移動速度 move_speed = 0.2 -- 戰鬥方針 1 手動戰鬥 2 戰鬥至上 3 安全第一 4 逃跑 fight_mode = 1 -- 金錢 gold = 5000 -- 判斷hp/mp最大值 sub_check_hp() mimicat.hp = mimicat.hpmax mimicat.mp = mimicat.mpmax -- ========================================================================= -- 以下為主程式 -- 遊戲標題畫面 -- sub_start_select() -- gamefin = 1 遊戲結束旗標 if gamefin ~= 1 then bbs.clear() draw_start() draw_map() -- 繪製地圖上的npc draw_npc_in_map() end n = math.random(3) if n == 1 then mimicat.wp_type = "dagger" mimicat.wp_atk = 30 mimicat.wp_sk = "final hit" mimicat.wp_sk_lv = 5 mimicat.move_range = 10 mimicat.act_range = 5 elseif n == 2 then mimicat.wp_type = "staff" mimicat.wp_atk = 50 mimicat.wp_sk = "summon train" mimicat.wp_sk_lv = 5 mimicat.move_range = 4 mimicat.act_range = 45 elseif n == 3 then mimicat.wp_type = "bow" mimicat.wp_atk = 50 mimicat.wp_sk = "magnum shot" mimicat.wp_sk_lv = 5 mimicat.move_range = 4 mimicat.act_range = 45 end repeat map_walk() until (gamefin == 1) bbs.color() --#BBSLUA ※ 發信站: 批踢踢兔(ptt2.cc) ◆ From: 122.122.2.41
ForSinSoKing:超棒的啊!!!!!!!!!!推 10/17 05:51
Bachi:大推xD推 10/17 08:30
mike1026915:轉錄至看板 mike1026915 10/17 10:57 mike1026915:轉錄至看板 mike1026915 10/17 10:58
cockroach00:酷斃了!期待完成的那天!!推 10/17 11:27
fli79:大推!期待完成!推 10/17 11:53
k860326:道具鈕無用推 10/17 14:51
k860326:是還沒設計完成嗎?推 10/17 14:51
是的,道具技能及自動戰鬥尚未實裝 目前主要進度在補上戰鬥畫面的處理
penguin7272:推一個推 10/17 15:04
chhsiao:轉錄至看板 RhythmOfLife 10/17 15:34
Kinra:座標的X軸從兩位數變一位數的時候Y軸會少覆蓋一位掉XD推 10/17 17:10
感謝,已修正
sfwejfish:除了上面剛剛好像還發現一個 不過升到LV2出來就忘了推 10/17 23:08
tanshun:自動戰鬥沒有自動戰鬥 @ @推 10/18 00:41
realkillman:做得好! 註解很多 而且有用我的code XD推 10/18 08:59
k860326:好棒!!推 10/18 11:18
k860326:跑為上策有兩個 第二個下來變成自動戰鬥推 10/18 11:19
k860326:再也沒有手動了~~推 10/18 11:19
感謝,以修正
k860326:防禦hp並不會實加??推 10/18 17:25
k860326:怪物表情系統是不是還沒實裝呀@@?推 10/18 17:27
感謝以修正,以上兩個都實裝了,只是忘記補上顯示出來的副程式
k860326:建議無限斬擊可改成每打一下就扣X魔力推 10/18 17:48
k860326:武器是隨機的嗎 @@?推 10/18 17:50
目前是會隨機拿杖或是匕首,拿杖的特殊技是阪急號,拿匕首的特殊技是無限斬擊 之後會先為每一種武器做一種特殊技,至於平衡度會再做調整 無限斬目前的考慮是不扣任何能力,因為有可能砍一下也有可能一直把怪砍到死
chhsiao:特快車如果攻擊史萊姆達8xx時, 右上的臉不會變成瀕死推 10/18 19:54
感謝,以修正
Kinra:還是要說一下 這是目前為止介面等等的最完整的作品! GJ!!推 10/18 21:27
k860326:史萊姆出現了!!推 10/19 12:48
ilohoo:弓箭也出現了,為什麼按d會有火星人推 10/20 17:24
VElysian:轉錄至某隱形看板 10/20 18:36
k860326:加油~期待有劇情的一天(?)推 10/21 16:22
sfwejfish:超過10秒 變宅XDDDDDDD推 10/21 18:35
protendy:mp不足會出失敗...但還是會攻擊成功....推 10/22 01:41
acersh:轉錄至某隱形看板 10/22 14:40
mTwTm:推!!!!!!!!!!!!!! 話說又是踢牙老奶奶 XDD推 10/22 15:02
XZXie:真是太強大了 XDDDD推 10/23 11:58
k860326:可以先設計看看補魔補血的藥水嗎@@?推 10/23 18:04
k860326:看了一下程式碼.....只有貴到爆道具店推 10/23 19:26
k860326:所以7-11也會變成貴到爆道具店 Orz推 10/23 19:26
yoway945:蠻好玩的!!推 10/25 01:38
EmiruKitty:轉錄至看板 KittySpot 10/26 17:25
EmiruKitty:把CODE改一下把千本針叫出來打了XD推 10/26 17:33
EmiruKitty:主角一次不能升兩級以上and攻擊力無法升級XD推 10/26 18:15
rock77606:好酷!!推 10/27 01:47
rock77606:轉錄至某隱形看板 10/27 01:48
zack7301428:借轉推 10/30 00:40
zack7301428:轉錄至某隱形看板 10/30 00:41 zack7301428:轉錄至某隱形看板 10/30 00:43 unumbra:轉錄至某隱形看板 10/31 22:40
hevark:好酷推 11/01 12:22
newyellow:有威,推一個推 11/04 15:04
teee:強推 11/04 19:45
k860326:彩色!!推 11/05 17:47
k860326:無限斬擊不會扣魔推 11/07 18:35
k860326:喔..抱歉 突然忘記上面有問到推 11/07 18:36
k860326:史萊姆王不理我 Orz推 11/07 18:38
Kinten:假面騎士......推 11/09 23:32
StubbornLin:喔喔! 太強了 XD 我打嘴砲那麼久說想做推 11/13 15:54
StubbornLin:結果還是沒做 XD 真強者做出來了 酷斃了 XDD推 11/13 15:54
StubbornLin:話說旅館的小姐為啥不能叫 囧推 11/13 15:54
StubbornLin:我要小姐阿 Q_Q推 11/13 15:55
果然大家還是期望的是這個..... 引用了Frozenmouse大大的選單 <(m__m)> 先做了旅館的功能
Bachi:雖然猜到還是笑翻了xDDD推 11/18 18:57
k860326:小姐好XXX....推 11/19 13:52
mTwTm:推 XD"推 11/19 14:00
mTwTm:看程式碼才發現隨機 我第一次是遇到ㄋㄐ囧 之後再也沒遇到推 11/19 15:49
DInYa:好棒>////<...小姐那邊的字有些會出現亂碼喔+w+推 11/29 16:54
k860326:小姐不會補血= =推 12/06 19:39
Frozenmouse:上面是控制碼嗎XDDDDD推 12/10 18:30
Frozenmouse:推小姐跟瀕死狀態XD推 12/10 18:34
k860326:還有為什麼叫我們按alt+F4啊= =推 12/12 14:08