Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Feedback Please playtest - Webplayer version of an RTS / Selective breeding game.

Discussion in 'Works In Progress - Archive' started by AlexBienvenu, Sep 3, 2019.

  1. AlexBienvenu

    AlexBienvenu

    Joined:
    Feb 10, 2019
    Posts:
    7
    Hi all !

    I've been working on a little project for the past few months, and I think it's time I put it out there to get some feedback.

    Before I start with the game itself, please keep a few things in mind :
    1. I am really worthless as far as Art / UI is concerned, so I'm not really looking for feedback there unless you are / know someone who would be interested in taking over this side of the project.
    2. A direct consequence of 1): All the artwork in there is stolen :p. I don't think it is a problem for the development and feedback stages. I'll be sure to change it before releasing it. If it is a problem to even have it here, please let me know.
    3. I am pretty new with both Unity and Game Design. I've been learning a lot as I went along, but if something seems obvious to you. Like "he should use this technique" or somesuch, please don't be shy and let me know.
    Ok. Let's go.

    The game started to take shape in my mind a while ago. I don't play much, but most of the games I like were either RTS or RPG games. I wanted to create something that would combine the strategy of RTS and the levelling up of RPG. I wanted to create something simple that I could do alone - mostly to teach myself how to make games :cool:. Something 2D that would play on mobile. After a bit of research, I chose to do it using unity. That's how I started on the path of what would become Apes vs Monkeys.

    The game (in short)

    • You are in charge of a tribe of monkeys (or apes) fighting the great war between Apes and Monkeys.
    • Each animal in your tribe have a simple set of characteristics (Strength, Constitution, Dexterity, Intelligence, Magic) that evolve through XP that is gain by fighting.
    • Each X GameYears (1 GameYear = 2h), each female in your tribe gets a baby. The baby's characteristics are a random mix of both parents.
    • Monkeys (and apes) live 80 GameYears (about a week) and die, letting you play with the following generations.
    • Monkeys (and apes) can be of several races (Howler, Gorilla, Orangutan, Capuchin ...) linked to the characteristics.
    • Each race has a set of learnable skills that can be used during combat.
    A few GIFs:


    Beginning of an Ape game



    Going to war



    Different map


    After a few weeks of playing

    Reproduction System

    One of the thing that makes the game different is that you don't level up your character only, but the whole tribe. To do so, you need to level up your monkey of choice, then leave him to have babies. Then level up the most promising babies and so on.
    If you keep playing with the same Uber monkey without waiting for babies, you risk its death, and the loss of hours of levelling up.

    The reproduction system is quite simple.
    • Each monkey is assigned Male or Female at birth (this is not an opinion piece but a game mechanic :) )
    • Monkeys younger than 15 do not participate in the reproduction process (but still in the fighting, go figure).
    • Monkeys older than a certain age do not participate in the reproduction process.
    • Every X years, each female gets a baby with a male of her choosing. The choosing is pseudo-random and works as follows:
      • If a female is of a specific race (tied to a characteristic), it will consider only males of the same race. If no male of the same race exist, it will consider all races. Female of the center race consider all males.
      • For each race, one male can be chosen as the Alpha. The alpha has a higher probability of being chosen than a normal monkey. This is a major way in which you can influence the direction your tribe is going.
    • Each of the baby's characteristic is defined as a mix between the Mom's and the Dad's.
    • Babies start with the experience points that correspond to their characteristic values.
    One of the problem I have with this is that unless there is a lot of deaths, the amount of monkeys grows exponentially with each generation. More on that later.

    Characteristics System
    After a lot of simplification, I settled on 6 characteristics : Strength, Constitution, Dexterity, Intelligence, Magic, Health.

    Health is a special characteristic, because it is defined by your side in the war.
    Apes have a greater Health value than Monkeys.
    Except for Health, there is no difference in characteristic between Apes and Monkeys.
    As a result, Apes fight against 3 Monkeys of the same power to get a fair fight.

    When a unit levels up, a random upgrade happens. Random upgrades are designed to create peaks by giving a higher probability to characteristics that are already high.

    The race of the monkey is chosen by thresholding.

    Skills System

    In the latest version, I attribute 3 skills per race except the "Center race".

    Of these skills. Some give you a new weapon or a passive skill, some an activeAction controlled by the unit AI, and 4 skills per army are "Special".

    Special skills are spells affecting all allied units, and are manually set off by the player (hopefully at the right time)

    Battle System

    The battle is so far the part I am less satisfied with.

    The player select a group of apes or monkeys among his tribe he wants to fight with.
    Monkeys should be selected by groups of 3 since 1 Ape = 3 Monkeys.

    When the group is selected, the battle can start.
    A TileMap is chosen as random among a predefined set.
    Tiles can be : "Walkable, Unwalkable or SpawnPosition".

    A CountDown timer starts. Battle is over when CountDown reach zero or a player loses all its monkeys.

    Units can be put on the map by clicking on a SpawnPosition tile.
    Once units are on the map, UI takes over to Choose a Target, Move, Attack, Retreat, Heal, etc ...

    There is now two option :

    Option n1 : Attack vs Attack
    Each time an Ape is set down, the enemy randomly set down 3 monkeys of similar value.
    Each time a Monkey is set down, the enemy check if the number of Apes in game is too low and set down an Ape of similar value.

    Option n2: Attack vs Defense
    The Defender has a Deploy phase in which to put its units down.
    Then the Attack phase starts in which the Attacker puts down its units.


    Game Design (my rambling thought process)

    I started with a simple idea : Monkeys reproduce, fight, evolve, repeat with the next generation.

    My first few weeks learning Unity, I created the basic scripts to do all that.

    My first monkeys had about 12 characteristics.
    The reproduction system was pretty much the same as the current one.
    There were no different types.
    They were moving on a single TileMap of grass with a bit of impassable river.
    The fights were very boring and repetitive, but I quickly grew addicted to making my monkeys evolve :p.

    I started adding components to make the fight more interesting.
    I had this idea of re-creating the evolution process prehistoric man must have gone through. Starting with monkeys discovering sticks as a way to fight and ending with mounted chimpanzee knights in full armor (spanning hours of gameplay).
    To do so, I implemented a SkillManager, that would hold all the skills a monkey could learn in his life, along with a ConditionManager that would work as both a condition on characteristic and a technology tree.
    Followed an InventoryManager (tightly linked to the SkillManager). I wanted to do something like : you have sticks and your monkey knows how to use sticks, so they can use sticks in a fight. Then I had in mind that the more you used a stick, the better you would understand the concept of weapon, and could start making your sticks pointy (or with a stone tip, or whatever)

    I wanted the Intelligence characteristic to define the way the AI took advantage of the terrain / allies /etc. and started reading about AI.

    I wanted fights to be multiplayer. So I dove into UNet and managed to do a LAN-type fight happen between two version of my games on the same computer (what a waste of time :oops:).

    Then I wanted to have a visual representation of my differences in monkeys. I started looking into how to make groups of my different monkeys into sub-tribes. I went down the rabbit hole for a while.

    One day, I was reading articles about making your first game. And every single one of them mentioned the minimal viable product (Duh!)

    I decided to to branch off my current version, strip the game to a minimum, and see where that led me.

    I went through my characteristics, and removed all but six Strength, Constitution, Dexterity, Intelligence, Health, Magic (I hesitated a lot, but kept magic because whoooo! magic ! :D).

    From those characteristics, I defined my types of monkeys in a very simple way, using hard coded values of the ratio Characteristic / SumOfCharacteristics.

    A bit later, I saw that it was very hard to get monkeys of low health, because they tended to die early and get rooted out of the reproduction cycle (yay natural selection!), so I decided to use the difference in health as a game mechanism, and divided them between Apes and Monkeys from the start. We were now on a 5 characteristic system.

    With only 5 characteristics, it was easy to see that each skill in my system could be attributed to a race instead of the complex system of conditions which meant any monkey could get any skill if it evolved long enough.

    And in the same spirit of simplification, I limited myself to 3 skills per race.

    Now we have :
    2 Armies ( Apes or Monkeys)
    5 Characteristics (so 12 races - 1 for each characteristic + 1 for the "middle one" that doesn't match any threshold)
    3 Skills per "characteristic" race so 30 kills.

    We can start with the balancing and start showing it to friends and random strangers on the internet.


    If you want more info, feel free to ask. I like talking about it :);)
     
    EVECTOR likes this.
  2. AlexBienvenu

    AlexBienvenu

    Joined:
    Feb 10, 2019
    Posts:
    7
    When I start coding, I always leave things a bit unorganized.
    Everything public and just try to make things work.

    Now that I reach a level I like, I take some time to clean up my code.

    I spent yesterday building a ProjectileManager system that keeps track of all projectiles and reduce overhead using an Object Pool. The gain in speed was significant. I think from two reasons :
    1. Less objects are instantiated
    2. There is now only one Update for all projectiles instead of one for each projectile.
    I'm wondering if grouping functionalities to reduce the number of Update calls (even if it means having scripts doing several things) would give a gain in performance. Thoughts ?

    I am currently looking into UnityEvents to make some reactions to things less hacky (mostly the UI, but also death of units and xp gains).

    Do you have any tricks I can use to speed up / clean up things ??
     
  3. AlexBienvenu

    AlexBienvenu

    Joined:
    Feb 10, 2019
    Posts:
    7
    I've been working on a way to deal with Spells and Effects.

    The way it is supposed to work is :
    • The action of a unit creates an effect (poison, ice ring, etc...)
    • The effect affects other units
    • When the time of the effect runs out, the effect disappears.
    At first, I was doing everything with MonoBehaviour.
    When a unit was hit with a poisoned weapon, a "Poison" monobehaviour was added to this unit, with an update function to take care of the damage and the duration of the effect.

    Now, I have :

    • In my global scope, an EffectDurationManager
    • For each unit, an EffectManager
    • When a unit does an action that triggers an effect, it calls the EffectDurationManager, which adds the effect to its List. It also adds as listener the EffectManager of each concerned unit.
    • When the effect reaches its disappearing time, the EffectDurationManager triggers an event and all listening EffectManagers know to stop the damage related to the effect.

    It feels more clean that way. With only one central system to deal with effect creation and duration, and only one update function for all that.

    If you've encountered similar problems and found different / better solutions, let me know.

    Because all of that was tiring work, I also added some baby pictures for my young monkeys.

    BabyCapuchin.png
     
    CmdrSisko and owlhowell like this.
  4. AlexBienvenu

    AlexBienvenu

    Joined:
    Feb 10, 2019
    Posts:
    7
    Ok.

    So I realize I am not giving a lot of updates, but I still work on it when I have time.

    I got to a point where I was satisfied with the Tribe functionality, but not happy with the fights.

    I re-wrote the whole thing with a more RTS vibe and I think it is better now.

    There is still a lot of work to do, but if anyone want to play it and give me feedback it would be super appreciated.

    The game is built for WebGL so it is super easy, just click here : https://simmer.io/@MonkeyWars/monkey-wars
     
  5. AlexBienvenu

    AlexBienvenu

    Joined:
    Feb 10, 2019
    Posts:
    7
    Hey guys ! I'm still looking for some feedback. If you could take 5min to play it would be super appreciated.

    The game is built for WebGL so it is super easy, just click here : https://simmer.io/@MonkeyWars/monkey-wars
     
  6. welby

    welby

    Joined:
    Mar 22, 2011
    Posts:
    549
    I gave it a quick go.

    Was enjoyable with what was there. The crude nature of it was actually humorous. The kicks especially.


    I figured out that to disengage combat you'd Long press. It may be helpful to add some sort of brief timer bar when pressed so you know you are doing something. some sort of feedback to the player so they can visually see that they are long pressing.

    I don't see a way to use 'skills' like Scout, Fire, Repair House.

    I did not see any visual or indication that I was collecting bananas.

    so far so good though, keep it up!
     
  7. AlexBienvenu

    AlexBienvenu

    Joined:
    Feb 10, 2019
    Posts:
    7
    Thanks a lot for the feedback !
    Im glad you like the animations. It is very not my strong suit, so I did what I could with some photoshop.

    I am currently working on adding a bunch of tutorial / explanations to make it more understandable. Thinking of having a step by step first fight to make all the commands obvious.

    If you played only a bit, then I guess the Special Powers were not unlocked and were grayed out. I'll add a lock icon or something to make it more obvious.

    If you don't mind me asking :
    Did you get that part of the game was to obtain all the types of apes ? (it sound like you got at least baboon and chimp. 2 out of 6 is not bad :) )

    I want to hint at it without making it too obvious.

    Again, thanks a lot for trying it out !