equip_menu.lua 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. if UiContainer == nil then UiContainer = {} end
  2. --- The item menu.
  3. UiContainer.EquipMenu = {
  4. --- Current cursor position in the equip slots (1-3).
  5. equip_position = 1,
  6. --- Max cursor position in the equip slots.
  7. equip_position_total = 3,
  8. --- ID of the character the menu is open for.
  9. char_id = -1,
  10. --- The type of item currently being selected.
  11. --
  12. -- Inventory.ITEM_TYPE.WEAPON, Inventory.ITEM_TYPE.ARMOR, or Inventory.ITEM_TYPE.ACCESSORY.
  13. selecting_slot = Inventory.ITEM_TYPE.WEAPON,
  14. --- List of owned weapons equipable by the current characters.
  15. --
  16. -- Only one of each, nevermind the owned quantity.
  17. avail_weapons = {},
  18. --- List of owned armors equipable by the current characters.
  19. --
  20. -- Only one of each, nevermind the owned quantity.
  21. avail_armors = {},
  22. --- List of owned accessories equipable by the current characters.
  23. --
  24. -- Only one of each, nevermind the owned quantity.
  25. avail_accessories = {},
  26. --- First visible position in the item list.
  27. --
  28. -- I.e. How many position the list is scrolled down + 1
  29. list_first_visible = 1,
  30. --- Cursor position in the list.
  31. list_position = 1,
  32. --- Maximum slots in the item list.
  33. list_position_total = 10,
  34. --- highlighted position in the current item list.
  35. list_item_selected = 1,
  36. --- Run when the menu is creaded.
  37. --
  38. -- It does nothing.
  39. on_start = function(self)
  40. return 0
  41. end,
  42. --- Handles button events.
  43. --
  44. -- For the current submenu, handles directional keys, enter and escape events.
  45. -- @param button Pressed direction or action name.
  46. -- @param event Trigger event. Normally, "Press".
  47. on_button = function(self, button, event)
  48. if UiContainer.current_menu == "equip" then
  49. if UiContainer.current_submenu == "" then
  50. -- TODO: Handle L1/R1 (change character)
  51. -- TODO: Handle square: Materia menu
  52. if button == Config.ACTIONS.CANCEL and event == "Press" then
  53. audio_manager:play_sound("Back")
  54. UiContainer.current_menu = "main"
  55. script:request_end_sync(Script.UI, "EquipMenu", "hide", 0)
  56. elseif button == Config.CONTROLS.DOWN then
  57. audio_manager:play_sound("Cursor")
  58. self.equip_position = self.equip_position + 1
  59. if self.equip_position > self.equip_position_total then
  60. self.equip_position = 1
  61. end
  62. ui_manager:get_widget("EquipMenu.Container.Character.Cursor"):set_default_animation("Position" .. self.equip_position)
  63. self.populate_details(self, false)
  64. elseif button == Config.CONTROLS.UP then
  65. audio_manager:play_sound("Cursor")
  66. self.equip_position = self.equip_position - 1
  67. if self.equip_position < 1 then
  68. self.equip_position = self.equip_position_total
  69. end
  70. ui_manager:get_widget("EquipMenu.Container.Character.Cursor"):set_default_animation("Position" .. self.equip_position)
  71. self.populate_details(self, false)
  72. elseif button == Config.ACTIONS.CONFIRM then
  73. if self.equip_position == 1 then
  74. self.selecting_slot = Inventory.ITEM_TYPE.WEAPON
  75. elseif self.equip_position == 2 then
  76. self.selecting_slot = Inventory.ITEM_TYPE.ARMOR
  77. elseif self.equip_position == 3 then
  78. self.selecting_slot = Inventory.ITEM_TYPE.ACCESSORY
  79. end
  80. audio_manager:play_sound("Cursor")
  81. self.submenu_select(self)
  82. else
  83. return 0
  84. end
  85. elseif UiContainer.current_submenu == "item_select" then
  86. local list
  87. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  88. list = self.avail_weapons
  89. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  90. list = self.avail_armors
  91. elseif self.selecting_slot == Inventory.ITEM_TYPE.ACCESSORY then
  92. list = self.avail_accessories
  93. end
  94. if button == Config.ACTIONS.CANCEL and event == "Press" then
  95. audio_manager:play_sound("Back")
  96. self.submenu_none(self)
  97. elseif button == Config.CONTROLS.DOWN then
  98. audio_manager:play_sound("Cursor")
  99. -- Move one position down only if there is a next item
  100. if #(list) <= self.list_item_selected then
  101. return 0
  102. end
  103. self.list_item_selected = self.list_item_selected + 1
  104. -- Move cursor...
  105. if self.list_position < self.list_position_total then
  106. -- ... by moving it one position down.
  107. self.list_position = self.list_position + 1
  108. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_default_animation("Position" .. self.list_position)
  109. else
  110. -- ... by scrolling the list.
  111. self.list_first_visible = self.list_first_visible + 1
  112. self.populate_item_list(self)
  113. end
  114. self.populate_details(self, true)
  115. self.calculate_stat_diffs(self)
  116. elseif button == Config.CONTROLS.UP then
  117. audio_manager:play_sound("Cursor")
  118. -- Move one position up only if not in the first.
  119. if self.list_item_selected <= 1 then
  120. return 0
  121. end
  122. self.list_item_selected = self.list_item_selected - 1
  123. -- Move cursor...
  124. if self.list_position > 1 then
  125. -- ... by moving it one position up
  126. self.list_position = self.list_position - 1
  127. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_default_animation("Position" .. self.list_position)
  128. else
  129. -- ... by scrolling the list.
  130. self.list_first_visible = self.list_first_visible - 1
  131. self.populate_item_list(self)
  132. end
  133. self.populate_details(self, true)
  134. self.calculate_stat_diffs(self)
  135. elseif button == Config.ACTIONS.CONFIRM and event == "Press" then
  136. -- Equip the seleced item
  137. local item_id = nil
  138. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  139. item_id = self.avail_weapons[self.list_item_selected]
  140. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  141. item_id = self.avail_armors[self.list_item_selected]
  142. elseif self.selecting_slot == Inventory.ITEM_TYPE.ACCESSORY then
  143. item_id = self.avail_accessories[self.list_item_selected]
  144. end
  145. if Characters.equip(self.char_id, item_id) == false then
  146. audio_manager:play_sound("Error")
  147. return 0
  148. end
  149. -- TODO: Replace for "Equip" sound
  150. audio_manager:play_sound("Cursor")
  151. self.submenu_none(self)
  152. end
  153. end
  154. end
  155. return 0
  156. end,
  157. --- Opens the equip menu.
  158. --
  159. -- Populates and updates displayed data before opening.
  160. show = function(self)
  161. self.char_id = UiContainer.current_character_id
  162. ui_manager:get_widget("EquipMenu"):set_visible(true)
  163. UiContainer.current_menu = "equip"
  164. UiContainer.current_submenu = ""
  165. self.equip_position = 1
  166. self.submenu_none(self)
  167. return 0;
  168. end,
  169. --- Enters or returns to the main equip menu.
  170. submenu_none = function(self)
  171. UiContainer.current_submenu = ""
  172. UiContainer.populate_character_data("EquipMenu.Container.Character", Characters[self.char_id])
  173. ui_manager:get_widget("EquipMenu.Container.Character.Portrait"):set_image("characters/" .. tostring(self.char_id) .. ".png")
  174. -- TODO: Do something for chars 9 and 10
  175. ui_manager:get_widget("EquipMenu.Container.Character.WpnIcon"):set_image("icons/item_weapon_" .. tostring(self.char_id) .. ".png")
  176. ui_manager:get_widget("EquipMenu.Container.Character.WpnLbl"):set_text(Game.Items[Characters[self.char_id].weapon.id].name)
  177. ui_manager:get_widget("EquipMenu.Container.Character.ArmLbl"):set_text(Game.Items[Characters[self.char_id].armor.id].name)
  178. if Characters[self.char_id].accessory == nil then
  179. ui_manager:get_widget("EquipMenu.Container.Character.AccLbl"):set_text("")
  180. else
  181. ui_manager:get_widget("EquipMenu.Container.Character.AccLbl"):set_text(Game.Items[Characters[self.char_id].accessory].name)
  182. end
  183. self.load_availables(self)
  184. self.populate_details(self, false)
  185. self.populate_current_stats(self)
  186. self.calculate_stat_diffs(self)
  187. -- Hide stat arrows and difs
  188. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_visible(false)
  189. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_visible(false)
  190. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_visible(false)
  191. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_visible(false)
  192. ui_manager:get_widget("EquipMenu.Container.Stats.MAtkDif"):set_visible(false)
  193. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_visible(false)
  194. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_visible(false)
  195. ui_manager:get_widget("EquipMenu.Container.Stats.AtkArw"):set_visible(false)
  196. ui_manager:get_widget("EquipMenu.Container.Stats.AccArw"):set_visible(false)
  197. ui_manager:get_widget("EquipMenu.Container.Stats.DefArw"):set_visible(false)
  198. ui_manager:get_widget("EquipMenu.Container.Stats.EvaArw"):set_visible(false)
  199. ui_manager:get_widget("EquipMenu.Container.Stats.MAtkArw"):set_visible(false)
  200. ui_manager:get_widget("EquipMenu.Container.Stats.MDefArw"):set_visible(false)
  201. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaArw"):set_visible(false)
  202. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_visible(false)
  203. for i = 1, self.list_position_total do
  204. ui_manager:get_widget("EquipMenu.Container.List.Item" .. tostring(i)):set_text("")
  205. end
  206. end,
  207. --- Initializzes the item selection submenu
  208. submenu_select = function(self)
  209. -- Populate the list
  210. self.list_first_visible = 1
  211. self.list_position = 1
  212. self.list_item_selected = 1
  213. if self.populate_item_list(self) == false then
  214. audio_manager:play_sound("Error")
  215. return
  216. end
  217. UiContainer.current_submenu = "item_select"
  218. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_visible(true)
  219. ui_manager:get_widget("EquipMenu.Container.List.Cursor"):set_default_animation("Position" .. self.list_position)
  220. -- TODO: Description and details of first item
  221. self.populate_details(self, true)
  222. self.calculate_stat_diffs(self)
  223. end,
  224. populate_item_list = function(self)
  225. local list
  226. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  227. list = self.avail_weapons
  228. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  229. list = self.avail_armors
  230. elseif self.selecting_slot == Inventory.ITEM_TYPE.ACCESSORY then
  231. list = self.avail_accessories
  232. else
  233. for i = 1, self.list_position_total do
  234. ui_manager:get_widget("EquipMenu.Container.List.Item" .. tostring(i)):set_text("")
  235. end
  236. return false
  237. end
  238. if list == nil or #(list) == 0 then
  239. -- No items for the list
  240. return false
  241. end
  242. for i = 1, self.list_position_total do
  243. if #(list) >= i + self.list_first_visible - 1 then
  244. local name = Game.Items[list[i + self.list_first_visible - 1]].name
  245. ui_manager:get_widget("EquipMenu.Container.List.Item" .. tostring(i)):set_text(name)
  246. else
  247. ui_manager:get_widget("EquipMenu.Container.List.Item" .. tostring(i)):set_text("")
  248. end
  249. end
  250. end,
  251. --- Loads the list of equipment available for the current character.
  252. --
  253. -- Currently equiped items are not added, even if more of them are in the inventory.
  254. load_availables = function(self)
  255. self.avail_weapons = {}
  256. self.avail_armors = {}
  257. self.avail_accessories = {}
  258. -- The inventory can have empty slots in between, so ipairs() can't be used.
  259. for slot = 1, MAX_INVENTORY_SLOTS do
  260. local item = Inventory[slot]
  261. if item ~= nil and item.item ~= nil then
  262. local item_type = Game.Items[item.item].type
  263. if item_type == Inventory.ITEM_TYPE.WEAPON or item_type == Inventory.ITEM_TYPE.ARMOR or item_type == Inventory.ITEM_TYPE.ACCESSORY then
  264. local equip = Game.Items[item.item].users
  265. for _, ch in ipairs(equip) do
  266. if ch == self.char_id then
  267. if item_type == Inventory.ITEM_TYPE.WEAPON then
  268. if item.item ~= Characters[self.char_id].weapon.id then
  269. table.insert(self.avail_weapons, item.item)
  270. end
  271. elseif item_type == Inventory.ITEM_TYPE.ARMOR then
  272. if item.item ~= Characters[self.char_id].armor.id then
  273. table.insert(self.avail_armors, item.item)
  274. end
  275. elseif item_type == Inventory.ITEM_TYPE.ACCESSORY then
  276. if item.item ~= Characters[self.char_id].accessory then
  277. table.insert(self.avail_accessories, item.item)
  278. end
  279. end
  280. end
  281. end
  282. end
  283. end
  284. end
  285. end,
  286. populate_current_stats = function(self)
  287. -- TODO: Cap at 255?
  288. local stats = Characters[self.char_id].stats
  289. ui_manager:get_widget("EquipMenu.Container.Stats.Atk"):set_text(UiContainer.pad_value(stats.atk, 4))
  290. ui_manager:get_widget("EquipMenu.Container.Stats.Acc"):set_text(UiContainer.pad_value(stats.acc, 4))
  291. ui_manager:get_widget("EquipMenu.Container.Stats.Def"):set_text(UiContainer.pad_value(stats.def, 4))
  292. ui_manager:get_widget("EquipMenu.Container.Stats.Eva"):set_text(UiContainer.pad_value(stats.eva, 4))
  293. ui_manager:get_widget("EquipMenu.Container.Stats.MAtk"):set_text(UiContainer.pad_value(stats.matk, 4))
  294. ui_manager:get_widget("EquipMenu.Container.Stats.MDef"):set_text(UiContainer.pad_value(stats.mdef, 4))
  295. ui_manager:get_widget("EquipMenu.Container.Stats.MEva"):set_text(UiContainer.pad_value(stats.meva, 4))
  296. end,
  297. --- Populated the details of the highlighted item.
  298. --
  299. -- @param from_list If true, data will be read from the item higlighted in the list on the
  300. -- right. If false, data wil be red from the currently equipped items.
  301. populate_details = function(self, from_list)
  302. local type
  303. local item
  304. if (from_list == false) then
  305. if self.equip_position == 1 then
  306. type = Inventory.ITEM_TYPE.WEAPON
  307. item = Game.Items[Characters[self.char_id].weapon.id]
  308. ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text(Game.Items[Characters[self.char_id].weapon.id].description)
  309. elseif self.equip_position == 2 then
  310. type = Inventory.ITEM_TYPE.ARMOR
  311. item = Game.Items[Characters[self.char_id].armor.id]
  312. ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text(Game.Items[Characters[self.char_id].armor.id].description)
  313. elseif self.equip_position == 3 then
  314. type = Inventory.ITEM_TYPE.ACCESSORY
  315. item = Game.Items[Characters[self.char_id].accessory]
  316. --elseif self.equip_position == 3 and Characters[self.char_id].accessory ~= nil then
  317. -- ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text(Game.Items[Characters[self.char_id].accessory].description)
  318. end
  319. else
  320. -- Selecting from the list
  321. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  322. item = Game.Items[self.avail_weapons[self.list_item_selected]]
  323. type = Inventory.ITEM_TYPE.WEAPON
  324. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  325. item = Game.Items[self.avail_armors[self.list_item_selected]]
  326. type = Inventory.ITEM_TYPE.ARMOR
  327. elseif self.selecting_slot == Inventory.ITEM_TYPE.ACCESSORY then
  328. item = Game.Items[self.avail_accessories[self.list_item_selected]]
  329. type = Inventory.ITEM_TYPE.ACCESSORY
  330. end
  331. end
  332. -- Show description
  333. if item ~= nil then
  334. ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text(item.description)
  335. else
  336. ui_manager:get_widget("EquipMenu.Container.Help.Help"):set_text("")
  337. end
  338. -- If accessory, hide all details and return
  339. if type == Inventory.ITEM_TYPE.ACCESSORY then
  340. ui_manager:get_widget("EquipMenu.Container.SlotsEmpty"):set_visible(true)
  341. return 0
  342. end
  343. if item == nil then
  344. -- Nothing to show details for (e.g. empty slot).
  345. return 0
  346. end
  347. ui_manager:get_widget("EquipMenu.Container.SlotsEmpty"):set_visible(false)
  348. ui_manager:get_widget("EquipMenu.Container.Slots.Growth0"):set_visible(false)
  349. ui_manager:get_widget("EquipMenu.Container.Slots.Growth1"):set_visible(false)
  350. ui_manager:get_widget("EquipMenu.Container.Slots.Growth2"):set_visible(false)
  351. ui_manager:get_widget("EquipMenu.Container.Slots.Growth3"):set_visible(false)
  352. if item.growth >= 0 and item.growth <= 3 then
  353. ui_manager:get_widget("EquipMenu.Container.Slots.Growth" .. item.growth):set_visible(true)
  354. else
  355. ui_manager:get_widget("EquipMenu.Container.Slots.Growth1"):set_visible(true)
  356. end
  357. for s = 1, 8 do
  358. if #(item.slots) < s then
  359. ui_manager:get_widget("EquipMenu.Container.Slots.Slot" .. tostring(s)):set_visible(false)
  360. else
  361. ui_manager:get_widget("EquipMenu.Container.Slots.Slot" .. tostring(s)):set_visible(true)
  362. if item.growth == 0 then
  363. ui_manager:get_widget("EquipMenu.Container.Slots.Slot" .. tostring(s)):set_image("icons/materia_slot_no_growth.png")
  364. else
  365. ui_manager:get_widget("EquipMenu.Container.Slots.Slot" .. tostring(s)):set_image("icons/materia_slot.png")
  366. end
  367. end
  368. if s % 2 ~= 0 then
  369. -- At every odd slot, if there is a next slot and its linked, show linker.
  370. if #(item.slots) > s and item.slots[s] == 1 then
  371. ui_manager:get_widget("EquipMenu.Container.Slots.Link" .. tostring(math.floor(s / 2) + 1)):set_visible(true)
  372. else
  373. ui_manager:get_widget("EquipMenu.Container.Slots.Link" .. tostring(math.floor(s / 2) + 1)):set_visible(false)
  374. end
  375. end
  376. end
  377. end,
  378. --- Populates the stat difference panel.
  379. calculate_stat_diffs = function(self)
  380. local item
  381. local cur_item
  382. if self.selecting_slot == Inventory.ITEM_TYPE.WEAPON then
  383. item = Game.Items[self.avail_weapons[self.list_item_selected]]
  384. cur_item = Game.Items[Characters[self.char_id].weapon.id]
  385. elseif self.selecting_slot == Inventory.ITEM_TYPE.ARMOR then
  386. item = Game.Items[self.avail_armors[self.list_item_selected]]
  387. cur_item = Game.Items[Characters[self.char_id].armor.id]
  388. end
  389. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_visible(false)
  390. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_visible(false)
  391. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_visible(false)
  392. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_visible(false)
  393. ui_manager:get_widget("EquipMenu.Container.Stats.MAtkDif"):set_visible(false)
  394. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_visible(false)
  395. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_visible(false)
  396. ui_manager:get_widget("EquipMenu.Container.Stats.AtkArw"):set_visible(false)
  397. ui_manager:get_widget("EquipMenu.Container.Stats.AccArw"):set_visible(false)
  398. ui_manager:get_widget("EquipMenu.Container.Stats.DefArw"):set_visible(false)
  399. ui_manager:get_widget("EquipMenu.Container.Stats.EvaArw"):set_visible(false)
  400. ui_manager:get_widget("EquipMenu.Container.Stats.MAtkArw"):set_visible(false)
  401. ui_manager:get_widget("EquipMenu.Container.Stats.MDefArw"):set_visible(false)
  402. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaArw"):set_visible(false)
  403. if item == nil or cur_item == nil then
  404. return 0
  405. end
  406. if item.type == Inventory.ITEM_TYPE.WEAPON then
  407. if item.power > cur_item.power then
  408. ui_manager:get_widget("EquipMenu.Container.Stats.AtkArw"):set_visible(true)
  409. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_colour(1, 1, 0)
  410. local val = tostring(Characters[self.char_id].stats.atk - cur_item.power + item.power)
  411. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_text(val)
  412. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_visible(true)
  413. elseif item.power < cur_item.power then
  414. ui_manager:get_widget("EquipMenu.Container.Stats.AtkArw"):set_visible(true)
  415. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_colour(1, 0, 0)
  416. local val = tostring(Characters[self.char_id].stats.atk - cur_item.power + item.power)
  417. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_text(val)
  418. ui_manager:get_widget("EquipMenu.Container.Stats.AtkDif"):set_visible(true)
  419. end
  420. if item.accuracy > cur_item.accuracy then
  421. ui_manager:get_widget("EquipMenu.Container.Stats.AccArw"):set_visible(true)
  422. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_colour(1, 1, 0)
  423. local val = tostring(Characters[self.char_id].stats.acc - cur_item.accuracy + item.accuracy)
  424. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_text(val)
  425. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_visible(true)
  426. elseif item.accuracy < cur_item.accuracy then
  427. ui_manager:get_widget("EquipMenu.Container.Stats.AccArw"):set_visible(true)
  428. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_colour(1, 0, 0)
  429. local val = tostring(Characters[self.char_id].stats.acc - cur_item.accuracy + item.accuracy)
  430. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_text(val)
  431. ui_manager:get_widget("EquipMenu.Container.Stats.AccDif"):set_visible(true)
  432. end
  433. elseif item.type == Inventory.ITEM_TYPE.ARMOR then
  434. if item.defense.physical > cur_item.defense.physical then
  435. ui_manager:get_widget("EquipMenu.Container.Stats.DefArw"):set_visible(true)
  436. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_colour(1, 1, 0)
  437. local val = tostring(Characters[self.char_id].stats.def - cur_item.defense.physical + item.defense.physical)
  438. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_text(val)
  439. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_visible(true)
  440. elseif item.defense.physical < cur_item.defense.physical then
  441. ui_manager:get_widget("EquipMenu.Container.Stats.DefArw"):set_visible(true)
  442. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_colour(1, 0, 0)
  443. local val = tostring(Characters[self.char_id].stats.def - cur_item.defense.physical + item.defense.physical)
  444. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_text(val)
  445. ui_manager:get_widget("EquipMenu.Container.Stats.DefDif"):set_visible(true)
  446. end
  447. if item.defense.magical > cur_item.defense.magical then
  448. ui_manager:get_widget("EquipMenu.Container.Stats.MDefArw"):set_visible(true)
  449. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_colour(1, 1, 0)
  450. local val = tostring(Characters[self.char_id].stats.mdef - cur_item.defense.magical + item.defense.magical)
  451. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_text(val)
  452. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_visible(true)
  453. elseif item.defense.magical < cur_item.defense.magical then
  454. ui_manager:get_widget("EquipMenu.Container.Stats.MDefArw"):set_visible(true)
  455. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_colour(1, 0, 0)
  456. local val = tostring(Characters[self.char_id].stats.mdef - cur_item.defense.magical + item.defense.magical)
  457. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_text(val)
  458. ui_manager:get_widget("EquipMenu.Container.Stats.MDefDif"):set_visible(true)
  459. end
  460. if item.evasion.physical > cur_item.evasion.physical then
  461. ui_manager:get_widget("EquipMenu.Container.Stats.EvaArw"):set_visible(true)
  462. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_colour(1, 1, 0)
  463. local val = tostring(Characters[self.char_id].stats.eva - cur_item.evasion.physical + item.evasion.physical)
  464. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_text(val)
  465. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_visible(true)
  466. elseif item.evasion.physical < cur_item.evasion.physical then
  467. ui_manager:get_widget("EquipMenu.Container.Stats.EvaArw"):set_visible(true)
  468. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_colour(1, 0, 0)
  469. local val = tostring(Characters[self.char_id].stats.eva - cur_item.evasion.physical + item.evasion.physical)
  470. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_text(val)
  471. ui_manager:get_widget("EquipMenu.Container.Stats.EvaDif"):set_visible(true)
  472. end
  473. if item.evasion.magical > cur_item.evasion.magical then
  474. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaArw"):set_visible(true)
  475. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_colour(1, 1, 0)
  476. local val = tostring(Characters[self.char_id].stats.mdef - cur_item.evasion.magical + item.evasion.magical)
  477. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_text(val)
  478. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_visible(true)
  479. elseif item.evasion.magical < cur_item.evasion.magical then
  480. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaArw"):set_visible(true)
  481. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_colour(1, 0, 0)
  482. local val = tostring(Characters[self.char_id].stats.mdef - cur_item.evasion.magical + item.evasion.magical)
  483. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_text(val)
  484. ui_manager:get_widget("EquipMenu.Container.Stats.MEvaDif"):set_visible(true)
  485. end
  486. end
  487. end,
  488. --- Hides the item menu and goes back to the main menu.
  489. hide = function(self)
  490. ui_manager:get_widget("EquipMenu"):set_visible(false)
  491. UiContainer.current_menu = "main"
  492. UiContainer.current_submenu = ""
  493. UiContainer.resume_menu("main")
  494. return 0;
  495. end,
  496. }