Ultimate Inventory System WIP

I am so happy, that you are working on an inventory solution. I bought Inventory Pro and Rucksack, but Inventory Pro is abandoned and Rucksack has nearly no features. I hope you will release a small core version of your inventory system soon, so we all can start with your Inventory system! Can´t wait!
 
@Sangemdoko @Justin
Taking the reliable track record of Opsive development into consideration I would be willing to pre-order your Inventory System right now and help with alpha/beta-testing. Any chance of doing that?
Cheers
 
@Dragonflame @Photonic
Thank you for your enthusiasm! Once we make further progress and have at least all the launch features more or less working, I'll discuss with Justin about how we will get alpha/beta testers from the community.
Until then I'll make progress updates posts where you can give us some feedback on the direction we are taking.
 
The new inventory system will be released as a completly new asset? If some of us already have Ultimate Character Controller (or some of the controllers), we'll need to pay full price for the inventory or there will be any type of discount?


The inventory schema looks pretty solid! Congrats.
 
The new inventory system will be released as a completly new asset? If some of us already have Ultimate Character Controller (or some of the controllers), we'll need to pay full price for the inventory or there will be any type of discount?


The inventory schema looks pretty solid! Congrats.
This will be a completely new and independent asset. It won't require UCC but will be integrated with it (and Behavior Designer). I would love to be able to do some type of a bundle but the Asset Store doesn't support this right now
 
@Sangemdoko ,

Hi! Took me a while to register on the Opsive forum (for some reason, didn't like all my recent invoices, only the ancient TPC one...).

Anywhos, just wondering how this is going?

Also, do you have a Roadmap area?

Is this forum, effectively, the ideas area?

Can you say (no warrantees or guarantees!) what you are aiming for in release #1?

Is there going to be a beta release first?

Also, having read in to the threads above,

(1) can one Attribute change or add another Attribute or change another Attribute's default value? Using Regex?


(2) how would you see this design framework facilitating things like sockets, affixes, prefixes and suffixes and so on. To give an example:-

Item template would be LongSword, then Iron (a type of prefix) Longsword, then say Iron Longsword of Smiting (a type of suffix), then say Epic (prefix) Meteoric (prefix) Iron (prefix) Longsword (template) of Smiting (suffix) (etc), then say an Iron Longsword of Smiting with a large amethyst gemstone socketted in?

(3) how would you see the design framework working with multi-currencies (with conversions / auto-conversions)?

(4) I may have missed it, but how will the design framework handle events (like but not just equip, unequip, pick-up, carry, etc)
 
Last edited:
Hi @Duffer123

I'm glad you asked all these questions because I'll be answering all of them in detail in my next progress update post, which I plan to write soon.

I'll give you quick answers to your questions in the mean time.

In this thread I post the progress and how I am implementing the features. I do this so that the community can give me feedback and tell me their needs and wants.

I'll give a list of things that we "plan" to have for the first release soon too. There has been changes from the last post I made. Things you can expect are item managing, currency and save/load.

1) item defintions can be nested, you can inherit, override or modify the attribue values of the parent definition. When you use modify you can use a string with a regex/NCal expression to solve simple equations with multiple attributes

2) Depending in your game this could be designed in different ways. You could have two item defintions one base and the other with a prefix and then you set a craft recipe to transform one to the other. That could be a lot of work if you had a lot of base items and prefixes.
So another option (which I use in the demo) is that you have a static function to get the full name of an item. So if you add an attribute of type Item[] called "item slots" then you could have that static function check the content of that array to find the full item name. I use the same pattern to change other values on my item like attack or defence, etc...

3) The framework has built-in multi currency with automatic conversion. This is done by parenting currencies and specifying a exchange rate. As long as a currency has the same root as another they can be exchanged. In the demo we have bronze, silver, gold currencies with auto exchange.

