Get size of map window to adjust number of items displayed

This commit is contained in:
Dave Schmenk 2016-07-13 20:23:01 -07:00
parent ad8d58f62e
commit dfc5f974db
3 changed files with 52 additions and 21 deletions

View File

@ -21,9 +21,9 @@ import gamelib
predef beep, showParty, mmgr, setWindow1, setWindow2, setWindow3, reboot, brk predef beep, showParty, mmgr, setWindow1, setWindow2, setWindow3, reboot, brk
predef encodeDice, rollDice, setPlural, getStringResponse predef encodeDice, rollDice, setPlural, getStringResponse
predef streqi, strncpy, fatal, pause, tossStrings, charToUpper predef streqi, strncpy, fatal, pause, tossStrings, charToUpper
predef addEncounterZone, clearEncounterZones, showMapName, setMapWindow, makeModifier predef addEncounterZone, clearEncounterZones, showMapName, setMapWindow, getMapWindow
predef addGold, countGold, payGold predef addGold, countGold, payGold
predef calcPlayerArmor, diskActivity, rdkey, initHeap, scriptCombat predef calcPlayerArmor, diskActivity, rdkey, initHeap, scriptCombat, makeModifier
predef giveItemToPlayer, takeItemFromPlayer, playerHasItem, getStat, setStat predef giveItemToPlayer, takeItemFromPlayer, playerHasItem, getStat, setStat
predef setGameFlag, getGameFlag, setAvatar predef setGameFlag, getGameFlag, setAvatar

View File

@ -1139,7 +1139,15 @@ export def setMapWindow()
setWindow(24, 169, 14, 140) // Top, Bottom, Left, Right setWindow(24, 169, 14, 140) // Top, Bottom, Left, Right
fin fin
end end
export def getMapWindow(width, height)
if frameLoaded == 3 // don't check mapIs3D, since we might be in an engine
*width = 140-14
*height = 153-24
else
*width = 140-14
*height = 169-24
fin
end
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
export def rightJustifyStr(str, rightX) export def rightJustifyStr(str, rightX)
word x word x

View File

