From 22fdd7acc79fc3ea353074e7ad9a63cfbc894d20 Mon Sep 17 00:00:00 2001 From: ElijahZAwesome Date: Fri, 26 Jan 2018 15:52:38 -0600 Subject: [PATCH] lil' more work on armor, nothing shouuld be broke and stuff should build, but armor isnt ready yet. --- source/Globals.h | 1 + source/Item.h | 2 ++ source/Menu.c | 34 ++++++++++++++++++++++++++++++++++ source/PacketHandler.c | 2 +- source/Render.c | 38 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 1 deletion(-) diff --git a/source/Globals.h b/source/Globals.h index b501a6d..25c09d6 100755 --- a/source/Globals.h +++ b/source/Globals.h @@ -29,6 +29,7 @@ #define MENU_DUNGEON 14 #define MENU_NPC 15 #define MENU_MULTIPLAYER 16 +#define MENU_ARMOR 17 #define NPC_GIRL 0 #define NPC_PRIEST 1 diff --git a/source/Item.h b/source/Item.h index 351abe7..d4cf89f 100755 --- a/source/Item.h +++ b/source/Item.h @@ -82,6 +82,8 @@ #define TOOL_BOW 102 #define TOOL_MAGIC_COMPASS 103 +#define ARMOR_TEST 120 + typedef struct Inventory Inventory; typedef struct { diff --git a/source/Menu.c b/source/Menu.c index bc94c1e..c2afec5 100755 --- a/source/Menu.c +++ b/source/Menu.c @@ -444,6 +444,25 @@ void tickMenu(int menu){ if (k_up.clicked){ --curInvSel; if(curInvSel < 0)curInvSel=player.p.inv->lastSlot-1;} if (k_down.clicked){ ++curInvSel; if(curInvSel > player.p.inv->lastSlot-1)curInvSel=0;} break; + + case MENU_ARMOR: + if (k_delete.clicked || k_decline.clicked){ + currentMenu = MENU_NONE; + player.p.activeItem = &noItem; + player.p.isCarrying = false; + } + if (k_accept.clicked){ // Select item from inventory + if(player.p.inv->lastSlot!=0){ + median = player.p.inv->items[curInvSel]; // create copy of item. + removeItemFromInventory(curInvSel, player.p.inv); // remove original + pushItemToInventoryFront(median, player.p.inv); // add copy to front + playerSetActiveItem(&player.p.inv->items[0]); // active item = copy. + } + currentMenu = MENU_NONE; + } + if (k_up.clicked){ --curInvSel; if(curInvSel < 0)curInvSel=player.p.inv->lastSlot-1;} + if (k_down.clicked){ ++curInvSel; if(curInvSel > player.p.inv->lastSlot-1)curInvSel=0;} + break; case MENU_CRAFTING: if (k_menu.clicked || k_decline.clicked) currentMenu = MENU_NONE; @@ -1176,6 +1195,21 @@ void renderMenu(int menu,int xscr,int yscr){ drawTextColor("Inventory",24,14,0xFF6FE2E2); renderItemList(player.p.inv, 1,1,24,14, curInvSel); sf2d_end_frame(); + break; + case MENU_ARMOR: + sf2d_start_frame(GFX_TOP, GFX_LEFT); + if(currentLevel == 0){ + sf2d_draw_texture_part_scale(minimap[1],(-xscr/3)-256,(-yscr/3)-32,0,0,128,128,12.5,7.5); + sf2d_draw_rectangle(0,0,400,240, 0xAFDFDFDF); + } + offsetX = xscr;offsetY = yscr; + renderMenuBackground(xscr,yscr); + offsetX = 0;offsetY = 0; + renderFrame(1,1,24,14,0xFFFF1010); + drawTextColor("Armor",24+1,14+1,0xFF000000); + drawTextColor("Armor",24,14,0xFF6FE2E2); + renderArmorList(player.p.inv, 1,1,24,14, curInvSel); + sf2d_end_frame(); break; case MENU_CRAFTING: sf2d_start_frame(GFX_TOP, GFX_LEFT); diff --git a/source/PacketHandler.c b/source/PacketHandler.c index a1f2da5..e1ff355 100755 --- a/source/PacketHandler.c +++ b/source/PacketHandler.c @@ -8,7 +8,7 @@ void processPacket(networkPacket *packet, u8 type, u16 sender) { if(type==PACKET_REQUEST_MAPDATA) { u8 level = packet->requestMapData.level; - if(level>=0 && level<=5) { + if(level>=0 && level<=5) { //send back tile data for(int y=0; y<128; y++) { networkPacket packet = { diff --git a/source/Render.c b/source/Render.c index fe0d5ca..8cc64f1 100755 --- a/source/Render.c +++ b/source/Render.c @@ -1338,6 +1338,44 @@ void renderItemList(Inventory * inv, int xo, int yo, int x1, int y1, } } +void renderArmorList(Inventory * inv, int xo, int yo, int x1, int y1, + int selected) { + // If lastSlot is 0, then there are no items are in the inventory. + bool drawCursor = true; + if (selected < 0) { + drawCursor = false; + selected = 0; + } + int w = x1 - xo; + int h = y1 - yo - 2; + int i1 = inv->lastSlot; + if (i1 > h) + i1 = h; + int io = selected - h / 2; + if (io > inv->lastSlot - h) + io = inv->lastSlot - h; + if (io < 0) + io = 0; + + int i; + for (i = 0; i < i1; ++i) { + if(inv->items[i + io].id > 119 && inv->items[i + io].id < 141) { + renderItemWithText(&inv->items[i + io], (1 + xo) << 4, + (i + 1 + yo) << 4); + } + } + + if (drawCursor) { + int yy = selected + 1 - io + yo; + sf2d_draw_rectangle((xo << 4) - (offsetX << 1), + (yy << 4) - (offsetY << 1), 12, 12, 0xFF); + drawText(">", (xo << 4), yy << 4); + sf2d_draw_rectangle(((xo + w) << 4) - 12 - (offsetX << 1), + (yy << 4) - (offsetY << 1), 12, 12, 0xFF); + drawText("<", ((xo + w) << 4) - 12, yy << 4); + } +} + void renderRecipes(RecipeManager * r, int xo, int yo, int x1, int y1, int selected) { int size = r->size; if (size < 1)