top of page

Greedy Dungeon

(In development)

Project Type

Game Genre

Platform

Language Used

Engine

Other software

Date published

Personal project, solely development

 

Rogue-like dungeon crawler Card Game

Android, PC

C#

Unity

Mixcraft (Audio), Photoshop (Art)

Not yet published

Greedy Dungeon is a Rogue-like dungeon crawler with an RPG deck-building system. The game focus on a concept "Greed", if the player loots more, the more vulnerable the player will be in combat. However, the less the player loots, the less reward the player will get. The combat system also has a positioning system in which the player can drag the furthest enemy to the front or push the nearest enemy to the furthest. The player needs to build his deck with the strategy to make the combat easier to clear. The enemy has an AI system with skills that particular skills can be cast in specific positions. Players need to gain experience from the battle and learn if an enemy will be less stronger in which position and push or pull them to it with cards they build.

Systems

Fatigue System:

Every step you take in a dungeon will cause you 1 point of fatigue, which prevents the player from being too greedy to loot more from the map. Fatigue is a crucial stat that the players need to be careful for, the more fatigue points they take, the more fragile they will be in combat, such as decreasing starting hand cards which is the most important part of combat. To achieve this, I need to set an Integer parameter as the fatigue system, and in the starting hand integer's get function, set it to starting hand - (fatigue/3) whenever the system's calling starting hand value.

Combat System: 

​In the combat system, the player will start with starting hands to play with, whenever the player ends the turn and start the enemy phase, all the hand cards will be discarded and in the next player phase, a player will gain new starting hands from the deck again. The combat system also includes the positioning system which cards can do things with the nearest enemy or furthest enemy, also the player can mess us the enemies positioning by some cards to drag the furthest enemy to nearest or pushing nearest enemy to furthest. Enemies' positions are crucial to the player due to their skills can only be used with specific positions. To swap position, I'm using a list contains the enemies while index presents the position, and clone that and re-insert the list with the desired Index to accomplish this.

Greedy Looting System:

This system is the core system of the game, I develop the system with every loot is also a card in your deck, so the more the player loots, his deck will be filled with coins and crystals which might mess up his combat hand. When the player ends the dungeon, all the loot cards in their deck will become value back to town to be actual coin and crystal. If they didn't loot anything for having full power in combat, they will clear with nothing back to town. There's also multiplier to the loot system if the player loots X loot, the multiplier will be

1 + (X / 2 * 0.5), so the players need to be greed but also be careful.

Consumable Card System:

It's like the card system but outside-combat, the player can use cards from the decklist and cast it, which is a re-develop class from the combat card system. In the card class, there's a boolean called isConsumable. If the card is cast with this boolean setting to true, remove this card from the decklist, and not deleted if it's false.

Card System:

Card System works by when casting a card, go through a card casting function while giving the card ID, and then there's switch case in that function to do things according to the given ID.

 

Card Leveling System:

Card Leveling System works when leveling up the card, the system will call the list of cards and get the current leveling card, and assign the level integer to the leveled integer. Whenever the system needs to get the cards' levels, just simply get the list and feed the card's ID to the function to get the Index, and the level is the value.

Player Ranking System:

Player will rank up by playing dungeons, ranking can let the player to unlock more cards and exceed the max level of cards. To achieve this, I add ranks integers to dungeons which also affect the difficulty, when the player clears the dungeon, the exp integer will += the dungeons' ranks, and if the exp exceeds the maximum number, the player will level up and reset the exp.

Enemy AI:

In the enemy phase, the system will pick a skill from the enemy skill-list to cast, the skill will be randomized from the list that satisfies the current position, other than randomized, in special conditions the enemies need to be either aggressive, defensive. This will be determined by the player's health or the enemy's health, under these conditions, the enemy will pick skills to present these behaviors. I achieve this by using if else condition, and if not under conditions, just get the skill by GetRandomSkill(string EnemyType), this function will go through the switch case to get which skill-list to generate by feeding enemy type name.

Event System:

Whenever the player moves between rooms, there's a chance to encounter an event, and the same event won't be encountered again in that run. to achieve this, I'm using the method with a list contains events class, and using Random.Range(0, list.count) to choose which event to encounter, and list.RemoveAt(Index) to prevent happening again.

Relics System:

Relics are helpful tools to help the players crawling in the dungeon, it has an effect like "whenever you move between room", or "whenever you cast a card, draw 1 card". To achieve this, I set up a function CheckRelic(string ActionType), this function will be called after every action the player does and feed in the string of the action type name, and if it met the requirements the relic needs, do the function of the relic.

Dungeon Generator:

​Dungeon Generator runs after the player chooses which size of a dungeon to play and generate a dungeon map for the player. To generate a dungeon, there's always a dungeon in (0,0), and runs a for loop to generate rooms with the size, to generate each room, the system will randomly pick an existing room with a space next to it (if the room doesn't have space near it to generate, the system will randomly pick a room again) and generate a room next to it by randomly picking a direction. if the direction already has a room on it, then pick other directions, after generating a room, the class will randomly generate the content of the room: loot, enemy or nothing. This process will keep doing until the number of generated rooms met the max room size of the dungeon, and place the boss in the last room generated.

© 2020 By Dern Lin. Proudly created with Wix.com

bottom of page