4)So there is difference between events and item actions. we'll have events in place for things like adding/removing an item to an inventory, adding/removing currency from a currency holder, etc.. then you have item actions which are things that each game will have code themsleves (we'll have a few examples and templates). These are equip, use, consume, drop, etc... Think of these as actions you can perform on an item. You can decide which actions can be performed by which category of items, and what that action does. in the post I'll make soon I'll show some example of that.

There won't be a beta, but there will be some sort of early access if you buy asset from the Opsive website. I can't give you a release window yet though.

I hope that somewhat answers your questions. Make sure to watch this thread for the progress update post I'll make soon, as I'll go in-depth in some features that may interest you and where your feedback will be very valuable.
 
@Sangemdoko , yep that covers it for now and looking forward to your next update. Was just seeking reassurance that this system will be able to cope with and support affixing, sockets etc. It can and suitable reassured!
 
Hi @Duffer123

I'm glad you asked all these questions because I'll be answering all of them in detail in my next progress update post, which I plan to write soon.

I'll give you quick answers to your questions in the mean time.

In this thread I post the progress and how I am implementing the features. I do this so that the community can give me feedback and tell me their needs and wants.

I'll give a list of things that we "plan" to have for the first release soon too. There has been changes from the last post I made. Things you can expect are item managing, currency and save/load.

1) item defintions can be nested, you can inherit, override or modify the attribue values of the parent definition. When you use modify you can use a string with a regex/NCal expression to solve simple equations with multiple attributes

2) Depending in your game this could be designed in different ways. You could have two item defintions one base and the other with a prefix and then you set a craft recipe to transform one to the other. That could be a lot of work if you had a lot of base items and prefixes.
So another option (which I use in the demo) is that you have a static function to get the full name of an item. So if you add an attribute of type Item[] called "item slots" then you could have that static function check the content of that array to find the full item name. I use the same pattern to change other values on my item like attack or defence, etc...

3) The framework has built-in multi currency with automatic conversion. This is done by parenting currencies and specifying a exchange rate. As long as a currency has the same root as another they can be exchanged. In the demo we have bronze, silver, gold currencies with auto exchange.

4)So there is difference between events and item actions. we'll have events in place for things like adding/removing an item to an inventory, adding/removing currency from a currency holder, etc.. then you have item actions which are things that each game will have code themsleves (we'll have a few examples and templates). These are equip, use, consume, drop, etc... Think of these as actions you can perform on an item. You can decide which actions can be performed by which category of items, and what that action does. in the post I'll make soon I'll show some example of that.

There won't be a beta, but there will be some sort of early access if you buy asset from the Opsive website. I can't give you a release window yet though.

I hope that somewhat answers your questions. Make sure to watch this thread for the progress update post I'll make soon, as I'll go in-depth in some features that may interest you and where your feedback will be very valuable.

A couple of things I just wondered about..

A) If there is one background catalogue Inventory, can the system support multiple Characters each with their own inventory?

B) Could an Item Attribute be use to, potentially, modify an Item's or Item Definition's Material, Texture, Sizing or Colour or to add or remove a particle effect on an item, that sort of thing? How could that work?

C) What about 'scalable' attributes of an Item or Item Definition like say Rarity, Renown, Age, Craftsmanship or Condition.? Taking Rarity, you have have a 'very common' rarity or 'extremely rare' rarity string perhaps derived from a rarity float score?

P.s. how goes it?

P.p.s. I'd like to code an integration between this and GameCreator after release if I can... Just to put that out there... ;)
 
Last edited:
Hi @witchthewicked I'm working on this asset as much as I can, but there is still a lot to do. I can't give you a release window because things always take more time than expected. Depending on the scope of your game you could work on features that are not related to the inventory until we release the early access... but that's a gamble because we don't even know when we will have that early access ready. It's up to you to decide whether you prefer to wait or if you prefer to build your own system. If you build your own system you could get things started and then once our asset is realeased you could decide whether to convert or not, that's the path I would take if I were you.

@Duffer123

