Alpha Hostile Takeover - A Cyberpunk Tactical Deck-Builder (Demo Available)

W

WhisperingSpider

Guest
cover.png

Hey everyone! I've been working on a game called Hostile Takeover. It's a rogue-lite game that merges deck-building and tactical turn-based combat in a cyberpunk setting. I just recently released a public demo, and I'd love to hear any feedback anyone has.

Demo (Windows Only) - Last updated 5/31/19
Join the Discord!

Screenshots

Combat Encounter
combat1.PNG
Adding New Cards
chooseCards1.PNG
Viewing Your Deck

viewCards.PNG
Installing Upgrades
installUpgrades.PNG


Description

Take control of a small team of contractors, hired by mysterious suits for impossible jobs against powerful corporations. Your contractors each have custom cybernetics that allow them to use a host of abilities, represented by cards. These cards are used in turn-based combat for actions such as movement, attacking, defending, and special abilities. Along with combat, you'll encounter events, character upgrades, and black market shops as you explore each corporation. Add and remove cards from character decks to customize each character to your liking!


Features
  • Random-ish levels
    • Hand-made environments and encounters are pieced together through procedural generation to build each unique level. Changing layouts, hazards, and events keep each run fresh, while enemy encounters and combat maps are designed for fun and challenge.
  • Unique character classes
    • Each player character is represented by a different class, and each class has their own unique cards to build a deck from. One may rely on shields to reduce incoming damage, while another may instead disappear, forcing enemies to attack another target.
  • Game-changing cybernetic upgrades
    • Along with adding new cards to character decks, characters can also be modified through cybernetic upgrades that you occasionally come across. Unlike abilities, these upgrades are always active and can greatly change how a character plays. Want to drain the life from your enemies with each attack? That can be arranged, at the cost of never healing through standard means again.
  • It's called power, not mana
    • Using abilities costs power, and the bad news is each round your group's power is reset to zero. The good news is that each ability not only has a power cost, but a recycle value, which can be converted into power when discarded. Do you keep each character balanced and focus your power on the character with the best draws each round? Or do you turn one of your characters into a recycler to fuel their killing machine companion?
 
Last edited by a moderator:
W

WhisperingSpider

Guest
I've been on a weekly update schedule, pushing out a new build to itch.io every Friday night, but unfortunately I can't say the same for write-ups like this. In the month since release, I've had some great feedback, and the majority of the work done has been to rectify issues from that feedback.

Balance Issues
Obviously this is something that every game will have once it's released to a broader audience. As I expected, most people found the game too difficult. It's supposed to be a difficult game, but not frustratingly so. Rather than focus on tweaking the numbers, though, I instead wanted to tweak the player choices to help with this. The biggest change in balance was to lower both movement speed and range for all enemies. Whereas originally most ranged enemies could and would shoot their target from almost anywhere, their threatened range is now reduced enough that a viable defensive option is to retreat far enough away that they are unable to attack at all. Other numbers like HP, damage, and defenses will be (and have already been) balanced as well, but I think this change will go a lot further to interesting gameplay choices.

Stupid Controls
There's no way around this one - my original control scheme was stupid. To discard a card (which is a major gameplay feature) you originally had to right-click to queue the discard, then left-click to confirm the discard. Except left-click was also the button to queue a card use, and right-click was also the button to cancel a queued card, which made things right confusing. Throughout a single game the player will use or discard dozens if not hundreds of cards, and if that isn't second nature after a few minutes of playing then it's a complete design failure.

I went through a few different versions until I came upon one that feels good - now when discarding you HOLD the button down on the card, with no extra confirmation needed. The default duration is 1 second, and during this time a recycle icon grows to completion and a sound effect plays that increases in pitch. After using it once it makes complete sense and is impossible to accidentally do. The only issue with this new scheme is the frustration of waiting, so I left that entirely up to the player. There's an option to set the delay when discarding to values between 0 and 2 seconds. While it seems like most people prefer the instant discard by right-clicking, I think it's important to initially have the hold option be the default until they're comfortable enough to change it themselves.

Information (and the lack thereof)
I've spent more time on how best to present information to the player than any other aspect of this game, by a huge margin. I never want the player to feel like they got screwed over because the game did something they didn't know. Unfortunately, there's an absolute TON of information that the player needs access to at any given moment. The combat grid, the character positions, the cards in their hand, what special effects of the cards do, enemy intents, enemy targets, character health, character shielding, status effects afflicting all characters in play - and it's been a challenge to prevent the screen from being overwhelming. I think I've done a decent job of keeping things small but noticeable with smaller texts and icons that grow as well as popup windows when hovered, so that you understand something additional is there but it doesn't concern you with the details unless you actively mouse-over it. There were some other complaints, however, and changing them has definitely made the game better.

