Isobox
Isobox is a Code Framework for building games that target the survival genre using 2d isometric style graphics. It provides the solutions for the following features:
-
Editor Tools for creating Items
-
Item Database (Custom Unity-driven - not sql/csv)
-
API for game items, weapons, structures
-
UI <> Item DB interfacing
-
UI Inventory interacting with drag-n-drop
-
Characters via generic Skeletons and Skeletal Animation
-
Sprite tools for modifying the character spriteset on the fly
-
Build and interact with structures in the game world
-
Straightforward front end API for loot spawning, item db access, spriteset modifying, etc.
-
Basic UNET integration for P2P Multiplayer.
>> Animated GIF <<
>> Playable Build <<
GIF above shows UI Item stacking, world item picking, weapon equipping, damage to trees, loot spawning, character animation, character spritesheet swapping and skeleton swaps, world sprites sorted by camera depth, point lighting, sprite camera-facing without zsorting issues, etc.
Currently we’re aiming for a paid beta release for ~$20 with most of the existing features mentioned here ready to go. If you’re interested in getting access earlier to provide feedback you can PM me.
Code snippet examples
[Server]
public virtual void Die()
{
Game.LocalPlayer.CmdSpawnItem("Log", transform.position, 2, true);
RpcDieOnClients();
}
public void CmdSpawnItem(string title, Vector3 position, int stackSize, bool bounce)
{
CmdSpawnItem(ItemUtility.FindItemIndexByName(title), position, stackSize, bounce);
}
namespace Isobox.ItemSystem
{
public class Inventory
{
public Inventory(Transform uiGridParent, int maxSlots)
{
Content = new List<BaseItem>();
// if you resize the inventory, fill it with nulls.
for (int i = 0; i < maxSlots; i++) Content.Add(null);
MaxSlots = maxSlots > 0 ? maxSlots : 1;
UiGridParent = uiGridParent;
}
public int MaxSlots;
public List<BaseItem> Content;
public GameObject Owner;
public Transform UiGridParent;
public delegate void OnSlotChanged(int index);
public OnSlotChanged SlotChanged;
public virtual BaseItem GetItemAt(int index)
{
BaseItem pull = Content[index];
Content[index] = null;
return pull;
}
/// <summary>
/// Add's an Item to the inventory AND creates UI for it if uiGridParent is not NULL.
/// </summary>
/// <param name="item">The Item to be added</param>
/// <param name="amount">The stack count of the Item added</param>
/// <param name="tryToMerge">The item being added could be merged into existing slots of the same type.</param>
/// <returns>The index the item was placed into. -1 on failure.</returns>
public virtual int AddItem(BaseItem item, int amount = 1, bool tryToMerge = true)
{
if (amount == 0) amount = 1;
if (item == null)
{
Debug.LogError("Item to instantiate was null.");
return -1;
}
int liveStackCount = amount;
<...>
<...>
<...>