A) Of course it supports multiple character each with their own inventory. Inventories are simply organized collections of items. Inventories can even be added to shop owners or chests so that you can easily exchange items.
There is a manager that has a reference to all the items in the game but that's only there so that you can find items per ID and create new items using the itemDefinitions that can be found by ID or by name.

B)Materials, Textures are assets, Size is a Vector3, Colour is of Type Color and particles could be a prefab gameObject. These can all be used as attributes by default. We are looking into a system that will create attribute types for all types in your project. Currently, I have a few attribute types for all the default primitive and Unity types.
Once you have that set up on your ItemCategory you can create any ItemDefinition with different values for those attributes. You can inherit or override parent ItemDefinition when nested, etc..
Now the following is something you may need to implement yourself (we may or may not have an example for this at some point). The way I think it would work is the following. You'll have a base weapon prefab for a specific item category. When you would equip an item of that category it would spawn that prefab and you would then initialize it with the attribute values on the item, changing material, texture, size, color, etc...
The code that uses the item to shoot bullets is out of scope for our inventory asset, but you can imagine something that would use the attribute values on the item to fire the particles when shooting and maybe using a "damage" attribute to deal a specific amount of damage.

C)I do not understand what you mean by 'scalable' in this case. These could all be ints or if you prefer enums that you can define. If you go with enums then you may need to create an attribute type for that enum (Common(0), UnCommon(1), Rare(2), Epic(3), Legendary(4)).

Don't forget that any attribute that is set as an "ItemAttribute" can have its valued changed at runtime as long as the item is set to "Mutable". In case you want age to increase with in-game time then you could (although I would suggest against it, as it would be better to have a "created time" and compare that to a "current time" when you need to)

Let me know if that answers your questions

Just a reminder that I will post the things I've been working on since the last progress post soon (hopefully by the end of this week, if not, maybe next week) There I'll explain currencies, save/load, crafting and more.
 
Hi @witchthewicked I'm working on this asset as much as I can, but there is still a lot to do. I can't give you a release window because things always take more time than expected. Depending on the scope of your game you could work on features that are not related to the inventory until we release the early access... but that's a gamble because we don't even know when we will have that early access ready. It's up to you to decide whether you prefer to wait or if you prefer to build your own system. If you build your own system you could get things started and then once our asset is realeased you could decide whether to convert or not, that's the path I would take if I were you.

@Duffer123

A) Of course it supports multiple character each with their own inventory. Inventories are simply organized collections of items. Inventories can even be added to shop owners or chests so that you can easily exchange items.
There is a manager that has a reference to all the items in the game but that's only there so that you can find items per ID and create new items using the itemDefinitions that can be found by ID or by name.

B)Materials, Textures are assets, Size is a Vector3, Colour is of Type Color and particles could be a prefab gameObject. These can all be used as attributes by default. We are looking into a system that will create attribute types for all types in your project. Currently, I have a few attribute types for all the default primitive and Unity types.
Once you have that set up on your ItemCategory you can create any ItemDefinition with different values for those attributes. You can inherit or override parent ItemDefinition when nested, etc..
Now the following is something you may need to implement yourself (we may or may not have an example for this at some point). The way I think it would work is the following. You'll have a base weapon prefab for a specific item category. When you would equip an item of that category it would spawn that prefab and you would then initialize it with the attribute values on the item, changing material, texture, size, color, etc...
The code that uses the item to shoot bullets is out of scope for our inventory asset, but you can imagine something that would use the attribute values on the item to fire the particles when shooting and maybe using a "damage" attribute to deal a specific amount of damage.

C)I do not understand what you mean by 'scalable' in this case. These could all be ints or if you prefer enums that you can define. If you go with enums then you may need to create an attribute type for that enum (Common(0), UnCommon(1), Rare(2), Epic(3), Legendary(4)).

Don't forget that any attribute that is set as an "ItemAttribute" can have its valued changed at runtime as long as the item is set to "Mutable". In case you want age to increase with in-game time then you could (although I would suggest against it, as it would be better to have a "created time" and compare that to a "current time" when you need to)