First was ability ranges. Queuing an ability like an attack or a move draws its range onto the cells. However you cannot queue a card if you don't have enough power. I had a few complaints where people discarded a card to gain the power they needed to use another card only to find out that they were out of range to use it. This was a quick and easy fix - by hovering a card and holding the Preview button, its range is drawn, and the range is cleared as soon as the button stops being held. It's simple to use, simple to understand, and invisible if the player doesn't care, which is a win in my book!

Next was enemy ranges. By hovering an enemy, after a short delay it would show you which cells they could attack with their current range and move speed. This was a solid start, but made for frustrating play when you wanted to move out of their range and had to keep hovering multiple enemies that were attacking you and then queue up a move and then think "Oh wait, was that cell REALLY out of range or could the enemy just barely reach it" and then hover again and blah, exhausting. So now you can simply click on an enemy to "lock" their threatened cells (clicking on them again clears just their threatened cells, or clicking anywhere clears all threatened cells), which stay visible until you clear them or an ability is used. This lets you see, without a doubt, if you'll be safe from certain enemies when moving. Since I had the Preview button already setup for card ranges, why not use it for enemy ranges, too? If you don't care about specific enemies, any time a movement card is queued you can hold the Preview button to show the threatened cells of all enemies that are going to attack that character next turn. In most cases this is actually what the player cares about anyway, so why not make it easy when you want it, and invisible when you don't?


I'll go over some of the other changes I've made in my next post, but until then I'd love to hear from anyone and everyone, and the alpha versions will continue to be updated weekly and free-to-download!
 

Yrbiax

Member
Hey, i tried your game.

It took some time to figure out how to play properly, but it was quite fun once i got used to it.
I somehow managed to beat the game with 1 hp left :D
hostiletakeover.png
In some rooms i couldnt see my characters because cards got in the way.

I got this error in tutorial when i was activating shield:
___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Step Event0
for object obj_character:

Variable obj_enemy_security_guard_melee.abilityName(100415, -2147483648) not set before reading it.
at gml_Script_state_enemy_ai_start
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_state_enemy_ai_start (line -1)
gml_Object_obj_character_Step_0
 
Last edited:
W

WhisperingSpider

Guest
Hey, i tried you game.

It took some time to figure out how to play properly, but it was quite fun once i got used to it.
I somehow managed to beat the game with 1 hp left :D
View attachment 24842
In some rooms i couldnt see my characters because cards got in the way.

I got this error in tutorial when i was activating shield:
___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Step Event0
for object obj_character:

Variable obj_enemy_security_guard_melee.abilityName(100415, -2147483648) not set before reading it.
at gml_Script_state_enemy_ai_start
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_state_enemy_ai_start (line -1)
gml_Object_obj_character_Step_0
Thanks for checking it out and for the feedback! Congrats on making it to the end, I don't think many players have made it there :) I apologize about the crash, I had someone else point that out yesterday and it's already been fixed and re-uploaded, but unfortunately missing the tutorial leaves out a ton of stuff. You can actually right-click anywhere not on a card to hide cards in your hand, which again, is explained in the tutorial that you couldn't get to :p

I push out updates every Friday, and this week will see about a dozen new cards for the soldier. Thanks again for trying it out!
 
W

WhisperingSpider

Guest
I'll give this a try over the weekend, looks interesting!
Thanks, I'd love to hear your thoughts on it! I just uploaded a new version so make sure you download the most recent one for the best experience :)
 
W

WhisperingSpider

Guest
For this post I'm going to go over two core gameplay systems that seemed like good ideas in design, but didn't fare so well in practice.

Infinite Shielding
In Hostile Takeover all characters can gain shields that act as temporary HP. Originally shields lasted for the entire encounter. I wanted a penalty for the player if they ignored an enemy for too long and they were able to stack up shields, and I wanted defensive options for the player even if they weren't under threat on that exact turn.

A few people complained about enemies having too many shields after a number of turns, so right away I kept my eye on it as a possible problem. There are some effects like Bleeding, or Sniper Rifle attacks that ignore shielding entirely and deal damage directly to HP, so it was a possible problem with some solutions already in place. The big problem came from someone who found an optimal strategy that was simply not fun. They were able to ignore offensive abilities entirely for a few turns while they built up shields, and then spend the next couple turns going on the full offensive, then rinse and repeat until all enemies were defeated. This not only made them practically invulnerable, but it's also a super boring way to play the game. So I have one potentially annoying aspect, and one game-breaking aspect - definitely time to change it.

The solution is shield breaks - shields now break after taking ANY damage. This means you can still stack up a lot of shielding to protect you from one big hit, but it won't protect you from the next hit, big or small. It also strengthens card-by-card gameplay, by encouraging the player to use weaker cards first to break shields and save more powerful cards until enemies are vulnerable. Finally, it allows for a unique interaction with multi-hit attacks, where the first hit breaks the shield and subsequent hits go straight to HP. This means that shields aren't the ultimate defense anymore - suddenly other buffs like Evasion (flat damage reduction) and retreating out of range are not only viable options, but the preferred options depending on the attack. So far it's been met with solid feedback, and the old shield system seems like it will die a lonely death with no one missing it at all.

