mabe something like this, it is using the mouse ATM but you could change it for keys with some imagination:
;Small "database" containing all possible game objects loaded using DATA or loaded from a file. Add fields as needed.
Type IG_ObjectData
Field name$ ;item name
Field thumbfilename$ ;filename of thumb
Field thumb ; handle for thumbnail (if preloaded, this example doesnt use preloading))
Field DeleteWhenUsed ;1/0
Field Description$ ; ie, a gold shiny key with 666 on the handle
End Type
;A second "database" for your inventory.
Type IG_Inventory
Field name$
Field thumb ;image handle
Field DeleteWhenUsed
Field Description$
End Type
;function to add an object to your world, name must be unique as it is the "key field"
function addglobalobject(name$,filename$="missing.png",desc$="Mysterious Item",deletewhenused=0)
O.ig_objectdata= new ig_objectdata
o\name=name
o\filename=filename
;if using preloading thumbs uncomment folowing line
;o\thumb=loadimage (o\filename)
o\deletewhenused=deletewhenused
o\description=desc
end function
;removes an object from the inventory
Function Inventory_remove(name$)
;Erase item from inventory
For i.IG_inventory=Each IG_inventory
Freeimage i\thumb
If Upper(i\name)=Upper(name$) Delete i
Next
End Function
;Adds an object to the inventory from the world. Returns 1 if successful
;name must exactly match a name in your objectdata database.
Function Inventory_Pickup(name$)
;check If Object is in database & If Not
;raise an error otherwise add To inventory
success=0
For o.IG_objectdata=Each IG_objectdata
If Upper(o\name)=Upper(name$)
;create New inventory item from item database
i.IG_Inventory=New IG_inventory
i\name=o\name
;load thumbnail, if using preloading, change this to: i\thumb = copyimage (o\thumb)
i\thumb=LoadImage(o\thumbfilename$)
If Not i\thumb Then runtimeerror("Thumbnail Missing! "+o\thumbfilename,1)
i\deletewhenused=o\deletewhenused
i\description=o\description
success=1
EndIf
Next
If Not success Then debuglog("WARNING: Object "+name+" Is not in main database!",0)
End Function
;-------------the following may not work as i just made it up on the fly and may need tweaking (but you can see the idea)------
;to display and 'do' the inventory, returns the selected object name
function doinventory$()
picX=100 ; start position of grid
PicY=100
PicSize=32+1 ; image size + any 'border' it needs
columnmax=9 ; number of columns before going to next line. (could be re-aranged to work on rows)
StepX=0
StepY=0
repeat
;To load eye candy for inventory screen and clear the backbuffer.
;if inventory screen used change following line to: drawimage inventoryscreen,0,0
cls ;or renderworld if to show 3d in background.
selecteditem$=""
for item.ig_inventory=each ig_inventory
item\selected=0
px=picX+(stepx*32)
py=picY+(stepY*32)
drawimage item\thumb, px,py
if mouseX()>px and mousex()<px+PicSize and mouseY()>pY and mouseY()<py+PicSize
selecteditem$=item\name
gx=px
gy=py
endif
stepx=stepx+1:
if stepX=columnmax
stepX=0:
stepY=StepY+1
endif
next
drawimage glow,gx,gy ;you need a glow image for the selected item :)
flip;
vwait()
if mousehit(1) return selecteditem$
if mousehit(2) or keykit(1) return ""
forever
end function
;to use an object
function useobject(name$)
;returns a 1 if successful (player has item)
For i.IG_inventory=Each IG_inventory
if Upper(i\name)=Upper(name$)
if i\deletewhenused Inventory_remove(name$)
return 1
endif
Next
end function
;check to see if player has an object
function hasobject(name$)
;returns a 1 if successful (player has item)
For i.IG_inventory=Each IG_inventory
if Upper(i\name)=Upper(name$)
return 1
endif
Next
end function
EDIT!!!
Although the above is plety fast enough as is, Stevie_G has just made me aware of something that could make the type search much more efficient:
http://www.blitzmax.com/Community/posts.php?topic=72979see his second post!