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.

This commit is contained in:
sigonasr2 2023-11-26 14:45:55 -06:00
parent 933fc16cce
commit 45c6d22ee0
12 changed files with 217 additions and 27 deletions

View File

@ -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){}

View File

@ -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();

View File

@ -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){

View File

@ -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
//There are two places to manipulate items in (Both the sorted inventory and the actual inventory)
if (!inv.at(count).Amt())return false;
uint32_t itemAmt=GetItemCount(it);
if(inventory=="Monster Loot"||inventory=="Stage Loot"){
itemAmt=inv.at(count).Amt();
}
if (amt>=inv.at(count).Amt()){
//There are two places to manipulate items in (Both the sorted inventory and the actual inventory)
if (!itemAmt)return false;
if (amt>=itemAmt){
inv.erase(inv.begin()+count);
if(!eraseFromLootWindow){
_inventory.erase(it);
@ -360,4 +375,20 @@ 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();
}

View File

@ -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{

View File

@ -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
@ -787,4 +813,15 @@ 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;
};

View File

@ -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}, \

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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