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