From 1c4ec84d7525a22e29c7c880b055e86c005b7b8e Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Thu, 12 Oct 2023 18:35:45 -0500 Subject: [PATCH] Implement dummy items and scrollablewindowcomponent setup --- Crawler/Crawler.cpp | 21 ++++ Crawler/Crawler.vcxproj | 1 + Crawler/Crawler.vcxproj.filters | 3 + Crawler/InventoryWindow.cpp | 25 +++-- Crawler/Menu.cpp | 28 ++++-- Crawler/MenuComponent.h | 4 +- Crawler/MenuItemButton.h | 2 +- Crawler/ScrollableWindowComponent.h | 68 +++++++++++++ Crawler/Version.h | 2 +- Crawler/assets/config/items/ItemDatabase.txt | 100 +++++++++++++++++++ Crawler/assets/items/Dummy Item 1.png | Bin 0 -> 621 bytes Crawler/assets/items/Dummy Item 10.png | Bin 0 -> 669 bytes Crawler/assets/items/Dummy Item 11.png | Bin 0 -> 626 bytes Crawler/assets/items/Dummy Item 12.png | Bin 0 -> 683 bytes Crawler/assets/items/Dummy Item 13.png | Bin 0 -> 681 bytes Crawler/assets/items/Dummy Item 14.png | Bin 0 -> 666 bytes Crawler/assets/items/Dummy Item 15.png | Bin 0 -> 671 bytes Crawler/assets/items/Dummy Item 16.png | Bin 0 -> 691 bytes Crawler/assets/items/Dummy Item 17.png | Bin 0 -> 657 bytes Crawler/assets/items/Dummy Item 18.png | Bin 0 -> 695 bytes Crawler/assets/items/Dummy Item 19.png | Bin 0 -> 684 bytes Crawler/assets/items/Dummy Item 2.png | Bin 0 -> 657 bytes Crawler/assets/items/Dummy Item 20.png | Bin 0 -> 699 bytes Crawler/assets/items/Dummy Item 3.png | Bin 0 -> 651 bytes Crawler/assets/items/Dummy Item 4.png | Bin 0 -> 642 bytes Crawler/assets/items/Dummy Item 5.png | Bin 0 -> 649 bytes Crawler/assets/items/Dummy Item 6.png | Bin 0 -> 673 bytes Crawler/assets/items/Dummy Item 7.png | Bin 0 -> 637 bytes Crawler/assets/items/Dummy Item 8.png | Bin 0 -> 668 bytes Crawler/assets/items/Dummy Item 9.png | Bin 0 -> 671 bytes 30 files changed, 232 insertions(+), 22 deletions(-) create mode 100644 Crawler/ScrollableWindowComponent.h create mode 100644 Crawler/assets/items/Dummy Item 1.png create mode 100644 Crawler/assets/items/Dummy Item 10.png create mode 100644 Crawler/assets/items/Dummy Item 11.png create mode 100644 Crawler/assets/items/Dummy Item 12.png create mode 100644 Crawler/assets/items/Dummy Item 13.png create mode 100644 Crawler/assets/items/Dummy Item 14.png create mode 100644 Crawler/assets/items/Dummy Item 15.png create mode 100644 Crawler/assets/items/Dummy Item 16.png create mode 100644 Crawler/assets/items/Dummy Item 17.png create mode 100644 Crawler/assets/items/Dummy Item 18.png create mode 100644 Crawler/assets/items/Dummy Item 19.png create mode 100644 Crawler/assets/items/Dummy Item 2.png create mode 100644 Crawler/assets/items/Dummy Item 20.png create mode 100644 Crawler/assets/items/Dummy Item 3.png create mode 100644 Crawler/assets/items/Dummy Item 4.png create mode 100644 Crawler/assets/items/Dummy Item 5.png create mode 100644 Crawler/assets/items/Dummy Item 6.png create mode 100644 Crawler/assets/items/Dummy Item 7.png create mode 100644 Crawler/assets/items/Dummy Item 8.png create mode 100644 Crawler/assets/items/Dummy Item 9.png diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 2ec3588d..353f9c77 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -108,6 +108,27 @@ bool Crawler::OnUserCreate(){ Inventory::AddItem("Small Health Potion",16); Inventory::AddItem("Large Health Potion",3); Inventory::AddItem("Medium Mana Potion",1); + Inventory::AddItem("Dummy Item 1",78); + Inventory::AddItem("Dummy Item 2",3); + Inventory::AddItem("Dummy Item 3",5); + Inventory::AddItem("Dummy Item 4",8); + Inventory::AddItem("Dummy Item 5",6); + Inventory::AddItem("Dummy Item 6",3); + Inventory::AddItem("Dummy Item 7",5); + Inventory::AddItem("Dummy Item 8",8); + Inventory::AddItem("Dummy Item 9",3); + Inventory::AddItem("Dummy Item 10",4); + Inventory::AddItem("Dummy Item 11",8); + Inventory::AddItem("Dummy Item 12",3); + Inventory::AddItem("Dummy Item 13",6); + Inventory::AddItem("Dummy Item 14",192); + Inventory::AddItem("Dummy Item 15",35); + Inventory::AddItem("Dummy Item 16",6); + Inventory::AddItem("Dummy Item 17",3); + Inventory::AddItem("Dummy Item 18",1); + Inventory::AddItem("Dummy Item 19",8); + Inventory::AddItem("Dummy Item 20",4); + Inventory::AddItem("Bandages",10); Inventory::AddItem("Blue Slime Remains",22); InitializeGraphics(); diff --git a/Crawler/Crawler.vcxproj b/Crawler/Crawler.vcxproj index 4edb87fc..c7e6540e 100644 --- a/Crawler/Crawler.vcxproj +++ b/Crawler/Crawler.vcxproj @@ -295,6 +295,7 @@ + diff --git a/Crawler/Crawler.vcxproj.filters b/Crawler/Crawler.vcxproj.filters index 7f5bcf5f..3cad7224 100644 --- a/Crawler/Crawler.vcxproj.filters +++ b/Crawler/Crawler.vcxproj.filters @@ -186,6 +186,9 @@ Header Files + + Header Files\Interface + diff --git a/Crawler/InventoryWindow.cpp b/Crawler/InventoryWindow.cpp index 3637f5c7..a335cd2a 100644 --- a/Crawler/InventoryWindow.cpp +++ b/Crawler/InventoryWindow.cpp @@ -6,39 +6,42 @@ #include "Item.h" #include "MenuItemButton.h" #include "MenuLabel.h" +#include "ScrollableWindowComponent.h" INCLUDE_GFX typedef Attribute A; Menu*Menu::InitializeInventoryWindow(){ constexpr int invWidth=5; - constexpr int invHeight=3; - constexpr int totalItemSlots=invWidth*invHeight; + constexpr int initialInvHeight=3; constexpr int itemSpacing=8; constexpr int buttonSize=24; constexpr int totalSpacing=buttonSize+itemSpacing; - vf2d windowSize={totalSpacing*invWidth-itemSpacing+1,totalSpacing*(invHeight+1)-itemSpacing+24}; + vf2d windowSize={totalSpacing*invWidth-itemSpacing+1,totalSpacing*(3+1)-itemSpacing+24}; Menu*inventoryWindow=new Menu(CENTERED,windowSize); + ScrollableWindowComponent*inventory=new ScrollableWindowComponent(INVENTORY,{{0,0},{windowSize.x,totalSpacing*3-itemSpacing}},nullptr,[](MenuFuncData data){}); + inventoryWindow->AddComponent("inventory",inventory); + MenuFunc useItemFunc=[](MenuFuncData data){ MenuItemButton*button=(MenuItemButton*)data.component; button->UseItem(); }; - for(int y=0;yAddComponent("item"+std::to_string(itemIndex),button); - } + for(int i=0;iAddComponent(inventoryWindow,"item"+std::to_string(itemIndex),button); } - MenuLabel*itemNameLabel=new MenuLabel{INVENTORY,geom2d::rect(vf2d{2,invHeight*totalSpacing-4},windowSize),"",false,true}; + MenuLabel*itemNameLabel=new MenuLabel{INVENTORY,geom2d::rect(vf2d{2,initialInvHeight*totalSpacing-4},windowSize),"",false,true}; inventoryWindow->AddComponent("itemName",itemNameLabel); - MenuLabel*itemDescriptionLabel=new MenuLabel{INVENTORY,geom2d::rect(vf2d{2,invHeight*totalSpacing+itemSpacing},{windowSize.x-4,windowSize.y-108}),"",true,true}; + MenuLabel*itemDescriptionLabel=new MenuLabel{INVENTORY,geom2d::rect(vf2d{2,initialInvHeight*totalSpacing+itemSpacing},{windowSize.x-4,windowSize.y-108}),"",true,true}; inventoryWindow->AddComponent("itemDescription",itemDescriptionLabel); return inventoryWindow; diff --git a/Crawler/Menu.cpp b/Crawler/Menu.cpp index 1399bcaf..b97dc39f 100644 --- a/Crawler/Menu.cpp +++ b/Crawler/Menu.cpp @@ -131,11 +131,15 @@ void Menu::Update(Crawler*game){ KeyboardButtonNavigation(game,pos); for(auto&key:buttons){ for(auto&button:key.second){ - button->Update(game); + if(button->renderInMain){ + button->Update(game); + } } } for(auto&component:displayComponents){ - component->Update(game); + if(component->renderInMain){ + component->Update(game); + } } }; @@ -152,11 +156,15 @@ void Menu::Draw(Crawler*game){ game->Clear(BLANK); for(auto&key:buttons){ for(auto&button:key.second){ - button->Draw(game,{0,0},this==Menu::stack.back()); + if(button->renderInMain){ + button->Draw(game,{0,0},this==Menu::stack.back()); + } } } for(auto&component:displayComponents){ - component->Draw(game,{0,0},this==Menu::stack.back()); + if(component->renderInMain){ + component->Draw(game,{0,0},this==Menu::stack.back()); + } } game->SetPixelMode(prevMode); game->SetDrawTarget(nullptr); @@ -164,11 +172,15 @@ void Menu::Draw(Crawler*game){ game->DrawDecal(pos,r.Decal()); for(auto&key:buttons){ for(auto&button:key.second){ - button->DrawDecal(game,{0,0},this==Menu::stack.back()); + if(button->renderInMain){ + button->DrawDecal(game,pos,this==Menu::stack.back()); + } } } for(auto&component:displayComponents){ - component->DrawDecal(game,{0,0},this==Menu::stack.back()); + if(component->renderInMain){ + component->DrawDecal(game,pos,this==Menu::stack.back()); + } } if(GetCurrentTheme().IsScaled()){ @@ -195,9 +207,9 @@ void Menu::Draw(Crawler*game){ game->DrawDecal({0,0},overlay.Decal()); if(!MOUSE_NAVIGATION){ MenuComponent*selectedComponent=buttons[selection.y][selection.x]; - draggingComponent->DrawDecal(game,-offsetPos+selectedComponent->rect.pos+vi2d{1,-4},this==Menu::stack.back()); + draggingComponent->DrawDecal(game,pos-offsetPos+selectedComponent->rect.pos+vi2d{1,-4},this==Menu::stack.back()); }else{ - draggingComponent->DrawDecal(game,-pos-offsetPos+game->GetMousePos(),this==Menu::stack.back()); + draggingComponent->DrawDecal(game,-offsetPos+game->GetMousePos(),this==Menu::stack.back()); } } }; diff --git a/Crawler/MenuComponent.h b/Crawler/MenuComponent.h index 418caed6..3077c689 100644 --- a/Crawler/MenuComponent.h +++ b/Crawler/MenuComponent.h @@ -4,8 +4,8 @@ class MenuComponent{ friend class Menu; friend class MenuItemButton; + friend class ScrollableWindowComponent; MenuType menuDest; - bool selectable=true; private: float hoverEffect=0; protected: @@ -16,6 +16,8 @@ protected: MenuFunc onClick; MenuType parentMenu=MenuType::ENUM_END; bool hovered=false; + bool selectable=true; + bool renderInMain=true; //If set to false, this component is the responsibility of some other windowing system and won't be rendered or updated via the main window loop. public: MenuComponent(MenuType parent,geom2d::rectrect,std::string label,MenuFunc onClick,bool selectable=true); MenuComponent(MenuType parent,geom2d::rectrect,std::string label,MenuType menuDest,MenuFunc onClick,bool selectable=true); diff --git a/Crawler/MenuItemButton.h b/Crawler/MenuItemButton.h index 2c64e5a4..acf7a835 100644 --- a/Crawler/MenuItemButton.h +++ b/Crawler/MenuItemButton.h @@ -63,7 +63,7 @@ protected: if(valid){ std::string quantityText="x"+std::to_string(Inventory::GetItemCount(invRef.at(inventoryIndex))); vf2d textSize=vf2d(game->GetTextSizeProp(quantityText))*0.5; - game->DrawShadowStringDecal(Menu::menus[parentMenu]->pos+parentPos+rect.pos+rect.size-textSize,quantityText,WHITE,BLACK,{0.5,0.5},0.5); + game->DrawShadowStringDecal(parentPos+rect.pos+rect.size-textSize,quantityText,WHITE,BLACK,{0.5,0.5},0.5); } } virtual inline MenuComponent*PickUpDraggableItem()override{ diff --git a/Crawler/ScrollableWindowComponent.h b/Crawler/ScrollableWindowComponent.h new file mode 100644 index 00000000..d043afbc --- /dev/null +++ b/Crawler/ScrollableWindowComponent.h @@ -0,0 +1,68 @@ +#pragma once +#include "Menu.h" +#include "MenuComponent.h" +#include "Crawler.h" + +class ScrollableWindowComponent:public MenuComponent{ +protected: + Renderable r; + std::vectorcomponents; + vf2d scrollOffset{}; + geom2d::rectbounds; +public: + inline ScrollableWindowComponent(MenuType parent,geom2d::rectrect,Decal*icon,MenuFunc onClick) + :MenuComponent(parent,rect,"",onClick,false){ + r.Create(rect.size.x,rect.size.y); + } +protected: + virtual inline void Update(Crawler*game)override{ + MenuComponent::Update(game); + for(MenuComponent*component:components){ + component->Update(game); + } + } + virtual inline void Draw(Crawler*game,vf2d parentPos,bool focused)override{ + MenuComponent::Draw(game,parentPos,focused); + Sprite*prevDrawTarget=game->GetDrawTarget(); + game->SetDrawTarget(r.Sprite()); + game->Clear(BLANK); + for(MenuComponent*component:components){ + component->Draw(game,scrollOffset,focused); + } + game->SetDrawTarget(prevDrawTarget); + game->DrawSprite(parentPos,r.Sprite()); + } + virtual inline void DrawDecal(Crawler*game,vf2d parentPos,bool focused)override{ + MenuComponent::DrawDecal(game,parentPos,focused); + game->DrawRectDecal(parentPos,rect.size); + for(MenuComponent*component:components){ + component->DrawDecal(game,parentPos+scrollOffset,focused); + } + } +public: + void inline AddComponent(Menu*parentMenu,std::string key,MenuComponent*button){ + components.push_back(button); + button->renderInMain=false; //Now we are in control! + + if(button->rect.pos.xrect.pos.x; + bounds.size.x+=sizeIncrease; + bounds.pos.x=button->rect.pos.x; + } + if(button->rect.right().start.x>bounds.right().start.x){ + float sizeIncrease=button->rect.right().start.x-bounds.right().start.x; + bounds.size.x+=sizeIncrease; + } + if(button->rect.pos.yrect.pos.y; + bounds.size.y+=sizeIncrease; + bounds.pos.y=button->rect.pos.y; + } + if(button->rect.bottom().start.y>bounds.bottom().start.y){ + float sizeIncrease=button->rect.bottom().start.y-bounds.bottom().start.y; + bounds.size.y+=sizeIncrease; + } + + parentMenu->AddComponent(key,button); + } +}; \ No newline at end of file diff --git a/Crawler/Version.h b/Crawler/Version.h index 2498cb57..929ddfcd 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -2,7 +2,7 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 0 -#define VERSION_BUILD 1954 +#define VERSION_BUILD 1972 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Crawler/assets/config/items/ItemDatabase.txt b/Crawler/assets/config/items/ItemDatabase.txt index 78080fb8..66786956 100644 --- a/Crawler/assets/config/items/ItemDatabase.txt +++ b/Crawler/assets/config/items/ItemDatabase.txt @@ -42,6 +42,106 @@ ItemDatabase MP Restore = 320 ItemCategory = Consumables } + Dummy Item 1 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 2 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 3 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 4 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 5 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 6 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 7 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 8 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 9 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 10 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 11 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 12 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 13 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 14 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 15 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 16 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 17 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 18 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 19 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } + Dummy Item 20 + { + Description = Does nothing apparently. + ItemCategory = Consumables + } Bandages { ItemScript = Restore diff --git a/Crawler/assets/items/Dummy Item 1.png b/Crawler/assets/items/Dummy Item 1.png new file mode 100644 index 0000000000000000000000000000000000000000..aadcffd56435f10ee8470aaed34aa2e7f8d33f1a GIT binary patch literal 621 zcmV-z0+RiSP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{002cvL_t(Y$L*BC2>>t%15I)NmD34|iux(Jx8w*&%)~S# zS-JO((3GGPT513Q9jRx6JDlyOkU#EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004DKL_t(Y$L*9$3cw%?M14c=f8}%)5Nkuz;6iYAVw`-4 zueGB;GBeA@yT&`-OaUr|`1>nc?aaI{X7rN>xGLuT*<EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{002r!L_t(Y$L*9c3IHGs0~6{0zg$k literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 12.png b/Crawler/assets/items/Dummy Item 12.png new file mode 100644 index 0000000000000000000000000000000000000000..2a6bc0b7b9674d0ad38811f72d5789439a4180b6 GIT binary patch literal 683 zcmV;c0#yBpP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004tYL_t(Y$L&->4!|G`D$V}?Wp;6ib85TU9+t?_6i|W{ z*)V|KAxQ#&MJCCIV8g>`cxKQO9&rzA*eg^U-x6pISn$=96+}eTll2NTyG8#sxS|g= z=#@h=#OvZ{rg(_KOnlkE5)X@L_E~lH_SPoQs5%Z`_iDJ@*2@8a^i{E8;sn*SSPIw{ Ru+#tm002ovPDHLkV1hi+Cj$Tg literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 13.png b/Crawler/assets/items/Dummy Item 13.png new file mode 100644 index 0000000000000000000000000000000000000000..65c0a9484836f156827e56d90ed6470c906998c5 GIT binary patch literal 681 zcmV;a0#^NrP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004nWL_t(Y$L&-}4gettv&R2_xpNs3qbM$TFtJAiZ7h@! z9t=QxBuN0Unn|)EEc(zYwgfbCtv^|XBP2cHD20L@a!n}Ckggz}-lAgy;*6_+_@3LI zJP3QkcejW?nn~8ax%w*rxNnP&&*1)`RabfDn&$p$+g5JScF;z{_Rz%#t!GFt{!$kx P00000NkvXXu0mjffo37z literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 14.png b/Crawler/assets/items/Dummy Item 14.png new file mode 100644 index 0000000000000000000000000000000000000000..03f1659bb6eb72590b734b325de72b81f6b3e251 GIT binary patch literal 666 zcmV;L0%iS)P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{0044HL_t(Y$L*BC3cw%?LsRMh|8jR4bVF&?6g-%t!b=*l zz}1S(%vdaCLOnx71OSwkcEnNd#;ykdnuqVE@3C4XoMI4GRGEIuAOkEX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004JML_t(Y$L*BC4!|G?LoMO|f0oDntE3v3@(YxSbTn>Z?~jKBvyL*4AGx7A zh;UzzB0t*o9C(V#9Q0A)&F2EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004_gL_t(Y$L&;G4!|G?v&Q>hx%=4`H3B0@vSjNgV0jfw z`C$MnBS`{)hlnHx;`2SM059>((X;>$`CQQDYqRrdLXEt)Rqw1NA_+A*8VfaBrftV~ zRvq0th*l_#Yfw>?T$1RP4m1^!WXh8Jr0FVpX9Calr^vKd7d&UL$#Hdb;RM>DML*FG Z;Q+5dTqTfMXlwug002ovPDHLkV1gG4B@X}q literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 17.png b/Crawler/assets/items/Dummy Item 17.png new file mode 100644 index 0000000000000000000000000000000000000000..2552558d5bb22df15d792871134ddd0aa03192c9 GIT binary patch literal 657 zcmV;C0&e|@P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003!8L_t(Y$L*9$4uBvKLutePuUt2>F`xod6M|in@;bki zevL?yqP+5mY0ujnN&AXMr)E8i2LZqtfUb%ZaJnawPWsRfYUb;ds71d@0eTMGwG4ODGo8SG=J(M7Hlj!T_y@NQ00000NkvXXu0mjf+0qxl literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 18.png b/Crawler/assets/items/Dummy Item 18.png new file mode 100644 index 0000000000000000000000000000000000000000..0312411b9d2912dc55789176c30256b6083a7c46 GIT binary patch literal 695 zcmV;o0!aOdP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{0056kL_t(Y$L&?Y7JwiK6aN37*NGmIB#PYJDTxh(X{}vM zK%*c45D`U10H709T#6(`g-3kyl4b=oPv_b=%Y$IK$A)9qyd$~-u69wnfSsYN-ywU1 zjEgik^#!9%e1?3oJrdJ#&Wd{$m-l>X=U&T7X8-^t=ir!&$`6`1i_QRlSMIF8k@$9j d=>OniiU&?iWH(bS=}!Ov002ovPDHLkV1hErDQ*A& literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 19.png b/Crawler/assets/items/Dummy Item 19.png new file mode 100644 index 0000000000000000000000000000000000000000..3a82e1550b654bf92f67024ba609886115b01fa8 GIT binary patch literal 684 zcmV;d0#p5oP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004wZL_t(Y$L&-}3IHJtYl{E>a_3Z$fVk9x!%R-1HFZfM z@?!^PW~=oMUPF%*03rwR{pb~q8u&i0Yxw{`ec*^bA#>;~>CP=hL^NA0nytvY8_f7c zPk$~qEg7x{Q2kY+5@loYT=)hfFQlrdM#Zaqz#)j0>~G(jiF$E=T&9um{3ssU&{!z- SC2gYs0000EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003!8L_t(Y$L*9$3cw%`Lyh;p^K@I)xVSEDnSfxwxo0-38r{yBgNc_snB^3jqNl>m-84RFonE>g{< rkR5YsH0svSFG!8!y8cYrZM8Z8lVdm%Ma#8@00000NkvXXu0mjfNDLPy literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 20.png b/Crawler/assets/items/Dummy Item 20.png new file mode 100644 index 0000000000000000000000000000000000000000..9f1e19ec6bcfa33f9add0cebed5a4cfa729f2854 GIT binary patch literal 699 zcmV;s0!00ZP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{005IoL_t(Y$L&-}62Kq`BTWDQ<@D5!Rji13YPm8=SOOw{ z3<4q|B-tbYcu7ipje|w*74cvXi|7K9WKX15buEfW+i$rt4*8D3|~M literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 3.png b/Crawler/assets/items/Dummy Item 3.png new file mode 100644 index 0000000000000000000000000000000000000000..4060943019554df06771bb1abd41bdd651eda423 GIT binary patch literal 651 zcmV;60(AX}P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003i2L_t(Y$L&=?3IHGo)9C+Swo?!!tdT-sJDbaGmdFQy zq5?Cs?U1U55O~d5q7HB1G(p6aL})TJMawq%Z2~4ul>VV6r|toYEX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003G^L_t(Y$L*9m3IH$&L#y|{v)#HB@mmyX_9Tyht~II_ zSPeu(#|$9)(HpK6zMcrJ^qN`B1>W!;6GiC7f@pZ{L>csKK~^~XDy$cq0dfIoA^N literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 5.png b/Crawler/assets/items/Dummy Item 5.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5b2e5cb344944e74a2974fa0e6d334f89a0955 GIT binary patch literal 649 zcmV;40(Sk0P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003c0L_t(Y$L&wP9QAa92E{a7h9-DlfNl|c4|h#bA-Wy2C?evjA0v{pMa-ddCO|&HEeViS jHN@#4Vw_)lXdfmz51Aw-3bfX300000NkvXXu0mjfmvIeJ literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 6.png b/Crawler/assets/items/Dummy Item 6.png new file mode 100644 index 0000000000000000000000000000000000000000..3a9a8ccbd6283e3932e06ee17181cf5d3fd5841f GIT binary patch literal 673 zcmV;S0$%-zP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004POL_t(Y$L&=?4!|G`vc~^^xw|^ERcKju*f?7V6t%S< z8yIug-TgFdW)gvwm=PHa`AQZELk=Qx6dhVrk~|bZ?8_WfFwl6e93j#5N==a%;hJVD zDrwP9D7|E~x{tT$J%P&YmDKdEU6jB)Jc}^TNa;UN#rSa?*$YG)DYkqP00000NkvXX Hu0mjfDAyW* literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 7.png b/Crawler/assets/items/Dummy Item 7.png new file mode 100644 index 0000000000000000000000000000000000000000..bd791007ac92a9f695ddf3f6114f420a9b0b3a95 GIT binary patch literal 637 zcmV-@0)qXCP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00312)>di_5X z5K_l9q+LHaeL#xq>0&t3kPjM~`+$j9*VEJjV#*w{Eub_>4vsh=H+TqIK(ib>3XlN+ XJR&#j^E&*Y00000NkvXXu0mjf?c52R literal 0 HcmV?d00001 diff --git a/Crawler/assets/items/Dummy Item 8.png b/Crawler/assets/items/Dummy Item 8.png new file mode 100644 index 0000000000000000000000000000000000000000..213225e41c3224963291eb72526de8f25e51d043 GIT binary patch literal 668 zcmV;N0%QG&P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004AJL_t(Y$L*8B4!|G?L#_Y+&v-J~h-jCRjDx*tw1mQI z?dl+~56#S89|5Ek@Wx+@fHi-bMfWRps!eCY#zPlSRHJ|&^gPQ$-fdCZnko#`;UHo_ z;y}%w-lCP^uA?*#*iQZjEsB7JtuqlsB$wde>Zk$7phzK{T)Ei*0000EX>4Tx04R}tkv&MmKpe$iQ>9WW4ptO#$WWc^qD35~ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@Uljwd2qJ`G3?U{lQ%`0Vv+x{W_we!cF3PjK&;2?2m4e9tpGZ8%bi*RvAfDN@ zbk6(4VOEwD;&b9jgDyz?$aUG}H_j!81)do;vgvu^FtJ$bV!4Z1*-(jN#1Tc+C|}6A ztZ?4qtXAu+eNXeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004JML_t(Y$L*BC4uBvGL#grqe|cVv5lCEVAztVi`WV|< z%2pz<2O}b$O8}+;-p1W!0tCjqH5#erSoQK0pqNPjr$luZmmt6t!up>;#l0a|3Xz(goveL>QYY8+rf$002ovPDHLk FV1jh28%qEH literal 0 HcmV?d00001