Unique Isn't Good
The other major gameplay change (which will roll out in this Friday's patch) is Upgrades. After three consecutive combat victories, a character earns an upgrade, which is a permanent perk. Upgrades can grant powers like gaining a buff at the start of each turn, increasing damage after each move, granting shielding when not moving - situationally-powerful abilities that help to mold characters into unique builds each game. I wanted a risk/reward system with them, however, so I made them into cards. If you wanted to permanently gain the upgrade, you had to spend a chunk of Power to use the upgrade, instead of spending it on attacking or defending that turn. To make them non-binary, you could also permanently discard them for a burst of Power as well as granting you its effects for that encounter only. Kind of an 'oh 💩💩💩💩' button, if you will, as well as being needlessly convoluted.

Well, as you can probably guess, NO ONE EVER discarded upgrades. They didn't want to miss out on having that power permanently, so they hung onto them if they couldn't afford to use it, and then got frustrated because it ate up a card in their hand that they couldn't do anything with. Which means my system was working as intended! If you wanted to use it but not that turn, you had to pay the price of losing a card to play that turn. However, instead of making for fun and tough decisions, it led to frustrations and non-decisions. As a quick fix I made upgrades recyclable like normal cards so that it simply gave a small amount of power without any temporary buffs or permanent losses. This alleviated the 'wasted card' problem, but now there was another problem related to optimal strategy - all you had to do was get a combat encounter down to the last enemy, then hole up and defend, and wait until each character drew their upgrades to spend power on them. Which is a not-fun and boring way to play the game (I sense a pattern here.)

So instead of being unique, it's back to the tried-and-true - upgrades now install permanently when you get them, and are never added to your deck as a card. However, to give the player some kind of decision around them, you can also opt for healing or credits instead of the upgrade. This helps to avoid upgrades which could weaken your build, gives the player a way to heal mid-dungeon (which many players requested), and adds an additional source of income. By passing on an upgrade and taking the credits, you earn roughly half the cost of an upgrade from the shop. This means that if you see an upgrade that you really want in the shop, you may find it worthwhile to sacrifice other upgrades to be able to afford it.
 
W

WhisperingSpider

Guest
Code Refactoring

Code refactoring is often seen as a big no-no, as you're wasting valuable development time 'fixing' something that doesn't need fixed. I agree entirely with this, but I was also running into some issues where some of the more unique cards I wanted to add were causing headaches and unique edge-cases for each and every new ability. I came up with a solution that I like, and will stick with for the rest of this game's development - Monday through Friday is for moving the game forward, and if I decide to spend some of the weekend working on the game, I can spend that time on whatever I want, including code refactoring.

So, I spent last weekend completely rewriting card and ability logic, and the result is an extremely smooth system that has no unique single-use cases. In fact, the only unique aspect between cards now is what scripts the input button calls when you're hovering them. Cards in your hand get played, cards in the "New Card Select" screen get added to your deck, cards in the "Remove Card" screen get removed from your deck, etc. Adding new abilities, even weird ones, is now much easier and cleaner. However, I still had one issue - text space on the card itself.

Card Perks

I like the challenge of keeping text short and succinct because I literally don't have the space to afford anything other than that, but it was causing some of the newer cards to be confusing to players. I like situational cards that can be used to build decks around, so there are cards that do things like increase damage based on how far away the target is, or let you draw a card for each enemy hit, or can only be used under certain circumstances. Keeping the standard card text for abilities (Damage, Target Type, Area, Range, and Effects) was becoming a problem when I also wanted to include these additional qualifiers.

My solution to the above problem is something I call Perks. These are short words or phrases that are highlighted dark orange in the card text, and show a popup window when the card is hovered to explain what they do. My hope is that after a few games, players will understand what perks do, and not need to pay attention to the popup but just read the perk name. For example, if a card is tagged with Scout, it increases damage based on range. If it's got Sneak Attack, it increases damage based on the Stealth the player has.



Combining the Two

Something I didn't plan with the perks system is how well it would fit into the new card logic. With a few lines of code, I can add a new perk, fill out its popup, and handle any additional actions that may be required, whether it's in the damage calculations or post-ability cleanup. I'm still surprised when I add something that I feel should take me an hour or so and it just...works. Which is also a horror in and of itself...
 
W

WhisperingSpider

Guest
I haven't forgot about this, I just haven't had time to actually sit down and play it yet.
Haha no worries! If you get around to it, that would be great, and if not, well then that's just fine, too. If you do, just make sure you grab the newest version as a lot has been changing lately :)
 
Top