Corrected amount values drawn from inventory amt function and GetItemCount() functions. Added ability for Loadout items to be used on the field. Treated as abilities, and setup keybinds.

pull/28/head
sigonasr2 1 year ago
parent 933fc16cce
commit 45c6d22ee0
  1. 2
      Crawler/Ability.cpp
  2. 3
      Crawler/Ability.h
  3. 43
      Crawler/Crawler.cpp
  4. 35
      Crawler/Item.cpp
  5. 14
      Crawler/Item.h
  6. 59
      Crawler/Player.cpp
  7. 17
      Crawler/Player.h
  8. 2
      Crawler/Version.h
  9. 4
      Crawler/assets/Campaigns/1_1_v2.tmx
  10. 2
      Crawler/assets/config/configuration.txt
  11. 54
      Crawler/assets/config/items/ItemDatabase.txt
  12. 5
      Crawler/assets/config/items/items.txt

@ -48,4 +48,4 @@ InputGroup Ability::DEFAULT;
Ability::Ability()
:name("???"),shortName("???"),description("???"),cooldown(0),COOLDOWN_TIME(0),input(&DEFAULT){};
Ability::Ability(std::string name,std::string shortName,std::string description,float cooldownTime,int manaCost,InputGroup*input,std::string icon,Pixel barColor1,Pixel barColor2,PrecastData precastInfo,bool canCancelCast)
:name(name),shortName(shortName),description(description),cooldown(0),COOLDOWN_TIME(cooldownTime),manaCost(manaCost),input(input),icon("Ability Icons/"+icon),barColor1(barColor1),barColor2(barColor2),precastInfo(precastInfo),canCancelCast(canCancelCast){}
:name(name),shortName(shortName),description(description),cooldown(0),COOLDOWN_TIME(cooldownTime),manaCost(manaCost),input(input),icon(icon),barColor1(barColor1),barColor2(barColor2),precastInfo(precastInfo),canCancelCast(canCancelCast){}

