/// @description Draw the inventory for one or more Characters. /// @param [secondary] (Optional) The second Solid to draw the inventory of // Some placement variables var frame_width=320; var border_width=2; var frame_bottom=640; var text_y=frame_bottom+(720-frame_bottom)/3; var text_y_b=frame_bottom+(720-frame_bottom)*2/3; // Create the required lists var list=ds_list_create(); var list_int=ds_list_create(); var list_owner=ds_list_create(); var list_quantity=ds_list_create(); if (argument_count==1&&argument[0]!=noone){ ds_list_add(list, argument[0].name); ds_list_add(list_int, ItemClasses.no); ds_list_add(list_owner, argument[0]); ds_list_add(list_quantity, ds_list_size(argument[0].inventory)); var category=ItemClasses.no; for (var i=0; i0){ pause_greater=PauseInventoryScreens.contents; pause_lesser_position=0; } } else if (Controller.release_b||Controller.release_left){ drawPauseMenuQuit(); } else if (Controller.release_x){ var owner=list_owner[| pause_greater_position]; if (argument_count==1&&argument[0]!=noone&&!pause_exchange_money&&owner==argument[0]){ drawPauseMenuTakeAll(argument[0]); drawPauseMenuQuit(); } } } else { // Draw the outer frame draw_set_color(c_black); draw_set_alpha(pause_base_alpha); draw_rectangle(frame_width+pause_menu_offset, 0, 2*frame_width+pause_menu_offset, 720, false); draw_set_alpha(1); draw_line_width(2*frame_width+pause_menu_offset, 0, 2*frame_width+pause_menu_offset, 720, border_width); draw_set_color(c_white); // Fill the item list var list_item=ds_list_create(); var owner=list_owner[| pause_greater_position]; for (var i=0; i1){ var suffix=" ("+string(stack.quantity)+")"; } else { var suffix=""; } draw_text(frame_width+96+pause_menu_offset, 64+32*i, spacing+base_item.name+suffix); } pause_lesser_position=min(ds_list_size(list_item)-1, pause_lesser_position); draw_sprite(spr_menu_arrow, 0, frame_width+32+pause_menu_offset, 64+32*pause_lesser_position); pause_inventory_temp_category=list[| pause_greater_position]; pause_inventory_temp_owner=list_owner[| pause_greater_position]; switch (pause_greater){ case PauseInventoryScreens.contents: // Draw the item summary var x1=640+80; var y1=360-160-128; var x2=1280-80; var y2=360+160-128; var center_x=(x1+x2)/2; var center_y=(y1+y2)/2; var text_width=(x2-x1)-64; var stack=list_item[| pause_lesser_position]; var base_item=World.all_items[stack.index]; var owner=list_owner[| pause_greater_position]; drawPauseMenuInventoryBox(x1, y1, x2, y2, border_width); draw_set_color(c_white); draw_set_halign(fa_center); draw_set_font(FontPauseRose); draw_text(center_x, center_y, base_item.name); draw_sprite_ext(base_item.sprite_index, pause_menu_image_index, center_x, (center_y+y1)/2, 2, 2, 0, c_white, 1); draw_set_font(FontPauseRegular); draw_line_width(x1+32, center_y+32, x2-32, center_y+32, border_width); var str=""; if (base_item.base_power>0){ str="Power: "+string(base_item.base_power)+" | "; } str=str+"Weight: "+string(base_item.weight)+" | Value: " if (owner==Player){ str=str+string(get_sell_price(base_item)); } else { str=str+string(get_buy_price(base_item)); } draw_text(center_x, center_y+64, str); var y1=360+160-96; var y2=360+160; var center_y=(y1+y2)/2; drawPauseMenuInventoryBox(x1, y1, x2, y2, border_width); draw_set_color(c_white); draw_text_ext(center_x, center_y, base_item.description, -1, text_width); // Controls if (Controller.release_up){ pause_lesser_position=max(--pause_lesser_position, 0); } else if (Controller.release_down){ pause_lesser_position=min(++pause_lesser_position, ds_list_size(list_item)-1); } else if (Controller.release_a||Controller.release_l||Controller.release_r){ if (owner==Player){ script_execute(base_item.use_script, stack, Controller.release_l); } else { // If you must pay if (pause_exchange_money){ if (stack.quantity>5){ pause_greater=PauseInventoryScreens.quantity_transaction; pause_inventory_transaction_quantity=1; } else { var amt=get_buy_price(base_item); if (GetGold(Player)>=amt){ RemoveGold(Player, amt); AddGold(owner, amt); AddItem(Player, stack.index, 1); if (stack.quantity==1&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, 1, owner); } } // If you may take freely } else { if (stack.quantity>5&&stack.index!=Items.gold){ pause_greater=PauseInventoryScreens.quantity_transaction; pause_inventory_transaction_quantity=1; } else { if (stack.index==Items.gold){ var n=stack.quantity; } else { var n=1; } if (owner!=noone){ // @todo Stealing } AddItem(Player, stack.index, n); if (stack.quantity==n&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, n, owner); } } } } else if (Controller.release_b||Controller.release_left){ pause_greater=PauseInventoryScreens.base; } else if (Controller.release_x){ // If you are giving to someone else if (argument_count==1&&argument[0]!=noone){ // If this is your inventory if (owner==Player){ // If you must be paid if (pause_exchange_money){ if (stack.quantity>5){ pause_greater=PauseInventoryScreens.quantity_transaction; } else { var amt=get_sell_price(base_item); if (GetGold(argument[0])>=amt){ AddGold(Player, amt); RemoveGold(argument[0], amt); AddItem(argument[0], stack.index, 1); if (stack.quantity==1&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, 1, Player); } } // If you may give freely } else { if (stack.quantity>5){ pause_greater=PauseInventoryScreens.quantity_transaction; pause_inventory_transaction_quantity=1; } else { AddItem(argument[0], stack.index, 1); if (stack.quantity==1&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, 1, Player); } } // If this is a container inventory } else { drawPauseMenuTakeAll(owner); drawPauseMenuQuit(); } // If you are just chucking the items } else { if (stack.quantity>5){ pause_greater=PauseInventoryScreens.quantity_toss; pause_inventory_transaction_quantity=1; } else { if (stack.quantity==1&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, 1, Player); } } } break; case PauseInventoryScreens.quantity_transaction: var x1=640+80; var y1=360-160; var x2=1280-80; var y2=360+160; var center_x=(x1+x2)/2; var center_y=(y1+y2)/2; var text_width=(x2-x1)-64; var stack=list_item[| pause_lesser_position]; var base_item=World.all_items[stack.index]; var owner=list_owner[| pause_greater_position]; drawPauseMenuInventoryBox(x1, y1, x2, y2, border_width); draw_set_halign(fa_center); draw_set_color(c_white); draw_text(center_x, center_y, "How many?"); draw_text(center_x, center_y+32, string(floor(pause_inventory_transaction_quantity))+"/"+string(stack.quantity)); var rate=stack.quantity/120; if (Controller.left){ pause_inventory_transaction_quantity=max(pause_inventory_transaction_quantity-rate, 0); } else if (Controller.right){ pause_inventory_transaction_quantity=min(pause_inventory_transaction_quantity+rate, stack.quantity); } else if (Controller.release_a){ var qty=floor(pause_inventory_transaction_quantity); pause_greater=PauseInventoryScreens.contents; // this may be overwritten later if there's nothing left in "contents" if (owner==Player){ // If you will be paid if (pause_exchange_money){ var cost=qty*get_sell_price(base_item); if (GetGold(argument[0])>=cost){ AddGold(Player, cost); RemoveGold(argument[0], cost); AddItem(argument[0], stack.index, qty); if (stack.quantity==qty&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, qty, Player); } else { var safe_qty=GetGold(argument[0]) div get_sell_price(base_item); var safe_cost=safe_qty*get_sell_price(base_item); RemoveGold(argument[0], safe_cost); AddGold(Player, safe_cost); AddItem(argument[0], stack.index, safe_qty); if (stack.quantity==qty&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, safe_qty, Player); } // If you are giving freely } else { AddItem(argument[0], stack.index, qty); if (stack.quantity==qty&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, qty, Player); } } else { // If you must pay if (pause_exchange_money){ var cost=qty*get_buy_price(base_item); if (GetGold(Player)>=cost){ RemoveGold(Player, cost); AddGold(owner, cost); AddItem(Player, stack.index, qty); if (stack.quantity==qty&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, qty, owner); } else { var safe_qty=GetGold(Player) div get_buy_price(base_item); var safe_cost=safe_qty*get_buy_price(base_item); RemoveGold(Player, safe_cost); AddGold(owner, safe_cost); AddItem(Player, stack.index, safe_qty); if (stack.quantity==qty&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, safe_qty, owner); } // If you may take freely } else { if (owner!=noone){ // @todo Stealing } AddItem(Player, stack.index, qty); if (stack.quantity==qty&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, qty, owner); } } } else if (Controller.release_b){ pause_greater=PauseInventoryScreens.contents; } // After the value(s) are updated draw potential price text. if (pause_exchange_money){ var qty=floor(pause_inventory_transaction_quantity); if (owner==Player){ var cost=qty*get_sell_price(base_item); draw_text(center_x, center_y+64, "You will recieve "+string(cost)+" gold."); if (cost>GetGold(argument[0])){ draw_text(center_x, center_y+96, "("+argument[0].name+" does not have this much gold.)"); } } else { var cost=qty*get_buy_price(base_item); draw_text(center_x, center_y+64, "You must pay "+string(cost)+" gold."); if (cost>GetGold(Player)){ draw_text(center_x, center_y+96, "(You do not have this much gold.)"); } } } break; case PauseInventoryScreens.quantity_toss: var x1=640+80; var y1=360-160; var x2=1280-80; var y2=360+160; var center_x=(x1+x2)/2; var center_y=(y1+y2)/2; var text_width=(x2-x1)-64; var stack=list_item[| pause_lesser_position]; var base_item=World.all_items[stack.index]; drawPauseMenuInventoryBox(x1, y1, x2, y2, border_width); draw_set_halign(fa_center); draw_set_color(c_white); draw_text(center_x, center_y, "How many?"); draw_text(center_x, center_y+32, string(floor(pause_inventory_transaction_quantity))+"/"+string(stack.quantity)); var rate=stack.quantity/120; if (Controller.left){ pause_inventory_transaction_quantity=max(pause_inventory_transaction_quantity-rate, 0); } else if (Controller.right){ pause_inventory_transaction_quantity=min(pause_inventory_transaction_quantity+rate, stack.quantity); } else if (Controller.release_a){ pause_greater=PauseInventoryScreens.contents; // this may be overwritten later if there's nothing left in "contents" var qty=floor(pause_inventory_transaction_quantity); if (stack.quantity==qty&&ds_list_size(list_item)==1){ pause_greater=PauseInventoryScreens.base; } RemoveItem(stack.index, qty, Player); } else if (Controller.release_b){ pause_greater=PauseInventoryScreens.contents; } break; case PauseInventoryScreens.poison: var x1=640+80; var y1=360-160; var x2=1280-80; var y2=360+160; var center_x=(x1+x2)/2; var center_y=(y1+y2)/2; var text_width=(x2-x1)-64; var stack=list_item[| pause_lesser_position]; var base_item=World.all_items[stack.index]; var stack_weapon=Player.equip_right; var base_weapon=World.all_items[stack_weapon.index]; draw_text_ext(center_x, center_y, "Would you like to poison your "+base_weapon.name+" with the "+base_item.name+"?", -1, text_width); // @todo Finish this break; } ds_list_destroy(list_item); } // Clean up pause_menu_offset=lerp(pause_menu_offset, 0, 0.1); pause_menu_image_index=pause_menu_image_index+ANIMATION_ITEM_PER_SECOND/game_get_speed(gamespeed_fps); ds_list_destroy(list); ds_list_destroy(list_int); ds_list_destroy(list_owner);