I am overburdened is a small "arcadey" rogue-like with a fun twist to the tried and true classical formula. The player takes the role of an artifact hunter, who has a surprisingly large carrying capacity, embarking on a quest to search through dungeon after dungeon for mystical artifacts and answers, in a world where magic has long been forgotten...

Features:

  • Turn based rogue-like with perma-death.
  • Run focused campaign, playable in short bursts.
  • Huge inventory (20 slots) with a great number of artifacts to find (100+).
  • Carefully crafted RPG system with complex customization possibilities due to the sheer number of inventory slots, but no leveling!
  • Semi-procedurally generated dungeons using hand authored layouts.
  • A funny story, packed with vicious evils, puns and jokes.
  • Hall of fame for remembering your best playthroughs.
  • View media
  • View media
  • View media
  • View media
  • View media
  • View media
Post article RSS Articles

Hello everyone!

This entry turned out to be lengthy and pretty technical. Sorry about that, but last week was spent only on "under the hood" stuff. I did my best to make it interesting though ;) ! So the agenda is the item system which became really sophisticated, especially compared to the size of the game + the difficulty and pacing management.

I settled on the video format of the last entry, because EP 3 was the most pleasant recording experience and in my eyes it was the most enjoyable video so far. So from now on, I'm going for condensed and "scripted" logs focusing on the features and development of the game.

Items, loot



The plan for the game is to have a wast and diverse set of unique items (approx 100). Since no leveling will take place, the player will have to risk collecting as much loot as possible during the journey and focus on customizing the play-style by carefully picking which items to wear. So the technology behind the game has to support a great number of skills and excessive customization of the items, but also has to allow lightning fast iteration times, since I will be spending a significant amount of time during the upcoming 2 to 4 weeks with designing and balancing the possible loot.

Attribute bonuses


The easiest development was attribute bonuses on items. Adding the following piece to the descriptor of an item in the loot configuration file will provide the given bonus attributes to the player while equipped:

<Attributes>
	<Attack>1</Attack>
	<Defense>2</Defense>
	<Vitality>3</Vitality>
	<Speed>4</Speed>
	<Luck>5</Luck>
</Attributes>

I highly recommend calculating most of the final modifiers and attributes of a character in RPGs every time one is needed. The more caching you introduce into these systems, the more groundwork you lay for pesky bugs to occur, so keep it low! Usually these calculations are pretty simple (will never be a performance hit) and the hard-coded constant formulas will be really straight-forward to follow.

public class Attributes
{
	public int Attack;
	public int Defense;
	public int Vitality;
	public int Speed;
	public int Luck;
	
	// events ...
}

public class Player
{
	public Attributes Attributes;
	
	// handle pick-ups and other logic related to permanent attributes...
}

public class Inventory
{
	public Attributes Attributes;
	
	// handle item pick-ups and other logic related to item attribute bonuses...
}

The player data holds the permanent attributes of the character (starting attributes + permanent power-ups) and the inventory holds the sum of the attribute bonuses from the equipped items (only a tiny bit of caching) recalculated every time it is changed (e.g.: item pick-up, item swap etc...). The final value of an attribute is the sum from these two structures and the modifiers queried from the extra skills of the equipped items applied to it.

Skills, event system

For a high level of flexibility and to have a varied set of special skills I implemented an event system. I followed a similar but a bit more dynamic approach as the built-in event language feature of C#. Essentially an event is a string (the name of the occurred event) and a context holding additional data related to it and a skill is an event handler implementation.

Event systems can be implemented a number of ways each having their strengths and weaknesses, but all-in-all the following is pretty close to the my solution:
WARNING pseudo code incoming!

// Actual skills need implement this class:
public abstract class Skill
{
	public void HandleEvent(string name, EventContext context)
	{
		if (this.EventsHandled.Contains(name))
		{
			// Additional checks related to the context...
			
			TakeEffect(name, context);
		}
	}
	
	protected abstract void TakeEffect(string name, EventContext context);
	
	// Some helper methods...
	
	public HashSet<string> HandledEvents;
	
	// Additional requirements for the event & context...
}

// Special events extend this structure to "add" extra data to the event context:
public class EventContext
{
	// The creature whose action lead to the event:
	public Entity Creature;
}

The execution of the "TakeEffect" method can also be chance based (luck of event firing creature is taken into account). so a skill may only take effect with a given chance (e.g.: 10% chance to "XYZ" types).

An item can have a list of skills listening for events when equipped by a creature. Some events pass in an extension of the "EventContext" class with extra information, like the damage dealt, or the target creature attacked etc...

