From 9bcc67a067ece01e00ea45a63cb49b0d655bec7b Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sun, 19 Feb 2012 22:50:54 +0000 Subject: [PATCH] better git-svn-id: http://svn.net-core.org/repos/t-engine4@4888 51575b47-30f0-44d4-a5cc-537603b46e54 --- .../default/engine/dialogs/ShowQuests.lua | 2 +- game/modules/tome/class/uiset/Minimalist.lua | 92 ++++++++++-------- .../data/general/objects/world-artifacts.lua | 6 +- .../artifact/staff_of_arcane_supremacy.png | Bin 0 -> 5277 bytes .../wizard_hat_of_arcane_understanding.png | Bin 0 -> 6756 bytes .../tome/data/gfx/ui/padlock_closed.png | Bin 2655 -> 2543 bytes .../modules/tome/data/gfx/ui/padlock_open.png | Bin 2563 -> 2601 bytes 7 files changed, 58 insertions(+), 42 deletions(-) create mode 100644 game/modules/tome/data/gfx/shockbolt/object/artifact/staff_of_arcane_supremacy.png create mode 100644 game/modules/tome/data/gfx/shockbolt/object/artifact/wizard_hat_of_arcane_understanding.png diff --git a/game/engines/default/engine/dialogs/ShowQuests.lua b/game/engines/default/engine/dialogs/ShowQuests.lua index 6a77a54625..fb27682796 100644 --- a/game/engines/default/engine/dialogs/ShowQuests.lua +++ b/game/engines/default/engine/dialogs/ShowQuests.lua @@ -27,7 +27,7 @@ module(..., package.seeall, class.inherit(Dialog)) function _M:init(actor) self.actor = actor - Dialog.init(self, "Quest Log for "..actor.name, game.w, game.h) + Dialog.init(self, "Quest Log for "..actor.name, game.w * 0.8, game.h * 0.8) self.c_desc = TextzoneList.new{width=math.floor(self.iw / 2 - 10), height=self.ih} diff --git a/game/modules/tome/class/uiset/Minimalist.lua b/game/modules/tome/class/uiset/Minimalist.lua index d6af7c5470..1bb7cb4438 100644 --- a/game/modules/tome/class/uiset/Minimalist.lua +++ b/game/modules/tome/class/uiset/Minimalist.lua @@ -183,7 +183,7 @@ function _M:init() gamelog = {x=function(self) return self.logdisplay.w - move_handle[6] end, y=function(self) return self.logdisplay.h - move_handle[6] end, name="Game Log"}, chatlog = {x=function(self) return profile.chat.w - move_handle[6] end, y=function(self) return profile.chat.h - move_handle[6] end, name="Online Chat Log"}, hotkeys = {x=function(self) return self.places.hotkeys.w - move_handle[6] end, y=function(self) return self.places.hotkeys.h - move_handle[6] end, name="Hotkeys"}, - mainicons = {x=tb_bg[6] * 5 - move_handle[6], y=0, name="Game Actions"}, + mainicons = {x=0, y=0, name="Game Actions"}, } local w, h = core.display.size() @@ -198,10 +198,10 @@ function _M:init() minimap = {x=w - 239, y=0, scale=1, a=1}, buffs = {x=w - 40, y=200, scale=1, a=1}, party = {x=pf_bg[6], y=0, scale=1, a=1}, - gamelog = {x=0, y=hup - 200, w=math.floor(w/2), h=200, scale=1, a=1}, - chatlog = {x=math.floor(w/2), y=hup - 200, w=math.floor(w/2), h=200, scale=1, a=1}, - mainicons = {x=w - (tb_bg[6] * 5 - move_handle[6]), y=hup, scale=1, a=1}, - hotkeys = {x=30, y=h - th, w=w-60, h=th, scale=1, a=1}, + gamelog = {x=0, y=hup - 210, w=math.floor(w/2), h=200, scale=1, a=1}, + chatlog = {x=math.floor(w/2), y=hup - 210, w=math.floor(w/2), h=200, scale=1, a=1}, + mainicons = {x=w - tb_bg[6] * 0.5, y=h - tb_bg[7] * 5 * 0.5 - 5, scale=1, a=1}, + hotkeys = {x=10, y=h - th, w=w-60, h=th, scale=1, a=1}, } table.merge(self.places, config.settings.tome.uiset_minimalist and config.settings.tome.uiset_minimalist.places or {}, true) @@ -1504,75 +1504,88 @@ function _M:displayHotkeys(scale, bx, by) self:computePadding("hotkeys", bx, by, bx + hkeys.w * scale, by + hkeys.h * scale) end +function _M:toolbarOrientStep(orient, bx, by, scale, x, y, w, h) + if orient == "down" or orient == "up" then + x = x + w + if (x + w) * scale >= game.w - bx then x = 0 y = y + h end + elseif orient == "right" or orient == "left" then + y = y + h + if (y + h) * scale >= self.map_h_stop - by then y = 0 x = x + w end + end + return x, y +end + function _M:displayToolbar(scale, bx, by) -- Toolbar icons - local x = 0 + local x, y = 0, 0 + local orient = self.sizes.mainicons and self.sizes.mainicons.orient or "down" - tb_bg[1]:toScreenFull (x, - tb_bg[7], tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) - tb_inven[1]:toScreenFull (x, - tb_inven[7], tb_inven[6], tb_inven[7], tb_inven[2], tb_inven[3], self.tbbuttons.inven, self.tbbuttons.inven, self.tbbuttons.inven, 1) - if not game.mouse:updateZone("tb_inven", bx + x * scale, by - tb_inven[7]*scale, tb_inven[6], tb_inven[7], nil, scale) then + tb_bg[1]:toScreenFull (x, y, tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) + tb_inven[1]:toScreenFull (x, y, tb_inven[6], tb_inven[7], tb_inven[2], tb_inven[3], self.tbbuttons.inven, self.tbbuttons.inven, self.tbbuttons.inven, 1) + if not game.mouse:updateZone("tb_inven", bx + x * scale, by +y*scale, tb_inven[6], tb_inven[7], nil, scale) then game.mouse:unregisterZone("tb_inven") local desc_fct = function(button, mx, my, xrel, yrel, bx, by, event) if event == "out" then self.tbbuttons.inven = 0.6 return else self.tbbuttons.inven = 1 end game.tooltip_x, game.tooltip_y = 1, 1; game:tooltipDisplayAtMap(game.w, game.h, "Left mouse to show inventory") if button == "left" and not xrel and not yrel and event == "button" then game.key:triggerVirtual("SHOW_INVENTORY") end end - game.mouse:registerZone(bx + x * scale, by - tb_inven[7]*scale, tb_inven[6], tb_inven[7], desc_fct, nil, "tb_inven", true, scale) + game.mouse:registerZone(bx + x * scale, by +y*scale, tb_inven[6], tb_inven[7], desc_fct, nil, "tb_inven", true, scale) end - x = x + tb_inven[6] + x, y = self:toolbarOrientStep(orient, bx, by, scale, x, y, tb_bg[6], tb_bg[7]) - tb_bg[1]:toScreenFull (x, - tb_bg[7], tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) - tb_quest[1]:toScreenFull (x, - tb_quest[7], tb_quest[6], tb_quest[7], tb_quest[2], tb_quest[3], self.tbbuttons.quest, self.tbbuttons.quest, self.tbbuttons.quest, 1) - if not game.mouse:updateZone("tb_quest", bx + x * scale, by - tb_quest[7]*scale, tb_quest[6], tb_quest[7], nil, scale) then + tb_bg[1]:toScreenFull (x, y, tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) + tb_quest[1]:toScreenFull (x, y, tb_quest[6], tb_quest[7], tb_quest[2], tb_quest[3], self.tbbuttons.quest, self.tbbuttons.quest, self.tbbuttons.quest, 1) + if not game.mouse:updateZone("tb_quest", bx + x * scale, by +y*scale, tb_quest[6], tb_quest[7], nil, scale) then game.mouse:unregisterZone("tb_quest") local desc_fct = function(button, mx, my, xrel, yrel, bx, by, event) if event == "out" then self.tbbuttons.quest = 0.6 return else self.tbbuttons.quest = 1 end - game.tooltip_x, game.tooltip_y = 1, 1; game:tooltipDisplayAtMap(game.w, game.h, "Left mouse to show quest log") - if button == "left" and not xrel and not yrel and event == "button" then game.key:triggerVirtual("SHOW_QUESTS") end + game.tooltip_x, game.tooltip_y = 1, 1; game:tooltipDisplayAtMap(game.w, game.h, "Left mouse to show message/chat log.") + if button == "left" and not xrel and not yrel and event == "button" then game.key:triggerVirtual("SHOW_MESSAGE_LOG") end end - game.mouse:registerZone(bx + x * scale, by - tb_quest[7]*scale, tb_quest[6], tb_quest[7], desc_fct, nil, "tb_quest", true, scale) + game.mouse:registerZone(bx + x * scale, by +y*scale, tb_quest[6], tb_quest[7], desc_fct, nil, "tb_quest", true, scale) end - x = x + tb_quest[6] + x, y = self:toolbarOrientStep(orient, bx, by, scale, x, y, tb_bg[6], tb_bg[7]) - tb_bg[1]:toScreenFull (x, - tb_bg[7], tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) - tb_lore[1]:toScreenFull (x, - tb_lore[7], tb_lore[6], tb_lore[7], tb_lore[2], tb_lore[3], self.tbbuttons.lore, self.tbbuttons.lore, self.tbbuttons.lore, 1) - if not game.mouse:updateZone("tb_lore", bx + x * scale, by - tb_lore[7]*scale, tb_lore[6], tb_lore[7], nil, scale) then + tb_bg[1]:toScreenFull (x, y, tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) + tb_lore[1]:toScreenFull (x, y, tb_lore[6], tb_lore[7], tb_lore[2], tb_lore[3], self.tbbuttons.lore, self.tbbuttons.lore, self.tbbuttons.lore, 1) + if not game.mouse:updateZone("tb_lore", bx + x * scale, by +y*scale, tb_lore[6], tb_lore[7], nil, scale) then game.mouse:unregisterZone("tb_lore") local desc_fct = function(button, mx, my, xrel, yrel, bx, by, event) if event == "out" then self.tbbuttons.lore = 0.6 return else self.tbbuttons.lore = 1 end - game.tooltip_x, game.tooltip_y = 1, 1; game:tooltipDisplayAtMap(game.w, game.h, "Left mouse to show all known lore") - if button == "left" and not xrel and not yrel and event == "button" then game:registerDialog(require("mod.dialogs.ShowLore").new("Tales of Maj'Eyal Lore", game.player)) end + game.tooltip_x, game.tooltip_y = 1, 1; game:tooltipDisplayAtMap(game.w, game.h, "Left mouse to show quest log.\nRight mouse to show all known lore.") + if button == "left" and not xrel and not yrel and event == "button" then game.key:triggerVirtual("SHOW_QUESTS") + elseif button == "right" and not xrel and not yrel and event == "button" then game:registerDialog(require("mod.dialogs.ShowLore").new("Tales of Maj'Eyal Lore", game.player)) end end - game.mouse:registerZone(bx + x * scale, by - tb_lore[7]*scale, tb_lore[6], tb_lore[7], desc_fct, nil, "tb_lore", true, scale) + game.mouse:registerZone(bx + x * scale, by +y*scale, tb_lore[6], tb_lore[7], desc_fct, nil, "tb_lore", true, scale) end - x = x + tb_lore[6] + x, y = self:toolbarOrientStep(orient, bx, by, scale, x, y, tb_bg[6], tb_bg[7]) - tb_bg[1]:toScreenFull (x, - tb_bg[7], tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) - tb_mainmenu[1]:toScreenFull (x, - tb_mainmenu[7], tb_mainmenu[6], tb_mainmenu[7], tb_mainmenu[2], tb_mainmenu[3], self.tbbuttons.mainmenu, self.tbbuttons.mainmenu, self.tbbuttons.mainmenu, 1) - if not game.mouse:updateZone("tb_mainmenu", bx + x * scale, by - tb_mainmenu[7]*scale, tb_mainmenu[6], tb_mainmenu[7], nil, scale) then + tb_bg[1]:toScreenFull (x, y, tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) + tb_mainmenu[1]:toScreenFull (x, y, tb_mainmenu[6], tb_mainmenu[7], tb_mainmenu[2], tb_mainmenu[3], self.tbbuttons.mainmenu, self.tbbuttons.mainmenu, self.tbbuttons.mainmenu, 1) + if not game.mouse:updateZone("tb_mainmenu", bx + x * scale, by + y*scale, tb_mainmenu[6], tb_mainmenu[7], nil, scale) then game.mouse:unregisterZone("tb_mainmenu") local desc_fct = function(button, mx, my, xrel, yrel, bx, by, event) if event == "out" then self.tbbuttons.mainmenu = 0.6 return else self.tbbuttons.mainmenu = 1 end game.tooltip_x, game.tooltip_y = 1, 1; game:tooltipDisplayAtMap(game.w, game.h, "Left mouse to show main menu") if button == "left" and not xrel and not yrel and event == "button" then game.key:triggerVirtual("EXIT") end end - game.mouse:registerZone(bx + x * scale, by - tb_mainmenu[7]*scale, tb_mainmenu[6], tb_mainmenu[7], desc_fct, nil, "tb_mainmenu", true, scale) + game.mouse:registerZone(bx + x * scale, by +y*scale, tb_mainmenu[6], tb_mainmenu[7], desc_fct, nil, "tb_mainmenu", true, scale) end - x = x + tb_lore[6] + x, y = self:toolbarOrientStep(orient, bx, by, scale, x, y, tb_bg[6], tb_bg[7]) local padlock = self.locked and tb_padlock_closed or tb_padlock_open - tb_bg[1]:toScreenFull (x, - tb_bg[7], tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) - padlock[1]:toScreenFull (x, - padlock[7], padlock[6], padlock[7], padlock[2], padlock[3], self.tbbuttons.padlock, self.tbbuttons.padlock, self.tbbuttons.padlock, 1) - if not game.mouse:updateZone("padlock", bx + x * scale, by - padlock[7]*scale, padlock[6], padlock[7], nil, scale) then + tb_bg[1]:toScreenFull (x, y, tb_bg[6], tb_bg[7], tb_bg[2], tb_bg[3], 1, 1, 1, 1) + padlock[1]:toScreenFull (x, y, padlock[6], padlock[7], padlock[2], padlock[3], self.tbbuttons.padlock, self.tbbuttons.padlock, self.tbbuttons.padlock, 1) + if not game.mouse:updateZone("padlock", bx + x * scale, by +y*scale, padlock[6], padlock[7], nil, scale) then game.mouse:unregisterZone("padlock") local desc_fct = function(button, mx, my, xrel, yrel, bx, by, event) if event == "out" then self.tbbuttons.padlock = 0.6 return else self.tbbuttons.padlock = 1 end game.tooltip_x, game.tooltip_y = 1, 1; game:tooltipDisplayAtMap(game.w, game.h, self.locked and "Unlock all interface elements so they can be moved and resized." or "Lock all interface elements so they can not be moved nor resized.") if button == "left" and not xrel and not yrel and event == "button" then self.locked = not self.locked end end - game.mouse:registerZone(bx + x * scale, by - padlock[7]*scale, padlock[6], padlock[7], desc_fct, nil, "padlock", true, scale) + game.mouse:registerZone(bx + x * scale, by +y*scale, padlock[6], padlock[7], desc_fct, nil, "padlock", true, scale) end - x = x + tb_bg[6] + x, y = self:toolbarOrientStep(orient, bx, by, scale, x, y, tb_bg[6], tb_bg[7]) local mhx, mhy = util.getval(self.mhandle_pos.mainicons.x, self), util.getval(self.mhandle_pos.mainicons.y, self) if not self.locked then @@ -1585,12 +1598,15 @@ function _M:displayToolbar(scale, bx, by) local desc_fct = function(button, mx, my, xrel, yrel, bx, by, event) -- Move handle if not self.locked then - self:uiMoveResize("mainicons", button, mx, my, xrel, yrel, bx+mhx, by+mhy, event) + self:uiMoveResize("mainicons", button, mx, my, xrel, yrel, bx+mhx*scale, by+mhy*scale, event) return end end game.mouse:registerZone(bx + mhx * scale, by + mhy * scale, move_handle[6], move_handle[7], desc_fct, nil, "tb_handle", true, scale) end + + -- Compute how much space to reserve on the side + self:computePadding("mainicons", bx, by, bx + x * scale, by + y * scale) end function _M:display(nb_keyframes) @@ -1660,8 +1676,8 @@ function _M:display(nb_keyframes) -- Main icons d.glTranslate(self.places.mainicons.x, self.places.mainicons.y, 0) - d.glScale(self.places.mainicons.scale, self.places.mainicons.scale, self.places.mainicons.scale) - self:displayToolbar(self.places.mainicons.scale, self.places.mainicons.x, self.places.mainicons.y) + d.glScale(self.places.mainicons.scale * 0.5, self.places.mainicons.scale * 0.5, self.places.mainicons.scale * 0.5) + self:displayToolbar(self.places.mainicons.scale * 0.5, self.places.mainicons.x, self.places.mainicons.y) d.glScale() d.glTranslate(-self.places.mainicons.x, -self.places.mainicons.y, -0) diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua index f57cdc3c89..11aeb1a0f6 100644 --- a/game/modules/tome/data/general/objects/world-artifacts.lua +++ b/game/modules/tome/data/general/objects/world-artifacts.lua @@ -2304,9 +2304,9 @@ newEntity{ base = "BASE_STAFF", define_as = "SET_STAFF_CHANNELERS", name = "Staff of Arcane Supremacy", unided_name = "silver-runed staff", level_range = {20, 40}, - color=colors.BLUE, + color=colors.BLUE, image = "object/artifact/staff_of_arcane_supremacy.png", rarity = 300, - desc = [[A long slender staff, made of ancient dragon-bone, with runes emblazoned all over its surface in bright silver. + desc = [[A long slender staff, made of ancient dragon-bone, with runes emblazoned all over its surface in bright silver. It hums faintly, as if great power is locked within, yet alone it seems incomplete.]], cost = 200, material_level = 3, @@ -2345,7 +2345,7 @@ newEntity{ base = "BASE_WIZARD_HAT", define_as = "SET_HAT_CHANNELERS", unided_name = "silver-runed hat", desc = [[A traditional pointed wizard's hat, made of fine purple elven-silk and decorated with bright silver runes. You sense it has been passed from ancient times, and has been born on the heads of great mages. Touching the cloth you feel a sense of knowledge and power from bygone ages, yet it is partly sealed away, waiting for a trigger to release it.]], - color = colors.BLUE, + color = colors.BLUE, image = "object/artifact/wizard_hat_of_arcane_understanding.png", level_range = {20, 40}, rarity = 300, cost = 100, diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/staff_of_arcane_supremacy.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/staff_of_arcane_supremacy.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6b9ba28f0d886eb8bacb1feee89dedc7b0c252 GIT binary patch literal 5277 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 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/shockbolt/object/artifact/wizard_hat_of_arcane_understanding.png b/game/modules/tome/data/gfx/shockbolt/object/artifact/wizard_hat_of_arcane_understanding.png new file mode 100644 index 0000000000000000000000000000000000000000..06f44bf4c71119f2ea9b2a7a6136e5bafdc94166 GIT binary patch literal 6756 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 GLSTYpe(!() literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/ui/padlock_closed.png b/game/modules/tome/data/gfx/ui/padlock_closed.png index d82b06ad5e8d344cc8436038fc25563509732eca..f5aedf8d5154fdbcfc56b9d504c072e501fc0522 100644 GIT binary patch delta 2508 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 WfS(S8C@i4>0000<MNUMnLSTYXQ3OW- delta 2621 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 diff --git a/game/modules/tome/data/gfx/ui/padlock_open.png b/game/modules/tome/data/gfx/ui/padlock_open.png index e7cad118f6ff421340a021991e04cc0aafdb0eae..57f4b002767b42fbf2dac25de78f2424bda9fa07 100644 GIT binary patch delta 2566 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 delta 2528 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 -- GitLab