Here's what I do. I store information about each item in a grid data structure. Then, when I want to draw the sprites, I just pull information from the structures in a for loop and then draw it on the screen. DS grids are faster than arrayts when handling lots of information, and they aren't merely two dimensional.
EX:
Setting the information:
global.items = ds_grid_create(4,5);
ds_grid_set(global.items,0,0,"Magic Lantern");
ds_grid_set(global.items,0,1,sprLamp);
ds_grid_set(global.items,0,2,view_xview);
ds_grid_set(global.items,0,3,view_yview);
ds_grid_set(global.items,0,4,1);
For example, the last line in this code would set it so you DO have the magic lantern. The second line of code stores the sprite you draw for the c-button. Each item is stored in a different x slot, and all the information is stored in y slots.
Then, you can draw it like this:
for(i = 0; i < 3; i += 1) {
draw_sprite(ds_grid_get(global.items,global.c[i],1),0,ds_grid_get(global.items,global.c[i],2)+cx[i],ds_grid_get(global.items,global.c[i],3)+cy[i]);
}
And you'd have to draw the c buttons, but you get the point, I hope. This is at least how I do it in my game. cx(i] are variables I create which are constants at which I draw the c buttons and items on the screen, so just change those to a value at which you want the sprites to be drawn. Personally, there are my values: "global.c" is a variable which stores the current item I'm using. For example, 1 is the lantern, 2 is the boomerang, etc. So, it pulls information from the grids based on which item is equipped to global.c[0-2]
cx[0] = 187;
cx[1] = 210;
cx[2] = 233;
cy[0] = 26;
cy[1] = 46;
cy[2] = 26;