Few of the most common events in the game:

  • NextDungeonReached: the player reached the next level.
  • Attacking: a creature starts attacking.
  • OpenChest: the player just opened a chest.
  • Pickup: the player picks up a bonus item (e.g.: health potion, gold sack etc...)

Some of the existing skill implementations:

  • Attribute: grants a "bonus" for the upcoming trial (e.g.: +10 luck for the next luck trial).
  • Cripple: interrupts the next attack of the target.
  • Thorns: reflects a "bonus" amount of damage to the attacker.
  • Vampiric: a "bonus" amount of the damage dealt is healed to the attacker.

"bonus" == modifier applied to an integer value. Can be an integer like +/- 5 or a percentage like +/- 5%. The integer bonuses are applied first and the percentage modifiers afterwards.

Most of these events and skills took only a few lines of code to integrate and I have several more ready and working. Combing and configuring them to take effect on specific events with various chances is already an immensely versatile system to build items :) !

Tags

String tags can be added to a creature when describing it in a configuration file, like: undead, deamon, boss etc... The event system allows to define tag requirements for targets before a skill can take effect. A creature meets a given a requirement if it does not have any tags from its "can not have" set of tags and has all the tags from its "must have" set of tags. It is as simple as that.




This tiny addition allows skills which have real "character" to be made. Some cool examples would be monsters tagged as "undead" and a life-steal granting sword which does not work on them (pictured in the GIF), or a holy shield which grants enormous extra defense, but only when attacked by monsters tagged as "deamon". This also allows to disable certain skills against bosses which could make them too overpowered otherwise.

I'm still at the beginning when it comes to designing the concrete items, but with these systems in place I hope I'll have a pleasant experience while implementing the actual artifacts. As closing words for the loot topic, here is a rather complicated item description just to show how this is all put together in configuration files:

<!--
	Forearm armor:
		+1 Defense
		20% chance to cripple non "Boneless" enemies
-->
<ItemDescriptor>
	<Type>Forearms</Type>
	<Name>Vambraces</Name>
	<Sprite>Item22</Sprite>
	<Level>1</Level>
	<Attributes>
		<Defense>1</Defense>
	</Attributes>
	<Skills>
		<Skill>
			<Cripple>
				<EventHandled>InflictDamage</EventHandled>
				<ChanceBased>true</ChanceBased>
				<Chance>20</Chance>
				<TargetTags>
					<CantHave>
						<string>Boneless</string>
					</CantHave>
				</TargetTags>
			</Cripple>
		</Skill>
	</Skills>
</ItemDescriptor>

Difficulty, pacing

It's important to constantly introduce new content and to increase the difficulty curve so the player always finds a challenge while progressing deeper into the depths of the dungeon. I achieve this with a construct called "dungeon profile". For each level of the story (currently planning to have around 30) a profile will specify which tile-set to use, what kind of monsters can be spawned and what type of pick-ups, treasures and chests can be placed. Of course this data is read from asset files and it is fed into the dungeon generator after constructing the layout for a level. This gives fine control over the length, the pacing and the minute to minute difficulty changes of the whole game without modifying a single line of code.


Yep, last week was rather busy, though I'm behind my schedules once again :( . A little more than a week ago I was confident I will have some (even if not many) art assets done for the game by now. Sadly slipped a little. This is the next step though, so the following entry will have pretty sprites and screenshots ;) !

Stay tuned!

I am overburdened, monsters and mods

I am overburdened, monsters and mods

News

Small update this time. Been working on wrapping up all the remaining core features, but got a bit sidetracked so I'm going to write a little about level...

I am overburdened, prototyping

I am overburdened, prototyping

News

I worked on a lot of stuff since my last article: - Thought a lot about the content/format of my blog and my freshly started video series, and made some...

I am overburdened, begins

I am overburdened, begins

News

This entry is the first one (announcement) for the new game I'm working on called "I am overburdened" and the first one when I publish a video log entry...

I am overburdened, evolution of box-art

I am overburdened, evolution of box-art

Concept Art Tutorial

Took most of last week off for vacation == no entries, sorry about that, but this week I'm going to make multiple videos and blog posts :) ! This first...

Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.

Follow Report Profile
Icon
I am overburdened
Platforms
Windows
Creator
Spidi777
Engine
XNA
Contact
Send Message
Release date
Game watch
Follow
Share
Style
Genre
Roguelike
Theme
Fantasy
Players
Single Player
Project
Indie
Boxart
Boxart
Embed Buttons
Link to I am overburdened by selecting a button and using the embed code provided more...
I am overburdened
Statistics
Last Update
Watchers
2 members
Articles
6
You may also like