@ -22,9 +22,10 @@ include "globalDefs.plh"
include "party.plh" include "party.plh"
// Number of items that fit in inventory pane // Number of items that fit in inventory pane
const INV_PAGE_NUM = 13 const INV_PAGE_NUM = 11
const CHAR_WND_STAT_X = 20 const CHAR_WND_STAT_X = 20
const CHAR_WND_INV_X = 16
// This pointer is the root of all heap-tracked (and garbage collected) objects. // This pointer is the root of all heap-tracked (and garbage collected) objects.
// See playtype.plh for definitions of all the datastructures and how they interconnect. // See playtype.plh for definitions of all the datastructures and how they interconnect.
@ -35,6 +36,7 @@ word global
predef _party_doPlayerSheet predef _party_doPlayerSheet
word[] funcTbl = @_party_doPlayerSheet word[] funcTbl = @_party_doPlayerSheet
byte[] strWhichItem = "\n^YWhich item?^Y" byte[] strWhichItem = "\n^YWhich item?^Y"
byte[] strYouSure = "\n^YAre you sure (Y/N)?^Y"
// Other global variables here // Other global variables here
@ -70,28 +72,30 @@ def unequip(player, type, kind)
end end
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
// Display inventory pane // Display inventory pane
def showInventory(player, page, select) def showInventory(player, page, height, select)
word item word item
byte n_item, n_page byte n_item, n_page
setMapWindow() setMapWindow()
clearWindow() clearWindow()
rawDisplayStr("^Y^LInventory^L^N") rawDisplayStr("^Y^LInventory^L^N")
displayf1("\nGroup Gold: %d", countGold()) rawDisplayStr("\n^T018")
displayf1("Group Gold: %d", countGold())
item = player=>p_items item = player=>p_items
n_item = 0 n_item = 0
n_page = page * INV_PAGE_NUM n_page = page * height
if page if page
while item and n_item < n_page while item and n_item < n_page
item = item=>p_nextObj item = item=>p_nextObj
n_item++ n_item++
loop loop
fin fin
while item and n_item < (n_page + INV_PAGE_NUM) while item and n_item < (n_page + height)
if select if select
displayf2("\n%c) %s", 'A' + n_item, item=>s_name) displayf2("\n%c) %s", 'A' + n_item, item=>s_name)
else else
displayf1("\n%s", item=>s_name) rawDisplayStr("\n^T018")
displayf1("%s", item=>s_name)
fin fin
//if item=>s_itemKind //if item=>s_itemKind
// displayf1(" (%s)", item=>s_itemKind) // displayf1(" (%s)", item=>s_itemKind)
@ -111,7 +115,7 @@ def showInventory(player, page, select)
item = item=>p_nextObj item = item=>p_nextObj
n_item++ n_item++
loop loop
while n_item < (n_page + INV_PAGE_NUM) while n_item < (n_page + height)
displayChar('\n') displayChar('\n')
n_item++ n_item++
loop loop
@ -130,9 +134,9 @@ def displaySkill(str, val, col)
displayf2("%d %s", val, @mystr) displayf2("%d %s", val, @mystr)
end end
// Show player data // Show player data
def showPlayerSheet(num) def showPlayerSheet(num, mapHeight)
word player, skill word player, skill
byte col byte col, n_item
// Count the number of players // Count the number of players
player = global=>p_players player = global=>p_players
@ -174,7 +178,7 @@ def showPlayerSheet(num)
col++ col++
loop loop
// Next, show inventory in the main panel // Next, show inventory in the main panel
showInventory(player, 0, FALSE) showInventory(player, 0, mapHeight, FALSE)
rawDisplayStr("\n^YE)quip, U)se, D)rop^Y") rawDisplayStr("\n^YE)quip, U)se, D)rop^Y")
return player return player
end end
@ -182,11 +186,16 @@ end
// Show player sheet and accept command // Show player sheet and accept command
def _party_doPlayerSheet(num) def _party_doPlayerSheet(num)
word player, item word player, item
byte n_item, n_page word hInv, vInv
byte n_item, n_page, i
// Get size of inventory pane in chars
getMapWindow(@hInv, @vInv)
vInv = vInv / 11
n_page = 0 n_page = 0
repeat repeat
player = showPlayerSheet(num) player = showPlayerSheet(num, vInv)
if !player; return; fin // Invalid player if !player; return; fin // Invalid player
// Get a key, do something // Get a key, do something
when getUpperKey() when getUpperKey()
@ -196,7 +205,7 @@ def _party_doPlayerSheet(num)
is '3'; num = 2; n_page = 0; break is '3'; num = 2; n_page = 0; break
// Equip player with weapon/armor // Equip player with weapon/armor
is 'E' is 'E'
showInventory(player, n_page, TRUE) showInventory(player, n_page, vInv, TRUE)
rawDisplayStr(@strWhichItem) rawDisplayStr(@strWhichItem)
item = itemNum(player, getUpperKey() - 'A') item = itemNum(player, getUpperKey() - 'A')
if item if item
@ -209,7 +218,7 @@ def _party_doPlayerSheet(num)
break break
// Use an item // Use an item
is 'U' is 'U'
showInventory(player, n_page, TRUE) showInventory(player, n_page, vInv, TRUE)
rawDisplayStr(@strWhichItem) rawDisplayStr(@strWhichItem)
item = itemNum(player, getUpperKey() - 'A') item = itemNum(player, getUpperKey() - 'A')
if item if item
@ -228,12 +237,26 @@ def _party_doPlayerSheet(num)
break break
// Drop an item // Drop an item
is 'D' is 'D'
showInventory(player, n_page, TRUE) showInventory(player, n_page, vInv, TRUE)
rawDisplayStr(@strWhichItem) rawDisplayStr(@strWhichItem)
item = itemNum(player, getUpperKey() - 'A') n_item = getUpperKey() - 'A'
item = itemNum(player, n_item)
if item if item
removeFromList(@player=>p_items, item) clearWindow()
calcPlayerArmor(player) rawDisplayStr("^Y^LDrop^L^Y")
for i = 0 to n_item
rawDisplayStr("\n")
next
rawDisplayStr("\n^T018")
displayf1("%s", item=>s_name)
for i = n_item + 2 to vInv
rawDisplayStr("\n")
next
rawDisplayStr(@strYouSure)
if getYN()
removeFromList(@player=>p_items, item)
calcPlayerArmor(player)
fin
fin fin
break break
// Next inventory page // Next inventory page