@ -62,6 +62,9 @@ struct Ability{
bool canCancelCast=false;
InputGroup*input;
std::string icon;
//Ability action function, returns true if the ability can be casted, otherwise returns false.
// Argument 1: Player* - player pointer
// Argument 2: vf2d - The returned precast target position (if the ability needs to be aimed, otherwise {})
std::function<bool(Player*,vf2d)>action=[](Player*,vf2d){return false;};
static InputGroup DEFAULT;
Ability();

@ -1176,6 +1176,7 @@ void Crawler::RenderHud(){
if("debug_player_info"_I){
DrawShadowStringDecal({0,128},player->GetPos().str());
DrawShadowStringDecal({0,136},"Spd: "+std::to_string(player->GetMoveSpdMult()));
DrawShadowStringDecal({0,92},"Loadout Slot 1 Qty: "+std::to_string(GetLoadoutItem(0).Amt()));
DrawShadowStringDecal({0,1},"Selection: "+Menu::menus[INVENTORY]->selection.str());
DrawShadowStringDecal({0,12},"Button Hold Time: "+std::to_string(Menu::menus[INVENTORY]->buttonHoldTime));
}}
@ -1829,6 +1830,9 @@ void Crawler::InitializeDefaultKeybinds(){
Player::KEY_ABILITY3.AddKeybind({KEY,R});
Player::KEY_ABILITY4.AddKeybind({KEY,F});
Player::KEY_DEFENSIVE.AddKeybind({MOUSE,Mouse::RIGHT});
Player::KEY_ITEM1.AddKeybind({KEY,K1});
Player::KEY_ITEM2.AddKeybind({KEY,K2});
Player::KEY_ITEM3.AddKeybind({KEY,K3});
KEY_ATTACK.AddKeybind({MOUSE,Mouse::LEFT});
KEY_LEFT.AddKeybind({KEY,LEFT});
KEY_LEFT.AddKeybind({KEY,A});
@ -2038,6 +2042,44 @@ void Crawler::SetLoadoutItem(int slot,std::string itemName){
if(Inventory::GetItemCount(itemName)>0){
GetLoadoutItem(slot)=Inventory::GetItem(itemName);
GetLoadoutItem(slot).amt=std::min((uint32_t)"Player.Item Loadout Limit"_I,GetLoadoutItem(slot).Amt()); //We are only allowed to have up to 10 maximum of an item on a journey.
InputGroup*inputGroup=nullptr;
switch(slot){
case 0:{
inputGroup=&Player::KEY_ITEM1;
}break;
case 1:{
inputGroup=&Player::KEY_ITEM2;
}break;
case 2:{
inputGroup=&Player::KEY_ITEM3;
}break;
}
Ability itemAbility{itemName,"","","Item.Item Cooldown Time"_F,0,inputGroup,"items/"+itemName,VERY_DARK_RED,DARK_RED,PrecastData{GetLoadoutItem(slot).CastTime(),0,0},true};
switch(slot){
case 0:{
itemAbility.action=[&](Player*p,vf2d pos={}){
game->UseLoadoutItem(0);
return true;
};
game->GetPlayer()->SetItem1UseFunc(itemAbility);
}break;
case 1:{
itemAbility.action=[&](Player*p,vf2d pos={}){
game->UseLoadoutItem(1);
return true;
};
game->GetPlayer()->SetItem2UseFunc(itemAbility);
}break;
case 2:{
itemAbility.action=[&](Player*p,vf2d pos={}){
game->UseLoadoutItem(2);
return true;
};
game->GetPlayer()->SetItem3UseFunc(itemAbility);
}break;
}
}else{
ERR("Trying to set item "+itemName+" in Loadout slot "+std::to_string(slot)+" when said item does not exist in our inventory!");
}
@ -2050,6 +2092,7 @@ void Crawler::UseLoadoutItem(int slot){
GetLoadoutItem(slot).OnUseAction();
GetLoadoutItem(slot).amt--;
}
olc_UpdateKeyState(K1,false);
}
void Crawler::ClearLoadoutItem(int slot){

@ -68,6 +68,8 @@ void ItemInfo::InitializeItems(){
img.Load(imgPath);
std::string scriptName="",description="",category="";
float castTime=0;
float cooldownTime="Item.Item Cooldown Time"_F;
for(auto&itemKey:DATA["ItemDatabase"][key.first].GetKeys()){
std::string keyName=itemKey.first;
if(keyName=="Description"){
@ -78,6 +80,12 @@ void ItemInfo::InitializeItems(){
}else
if(keyName=="ItemScript"){
scriptName=DATA["ItemDatabase"][key.first][keyName].GetString();
}else
if(keyName=="Cast Time"){
castTime=DATA["ItemDatabase"][key.first][keyName].GetReal();
}else
if(keyName=="Cooldown Time"){
castTime=DATA["ItemDatabase"][key.first][keyName].GetReal();
}else{ //THis is a custom override modifier for a script. NO-OP
}
}
@ -92,6 +100,8 @@ void ItemInfo::InitializeItems(){
it.name=key.first;
it.description=description;
it.category=category;
it.castTime=castTime;
it.cooldownTime=cooldownTime;
if(!ITEM_CATEGORIES.count(it.category)){
ERR("WARNING! Tried to add item "<<it.name<<" to category "<<it.category<<" which does not exist!")
}
@ -204,10 +214,15 @@ bool Inventory::RemoveItem(IT it,ITCategory inventory,uint32_t amt){
}
#pragma endregion
uint32_t itemAmt=GetItemCount(it);
if(inventory=="Monster Loot"||inventory=="Stage Loot"){
itemAmt=inv.at(count).Amt();
}
//There are two places to manipulate items in (Both the sorted inventory and the actual inventory)
if (!inv.at(count).Amt())return false;
if (!itemAmt)return false;
if (amt>=inv.at(count).Amt()){
if (amt>=itemAmt){
inv.erase(inv.begin()+count);
if(!eraseFromLootWindow){
_inventory.erase(it);
@ -361,3 +376,19 @@ void ItemOverlay::Draw(){
void ItemOverlay::AddToItemOverlay(const ItemInfo&it){
items.push_back(ItemOverlay{it});
}
float ItemInfo::CastTime(){
return castTime;
}
float ItemInfo::CooldownTime(){
return cooldownTime;
}
float Item::CastTime(){
return it->CastTime();
}
float Item::CooldownTime(){
return it->CooldownTime();
}

@ -51,6 +51,7 @@ class Item{
friend class Inventory;
friend class Crawler;
private:
//The amount in the current item stack.
uint32_t amt;
ItemInfo*it;
public:
@ -62,6 +63,8 @@ public:
ITCategory Category();
Decal*Decal();
ItemScript&OnUseAction();
float CastTime();
float CooldownTime();
bool IsBlank();
static Item BLANK;
bool operator==(const Item&rhs)const;
@ -69,8 +72,10 @@ public:
class Inventory{
friend class ItemInfo;
friend class Item;
public:
static void AddItem(IT it,uint32_t amt=1,bool monsterDrop=false);
//Returns the actual amount available in your main inventory.
static uint32_t GetItemCount(IT it);
static Item GetItem(IT it);
//Auto-executes its use function and removes the amt specified from the inventory. Multiple amounts will cause the item to execute its useFunc multiple times.
@ -91,6 +96,7 @@ private:
static void InsertIntoStageInventoryCategory(IT item,uint32_t amt,bool monsterDrop);
static bool ExecuteAction(IT item);
static std::map<IT,Item>_inventory;
//Only contains "1" of every item, as this is a map to index items and not the actual storage of items!
static std::map<ITCategory,std::vector<Item>>sortedInv;
};
@ -110,6 +116,8 @@ class ItemInfo{
std::string name;
std::string description;
std::string category;
float castTime=0;
float cooldownTime=0;
Decal*img;
//Returns true if the item can be used, false otherwise
std::string useFunc="";
@ -126,10 +134,12 @@ public:
std::string Description();
ITCategory Category();
Decal*Decal();
ItemScript&OnUseAction();
/*
For the useFunc, return true if the item can be used, false otherwise.
For the useFunc, return true if the item can be used, false otherwise.
*/
ItemScript&OnUseAction();
float CastTime();
float CooldownTime();
};
class ItemOverlay{

@ -60,6 +60,9 @@ InputGroup Player::KEY_ABILITY2;
InputGroup Player::KEY_ABILITY3;
InputGroup Player::KEY_ABILITY4;
InputGroup Player::KEY_DEFENSIVE;
InputGroup Player::KEY_ITEM1;
InputGroup Player::KEY_ITEM2;
InputGroup Player::KEY_ITEM3;
Player::Player()
:lastReleasedMovementKey(DOWN),facingDirection(DOWN),state(State::NORMAL){
@ -217,7 +220,10 @@ void Player::Update(float fElapsedTime){
&ability=GetAbility1(),
&ability2=GetAbility2(),
&ability3=GetAbility3(),
&ability4=GetAbility4();
&ability4=GetAbility4(),
&item1=useItem1,
&item2=useItem2,
&item3=useItem3;
attack_cooldown_timer=std::max(0.f,attack_cooldown_timer-fElapsedTime);
iframe_time=std::max(0.f,iframe_time-fElapsedTime);
notEnoughManaDisplay.second=std::max(0.f,notEnoughManaDisplay.second-fElapsedTime);
@ -336,6 +342,9 @@ void Player::Update(float fElapsedTime){
ability2.cooldown-=fElapsedTime;
ability3.cooldown-=fElapsedTime;
ability4.cooldown-=fElapsedTime;
item1.cooldown-=fElapsedTime;
item2.cooldown-=fElapsedTime;
item3.cooldown-=fElapsedTime;
if(rightClickAbility.cooldown<0){
rightClickAbility.cooldown=0;
}
@ -351,6 +360,15 @@ void Player::Update(float fElapsedTime){
if(ability4.cooldown<0){
ability4.cooldown=0;
}
if(item1.cooldown<0){
item1.cooldown=0;
}
if(item2.cooldown<0){
item2.cooldown=0;
}
if(item3.cooldown<0){
item3.cooldown=0;
}
for(Monster&m:MONSTER_LIST){
if(!HasIframes()&&abs(m.GetZ()-GetZ())<=1&&OnUpperLevel()==m.OnUpperLevel()&&geom2d::overlaps(geom2d::circle(pos,12*size/2),geom2d::circle(m.GetPos(),12*m.GetSizeMult()/2))){
if(m.IsAlive()){
@ -417,27 +435,35 @@ void Player::Update(float fElapsedTime){
}
}
};
CheckAndPerformAbility(GetAbility1(),Player::KEY_ABILITY1);
CheckAndPerformAbility(GetAbility2(),Player::KEY_ABILITY2);
CheckAndPerformAbility(GetAbility3(),Player::KEY_ABILITY3);
CheckAndPerformAbility(GetAbility4(),Player::KEY_ABILITY4);
CheckAndPerformAbility(GetRightClickAbility(),Player::KEY_DEFENSIVE);
CheckAndPerformAbility(rightClickAbility,Player::KEY_DEFENSIVE);
CheckAndPerformAbility(ability,Player::KEY_ABILITY1);
CheckAndPerformAbility(ability2,Player::KEY_ABILITY2);
CheckAndPerformAbility(ability3,Player::KEY_ABILITY3);
CheckAndPerformAbility(ability4,Player::KEY_ABILITY4);
CheckAndPerformAbility(item1,Player::KEY_ITEM1);
CheckAndPerformAbility(item2,Player::KEY_ITEM2);
CheckAndPerformAbility(item3,Player::KEY_ITEM3);
if(GetState()==State::PREP_CAST){
#define CheckAbilityKeyReleasedAndCastSpell(ability,releaseState) \
if(&ability==castPrepAbility&&releaseState){CastSpell(ability);}
CheckAbilityKeyReleasedAndCastSpell(rightClickAbility,Player::KEY_DEFENSIVE.Released())
else
else
CheckAbilityKeyReleasedAndCastSpell(ability,Player::KEY_ABILITY1.Released())
else
else
CheckAbilityKeyReleasedAndCastSpell(ability2,Player::KEY_ABILITY2.Released())
else
else
CheckAbilityKeyReleasedAndCastSpell(ability3,Player::KEY_ABILITY3.Released())
else
else
CheckAbilityKeyReleasedAndCastSpell(ability4,Player::KEY_ABILITY4.Released())
else
CheckAbilityKeyReleasedAndCastSpell(item1,Player::KEY_ITEM1.Released())
else
CheckAbilityKeyReleasedAndCastSpell(item2,Player::KEY_ITEM2.Released())
else
CheckAbilityKeyReleasedAndCastSpell(item3,Player::KEY_ITEM3.Released())
}
}
#pragma region Warrior
@ -788,3 +814,14 @@ void Player::CheckEndZoneCollision(){
}
endZoneStandTime=0;
}
void Player::SetItem1UseFunc(Ability a){
useItem1=a;
};
void Player::SetItem2UseFunc(Ability a){
useItem2=a;
};
void Player::SetItem3UseFunc(Ability a){
useItem3=a;
};

@ -94,6 +94,9 @@ private:
void Initialize();
float iframe_time=0;
float lastCombatTime=0;
Ability useItem1;
Ability useItem2;
Ability useItem3;
protected:
const float ATTACK_COOLDOWN="Warrior.Auto Attack.Cooldown"_F;
const float MAGIC_ATTACK_COOLDOWN="Wizard.Auto Attack.Cooldown"_F;
@ -222,7 +225,11 @@ public:
CastInfo&GetCastInfo();
void SetAnimationBasedOnTargetingDirection(float targetDirection);
static InputGroup KEY_ABILITY1, KEY_ABILITY2, KEY_ABILITY3, KEY_ABILITY4, KEY_DEFENSIVE;
void SetItem1UseFunc(Ability a);
void SetItem2UseFunc(Ability a);
void SetItem3UseFunc(Ability a);
static InputGroup KEY_ABILITY1, KEY_ABILITY2, KEY_ABILITY3, KEY_ABILITY4, KEY_DEFENSIVE, KEY_ITEM1, KEY_ITEM2, KEY_ITEM3;
};
struct Warrior:Player{
@ -409,7 +416,7 @@ struct Witch:Player{
#class".Right Click Ability.Cooldown"_F, \
#class".Right Click Ability.Mana Cost"_I, \
&KEY_DEFENSIVE, \
#class".Right Click Ability.Icon"_S, \
"Ability Icons/"+#class".Right Click Ability.Icon"_S, \
{uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[3]==0?255:#class".Right Click Ability.Cooldown Bar Color 1"_f[3])}, \
{uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[0]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[1]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[2]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[3]==0?255:#class".Right Click Ability.Cooldown Bar Color 2"_f[3])}, \
{#class".Right Click Ability.Precast Time"_F,#class".Right Click Ability.Casting Range"_I/100.f*24,#class".Right Click Ability.Casting Size"_I/100.f*24}, \
@ -422,7 +429,7 @@ struct Witch:Player{
#class".Ability 1.Cooldown"_F, \
#class".Ability 1.Mana Cost"_I, \
&KEY_ABILITY1, \
#class".Ability 1.Icon"_S, \
"Ability Icons/"+#class".Ability 1.Icon"_S, \
{uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 1.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 1.Cooldown Bar Color 1"_f[3])}, \
{uint8_t(#class".Ability 1.Cooldown Bar Color 2"_f[0]),uint8_t(#class".Ability 1.Cooldown Bar Color 2"_f[1]),uint8_t(#class".Ability 1.Cooldown Bar Color 2"_f[2]),uint8_t(#class".Ability 1.Cooldown Bar Color 2"_f[3]==0?255:#class".Ability 1.Cooldown Bar Color 2"_f[3])}, \
{#class".Ability 1.Precast Time"_F,#class".Ability 1.Casting Range"_I/100.f*24,#class".Ability 1.Casting Size"_I/100.f*24}, \
@ -435,7 +442,7 @@ struct Witch:Player{
#class".Ability 2.Cooldown"_F, \
#class".Ability 2.Mana Cost"_I, \
&KEY_ABILITY2, \
#class".Ability 2.Icon"_S, \
"Ability Icons/"+#class".Ability 2.Icon"_S, \
{uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 2.Cooldown Bar Color 1"_f[3])}, \
{uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[0]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[1]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[2]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[3]==0?255:#class".Ability 2.Cooldown Bar Color 2"_f[3])}, \
{#class".Ability 2.Precast Time"_F,#class".Ability 2.Casting Range"_I/100.f*24,#class".Ability 2.Casting Size"_I/100.f*24}, \
@ -448,7 +455,7 @@ struct Witch:Player{
#class".Ability 3.Cooldown"_F, \
#class".Ability 3.Mana Cost"_I, \
&KEY_ABILITY3, \
#class".Ability 3.Icon"_S, \
"Ability Icons/"+#class".Ability 3.Icon"_S, \
{uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 3.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 3.Cooldown Bar Color 1"_f[3])}, \
{uint8_t(#class".Ability 3.Cooldown Bar Color 2"_f[0]),uint8_t(#class".Ability 3.Cooldown Bar Color 2"_f[1]),uint8_t(#class".Ability 3.Cooldown Bar Color 2"_f[2]),uint8_t(#class".Ability 3.Cooldown Bar Color 2"_f[3]==0?255:#class".Ability 3.Cooldown Bar Color 2"_f[3])}, \
{#class".Ability 3.Precast Time"_F,#class".Ability 3.Casting Range"_I/100.f*24,#class".Ability 3.Casting Size"_I/100.f*24}, \

@ -35,7 +35,7 @@ SUCH DAMAGE.
#define VERSION_MAJOR 0
#define VERSION_MINOR 2
#define VERSION_PATCH 1
#define VERSION_BUILD 3096
#define VERSION_BUILD 3109
#define stringify(a) stringify_(a)
#define stringify_(a) #a

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.10.1" class="Map" orientation="orthogonal" renderorder="right-down" width="205" height="205" tilewidth="24" tileheight="24" infinite="0" backgroundcolor="#475500" nextlayerid="9" nextobjectid="142">
<map version="1.10" tiledversion="1.10.1" class="Map" orientation="orthogonal" renderorder="right-down" width="205" height="205" tilewidth="24" tileheight="24" infinite="0" backgroundcolor="#475500" nextlayerid="9" nextobjectid="143">
<properties>
<property name="Level Type" propertytype="LevelType" value="Dungeon"/>
</properties>
@ -1969,6 +1969,6 @@
</properties>
<point/>
</object>
<object id="141" name="Player Spawn" type="PlayerSpawnLocation" x="600" y="4272" width="24" height="24"/>
<object id="142" name="Player Spawn" type="PlayerSpawnLocation" x="4800" y="2232" width="24" height="24"/>
</objectgroup>
</map>

@ -55,7 +55,7 @@ debug_access_options = 0
debug_map_load_info = 0
# Shows extra info about the player on the HUD
debug_player_info = 0
debug_player_info = 1
# Shows collision boxes of tiles.
debug_collision_boxes = 0

@ -6,6 +6,8 @@ ItemDatabase
Description = Restores 40 health points.
HP Restore = 40
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Medium Health Potion
{
@ -13,6 +15,8 @@ ItemDatabase
Description = Restores 100 health points.
HP Restore = 100
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Large Health Potion
{
@ -20,6 +24,8 @@ ItemDatabase
Description = Restores 320 health points.
HP Restore = 320
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Small Mana Potion
{
@ -27,6 +33,8 @@ ItemDatabase
Description = Restores 40 mana points.
MP Restore = 40
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Medium Mana Potion
{
@ -34,6 +42,8 @@ ItemDatabase
Description = Restores 100 mana points.
MP Restore = 100
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Large Mana Potion
{
@ -41,112 +51,156 @@ ItemDatabase
Description = Restores 320 mana points.
MP Restore = 320
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 1
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 2
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 3
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 4
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 5
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 6
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 7
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 8
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 9
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 10
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 11
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 12
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 13
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 14
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 15
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 16
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 17
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 18
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 19
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Dummy Item 20
{
Description = Does nothing apparently.
ItemCategory = Consumables
Cooldown Time = 2.5
Cast Time = 0.0
}
Bandages
{
ItemScript = Restore
Description = Restores 10% health points.
HP % Restore = 10%
Cast Time = 1.0
Cooldown Time = 2.5
ItemCategory = Consumables
}
Green Slime Remains

@ -4,6 +4,11 @@ ItemConfiguration
Item Scripts = "ItemScript.txt"
Item Categories = "ItemCategory.txt
}
Item
{
# Amount of time to wait before an item can be used again (Global).
Item Cooldown Time = 2.5
}
ItemDrop
{
# Item drops horizontal random speed range

Loading…
Cancel
Save