Let me know if that answers your questions

Just a reminder that I will post the things I've been working on since the last progress post soon (hopefully by the end of this week, if not, maybe next week) There I'll explain currencies, save/load, crafting and more.
@Sangemdoko ,

Thanks for the speedy response.

DOH! Forgot about Enums....

I meant to say really like the UI/UX of the Manager for Categories, Definitions, Items and Attributes. Love the use of colour flags. Hope you keep it!

Another thought I had is syncing attribute values with (a) similar synced variables in behaviour designer and UCC and (b) syncing Item Attributes with external fields/properties? With (b), for me, it would be enough I think to provide some example code examples but you could I suppose think about a tick box and an edit text to name an external compatible field or property as a string (dot.net) to sync with in either direction or both. Maybe also an example Item Action? Here I'm just thinking about making this asset as integrable and therefore sellable as possible?
 
@Duffer123

That's an interesting feature request, I see how that could be very useful. I'll take note and I'll see what can be done.
@Sangemdoko ,

Yup.

Check out how nicely it works with Behaviour Designer.

A little bit of Linq and Reflection jiggery-pokery and your non-coder could select a drop-down Enum on Item Attribute under 'Attempt Sync', another then visible drop-down Enum (perhaps a flag/mask) allowing for Sync on start, on change, on action and output, input and/or both ways. Finally an edit box naming (case-sensitive) the third party component then . (Dot) then the third party field or property? (haven't thought this through much, just an imagining of how it might work). I've previously tinkered with using Field and Property Info methods to find/interrogate them. You can even to an extent check object compatability. Again, thinking here of non or new-to coders... ?
 
Last edited:
@Sangemdoko this is very exciting to see. My 2 cents on the inventory is that the majority of the existing assets on the UAS are very RPG and MMO focussed with a huge number of windows, dragging and dropping from one window to the next, overly complicated etc. Please also cater for shooter & action focused games where the inventory is VERY simple and straight forward, where items may be limited to just a handful of consumables and there is no crafting at all. Think of Far Cry 3 syringes except you don't need to craft, you purchase them or find them in the world. Or the single consumables menu in the Division.
 
Hi @Hamesh,

Thanks for the feedback. The goal is to make the inventory framework game agnostic. So whether you're making a MMO or a FPS there shouldn't be any restrictions on what you can do.

Now the demo will try to show the extent of what the tool can do so the examples and the demo UI may not be similar to what you want to achieve. But that does not mean that making an FPS inventory should be any harder. It should be simpler in fact.

By design the demo is there just to show you cool features in action, but really you should be making your own UI which would interact with the items, currency, etc...

Once we release the early access I'm sure we'll get a ton of feedback on what people would like. If a lot of people ask for the same thing then we may decide to create some game-specific UI widgets. But at the start I think it's better to keep things as general and flexible as possible, even if it means that you'll need to code a few simple things yourselves. Whatever happens we'll be there to help people with their specific use cases by pointing them in the right direction.
 
Hi @Hamesh,

Thanks for the feedback. The goal is to make the inventory framework game agnostic. So whether you're making a MMO or a FPS there shouldn't be any restrictions on what you can do.

Now the demo will try to show the extent of what the tool can do so the examples and the demo UI may not be similar to what you want to achieve. But that does not mean that making an FPS inventory should be any harder. It should be simpler in fact.

By design the demo is there just to show you cool features in action, but really you should be making your own UI which would interact with the items, currency, etc...

Once we release the early access I'm sure we'll get a ton of feedback on what people would like. If a lot of people ask for the same thing then we may decide to create some game-specific UI widgets. But at the start I think it's better to keep things as general and flexible as possible, even if it means that you'll need to code a few simple things yourselves. Whatever happens we'll be there to help people with their specific use cases by pointing them in the right direction.
@Sangemdoko , in case it wasn't obvious, I'm happy to volunteer for early access and/or beta... ;)
 
Top