Overall a fun solid concept. Good job.
Before adding new content, recommend polishing the game-play loop, mechanics and balance. For example:
- Make sure cards interact with each other correctly. Diamond cards need their formulas to be corrected. As you'll see below.
- Speed up the beginning a touch and slow down the ending. (This is a scaling issue, which is common with incremental games. Either slow as a snail, or you blitz through upgrades to the point they don't feel impactful. Hard to balance it just right.)
- Going anything but pure damage/speed leaves you at a disadvantage income wise. Forcing players to lean more towards defence/healing, building combos and using other cards would be good. Adding enemy variety/challenges would help shuffle people's strategy.
- Game snowballs hard when you increase draw speed and use the upgrade card. Need to find a way to balance Draw Speed cost, or reduce how rapidly the upgrade card can activate.
- Tools are kinda redundant. With the upgrade card upgrading everything for free, even if you were to use tools to manually upgrade, you'd always be better off using that card. You could make it so the upgrade card has to use tools to activate. (Tool income would need balancing) Or it costs increasing amounts of gold based on effected card's current upgrade level to activate.
- Shop needs more expensive cards. Once you start earning 50-100+ gold per second, there is nothing to buy. Even the basic sword/shield is capped at 450 gold for 32 damage / 36 shield. Adding expensive rare/exotic weapons could fix that. Making cheaper cards redundant and giving player something to aim for. Each with unique modifiers alongside the default base value. (Examples below)
Most of the fundamentals are there. Game works, functional UI, decent SFX, card animations, upgrades, simple combat, etc. Music would be nice! Good music adds so much value for the effort.
I'd recommend adding some type of backpack or temp storage, where players can store unused cards they don't want deleted. Or the ability to enable/disable cards for free. Spending all that time upgrading a card, and having to delete it when wanting to switch up strategies or experiment is a pain.
Not a fan of being forced to use at least 1 basic attack card. Any card that deals damage should be allowed as last card. Even better, just make a fist or wooden sword card that is free. (Wanted to use shields only. Also the deal damage based on missing health as the only source of damage. Having health reset each battle is an issue; was going to remove all damage cards to get beaten up as much as possible then shred the enemy for 500 max? missing health x multiplier.
Possible cards or upgrade ideas to add:
- Food or Bandage(Heal health over 5-10 seconds), Armoured(Provides shields on battle start), Warpath(Receive bonus damage on taking hits to health, not taking damage after 5 seconds resets bonus to 0%), Taunt(Force enemy to attack more often), Final Strike(When losing all health, draw next attack card and attack with a bonus 1000% damage)
- Thorns(Acts like a shield), Guardian(Blocks a single lethal attack to player, instantly draws next health potion and removes self from this battle. Cannot be drawn, but still takes a card slot)
- Siege Crossbow(4x additional damage, stays in deck but can't be used again. When drawn again, does nothing but waste a card draw), Light Crossbow(2-3x additional damage, but has to be drawn again to reload it. Small chance to destroy self on reload), Rapid Shot(60% chance to fire another shot, if so reduce by -10% and repeat), Volley Fire(Remove self from deck and spawn 8-12 arrow cards that when used are destroyed. Drawing an arrow card deals damage and instantly draws next card)
- Shiv/Dagger(Instantly attacks multiple times 3-5x), Soul Ripper(Permanently gets stronger each time an enemy dies), Cursed Blade(Deal additional 2x more damage, but receive 50% of that), Sword Of Greed(Deal damage equal to current gold, sword consumes 10% of current gold on each hit. Or steals 80-90% of the gold you would get from damaging/killing enemies), Mace(1.5x additional damage, small chance to stun enemy), Untrustworthy Flail(No bonus damage, has chance to attack multiple times. Chance to attack self), Time Ripper(4-8x damage, pauses game for 4-6 seconds), Sacrificial Blade(No bonus damage, takes 10-20% of player's current health and turns it into damage)
Some type of challenge would be nice. Like having an enemy with:
- Tons of armour with low health, so you need a spear to pierce or throw an acid flask to melt some armour. Poison could work also, poison daggers or something.
- Damage reflect or thorns, forcing player to invest in some vitality/defence or use damage over time cards.
- Only attacks when receiving damage from any source. (Could be a tree monster, that hits you with underground vines) Requires high damage combos with few actual hits to defeat. This could also be a rage mechanic, each attack increases enemy attack damage.
- Goblin thief, that steals 1 card after each attack. Or steals half your deck on battle start, focusing on most expensive or most useful cards. Counters players who use as few cards as possible.
- All healing is turned into damage, damaging player for each used potion.
High evasion or flying, requires some type of stun like from a mace or a dedicated anti-evade card like sticky goo that would normally be used to slow enemy attack speed.Joker/Dice/Coin, flip a cursed coin every 1-3 seconds. Heads, player takes all damage from every source including their own attacks. Tails, enemy takes all damage. Or to simplify it, who ever it lands on they don't get to attack. Use dice or coin that favours the enemy.- Clone/Mimic, that copies every action player does. Clone/Mimic gets to use player's currently drawn card before they do. And is defeated using luck based cards, dealing damage to self, or that card that uses your missing health as damage.
- Greed, deals damage equal to players current gold. Could also just steal gold on hit.
- Viper that deals poison damage, ignoring player's armour and preventing all healing.
- Onslaught, can't be destroyed. You must survive 10-20 seconds of ever increasing attacks both in damage and or speed. Heavily tests player's defence and fortitude.
Non-attack draw boost allows for insane damage bonuses. Seems like you are multiplying each status effect separately, need to add them all together before applying to base attack damage.
(1.5 is the same as 50% when we want multiply a value with a % | (50 / 100) + 1 = 1.5)
(260 = base damage) (1.5 * 12 = 18)
- 260 * 1.5 * 1.5 * 1.5 * 1.5 * 1.5 * 1.5 * 1.5 * 1.5 * 1.5 * 1.5 * 1.5 * 1.5 = 33734.05
- 260 * 18 = 4680
Currently you are adding bonus damage to player without resetting it. Causing bonus damage to stack infinitely! Like above where i have a deck of 1 attack cards, yet dealing 1800% damage.
In your code, make sure that when the bonus damage card is drawn. You reset the cooldown like you have, but also reset player bonus damage = bonus damage on card.
(Below code allows people to have a 120% bonus card for example, and a 15% bonus card but only keep the highest value if still active)
If (currentPlayerBonusDamagePercentage < cardBonusDamagePercentage)
{
currentPlayerBonusDamagePercentage = cardBonusDamagePercentage;
}
//Reset bonus damage active time or cooldown
(OPTIONAL) This allows for the card to be drawn multiple times, yet stack bonus damage on top of each other as long as their timers don't run out.
- Or create a map/dictionary(Acts like an array but contains 2 variables, key & value (key could = bonusDamagePercentageOnCard, value could = currentBonusDamageActiveTimer) each time bonus damage card is drawn, loop through whole map/dictionary and check if any of the activeTimer's(value) <= 0. If so, replace that key & value with the new drawn card. Otherwise just add to the map/dictionary like you would a normal array. (This prevents map/dictionary from having unlimited entries which would crash the game)
- Every frame reduce all activeTimer's in map/dictionary -= Time.DeltaTime(DeltaTime makes sure that no matter the player's frame rate, value is always consistence!)
- Add all currently active bonus damage values from map/dictionary together to the player.
Best of luck with the game.