Hey guys
I have been following the main GSoC issues and ideas for a while now, as well as research as much I can about the world (and other worlds like LaS). What is needed in the game is some good ol' combat , so I'm here to deliver (in collab with @korp or @Kartikey Agrawal ) . I'll be posting most of my ideas together with explanations, but I'm also here to listen to everyone's take on what you want from anything in the future. I'll be editing the main post with mentions to who gave the idea, as well as mark every progress made bystriking said task and posting a video link next to it.
The whole concept of combat isn't new at all, as @aherber already created a branch that actually implemented some of the stuff I'm going to describe in his thread. What I want to do is not only replicate what he did, but also add new items/functionalities for the player.
Implementation Ideas:
For a simpler way of regarding the tasks, I thought a more obvious and organized list would be in order. As such, this will be a start:
I added some color coding depending on how I considered a certain task to be as : 3D Wizardy, Models, UI related. I'm not a pro at deciding what colors should be used where, but this is an alpha asessment
Trello board is also a WIP
I have been following the main GSoC issues and ideas for a while now, as well as research as much I can about the world (and other worlds like LaS). What is needed in the game is some good ol' combat , so I'm here to deliver (in collab with @korp or @Kartikey Agrawal ) . I'll be posting most of my ideas together with explanations, but I'm also here to listen to everyone's take on what you want from anything in the future. I'll be editing the main post with mentions to who gave the idea, as well as mark every progress made by
The whole concept of combat isn't new at all, as @aherber already created a branch that actually implemented some of the stuff I'm going to describe in his thread. What I want to do is not only replicate what he did, but also add new items/functionalities for the player.
Implementation Ideas:
-
Improved Health System : As you might notice in many games, having a clear indicator of how much damage you're taking is a must. For healing and other effects as well, we can either have instant or over-time ways of doing it, each with their own use-case:
- Damage over time : We could turn the health bar to a color that would represent the effect that is affecting the player (as well as its intensity showing the rate at which the health ticks down). Healing over time I would suggest be a “wave” effect to the player’s health bar, just like a golden apple does in Minecraft. This way, the amount of regeneration would be represented by the wave frequency. This part might be quite involved with the UI side of things, but I'm sure we can collaborate well enough
- Instant damage will blink the health that was taken away, and instant healing will cancel the blinking effect if it heals for more than there was damage taken or lower the amount of blinking health if it was less. If the player was not damaged before instant healing (not to say that he has no missing health), the bar will refill quickly to the desired amount.
-
Sprinting System : Just like in Minecraft, there will be an energy amount that you consume for every moment of running, more for jumping, and you could refill it by either resting or other means (*cough* potions *cough*). The maximum energy amount will be determined by a set of stats of the player that will come in close contact with the Anatomy System. I am thinking about hunger, physical training, effort done up to the current moment and stuff like that. From this example alone, the energy limit should slowly rise towards max if the player is well fed. I will have to talk to @korp in a week or so to iron out the details and concepts about that system.
-
Combat System : Proper combat means weapons and armor. I will take most of what I have learned from games like “Divinity, Original Sin”, “Legend of Grimrock”, “Diablo” and “Mount&Blade” and apply that to various weapons and armors in game. A few starting ideas for this would be:
- Weapon types and damage types : for example, a sword would have both piercing damage in thrusting and slashing damage in swinging, while the hammer would just be blunt damage. (this will mean that there will be different types of weapon damage events and effects (like swing time and sounds). The type of swing will be determined by the player state. If he sprinted recently, that is usually a sign of thrusting damage. If the player does swing his mouse towards a direction, the weapon will follow soon after (if he uses it)
- Defense : Armors of course will be of different types as well. I have yet to do an in-depth search about this, but the main ideas would be armors reducing the player's speed via encumbrance (I'm not sure this idea will be accepted , although it could be reduced to only the really protective/hard-to-make ones), giving the player a status effect depending on the type of blow (some of these are [concussion+knockback->when player with plate armor is hit by blunt object], [bleeding->enemy weapon sliced through the armor and got to the player], [crush->when the player doesn't have blunt protective gear] and more to come). Armors themselves suffer durability damage depending on their type and the type of damage they receive. I'm still thinking of the mount and blade way of having armor values only for specific body parts, but yet again, anatomy system and design come into play here.
- Counters : Players should be able to use a combination of movements as well as defensive maneuvers to parry, block, fake and possibly counter an enemy. Longer weapons will be vulnerable to counters from players rushing towards the one that had said weapon. Power bars for weapons would not be out of the question, as well as mechanics that use them. One example would be recovery time from a swing and this could make the character fairly vulnerable. I'm still a bit curious about how the player holds a weapon, because blocking arrows with a giant bladed sword or a giant maul could be possible by putting the hammer in the way of the arrow (and thus making it act like armor in a way, so it might as well take durability damage )
- Fletchery : Bows and crossbows will be a good start, making them have multiple types of ammo and firing modes will not be as easy (alt firing mode for crossbow would be an upgrade to repeat crossbow - Chu-Ko-Nu style, while alt firing mode for bow would be holding arrows in the string hand, allowing for speed shooting - less damage due to short string pulls but more arrows; good against weak armor ). These weapons will have to include either an inventory of their own, a pseudo inventory where they have ammo patterns to follow (what to reload after they exhaust an ammo type), or the player can use them and it will reload by inventory proximity. Either way, having ammo of more than 1 type loaded might be harder to do.
-
Anatomy System : Anatomy, in my opinion, involves more than just body-parts, but everything involved in taking care of said body (what goes in, wounds, health, status-effects)
- Survival : Going into detail about what survival would imply would make it too difficult (for the player to survive in-game that is ). That said, that’s the reason people play some games: the challenge. Hunger is an easy implementation of a basic player need. The issue here would be creating recipes, a whole cuisine of items to be devoured. Some foods may give status effects if eaten raw, or might affect the outcome of a certain type of food you make. I’m thinking procedural stats for ingredients to affect the final food product from a recipe. Bad products could be used to make a safe food (that will not poison the player at least), while the good ones can be stored or cooked into nutritious foods. This plan would imply a heavy use of the crafting system, as well as procedural addition of properties to certain entities, creating a heavily populated family of foods of the same type. (should work well with the farming module)
- Body-Parts : Hitting a specific part of the body will have to affect the player in different ways, affecting their movement and probably rotation. Just consider the player made out of the 6 components he is in minecraft (head, body, 2arms, 2legs), that is about it for an initial idea. This of course will be extended, and an entity might as well have more than 6 body parts, which I'm still thinking how would react to the terrain (like a tail when a creature or player backs into a wall - might want a generic tail for small creatures like Mibbles from LaS)
- Falling + Gravity : Another concept that might not be wanted , but it does make sense theoretically. Falling damage should of course affected by the player weight. This could imply either the current equipment, the hotbar, the whole inventory, or a combination of the three. The player could also have some stats that prevent or reduce falling damage, so there are a lot of possibilities
- Application : The system should be available for most entities in the game. From player to mobs and even structures? (turrets?). It should be structured well enough to allow a custom amount of inventory slots for items (rings, necklaces, sashes etc) as well as armor; this of course depends quite a lot on inventory and UI, so discussions about these will be great.
-
AI System : What is a combat system without stuff to kill, that also fights back? I plan on creating an AI that is capable of navigating terrain depending on its capabilities/abilities. For a start ground enemies with certain movement patterns will do the trick, but flying ones are always necessary. Level differences, blocks that control areas (anti-mob torches in minecraft), biomes or time of day (light levels) and even blocks (water/lava; cold/hot; dry/humid; acidic/alkaline) could affect what paths creatures prefer. This one is heavy on algorithms, but it could be related to a proper user interface if you wanted to give commands to some creatures by interacting with them, screaming commands to more creatures in an area around you or having some sort of remote control for all these purposes. This functionality is needed for MOO that @Upekshe Jay was interested in and is closely related to behavior trees. (although a simple version of pathfinding might work just as well for those purposes)
-
Sticky System : I know it's not the best of names... This system is created for the sole purpose of sticking blocks anywhere on terrain (where they can be placed). I already have a functional version of this, but I have to port it to a module before I do anything else with it. It's used to stick any type of "sticky" block (that has a StickyComponent) to any available surface in the landing area -> the item you throw will transform into a block that suits the needs of the side it landed on, which can be the top, bottom, or any side of the block it collides with. Improvements to this system will come by means of introducing a speed threshold for sticking (they gotta go fast to stick) and maybe a certain angle?
-
Projectile System : Name stolen straight out of aherber's combat branch again, this system deals with fast traveling projectiles and their interactions with the world. They can bounce, ricochet and embed themselves in the block they hit. This can be used in many, and one quick example would be a video I did on it. Climbing walls, using this system to potentially ride cannonballs or rockets; lots of possibilities, for destruction and otherwise . Lighting up a cave has never been easier than with a TorchBomb™ (projectiles + sticky system = love... wait a minute... that sounds even more wrong )
-
Portal System? : I haven't discussed this idea too much (or at all) yet, bit it did sound like it had potential, in my head at least. Think about it like this: Minecraft portal; we all know it, fine and dandy; but how about if we saw the other world through the portal, like in "Antichamber"? Loading some chunks of a different world would be a start (if at least we can have 2 worlds on the same map - I know minecraft generates the nether as soon as we enter it; This portal could create the other world as soon as we activate it). Besides just a different world, I also discussed about chunks having different physical properties (denser air that you could potentially swim through, low gravity so you jump higher, reverse gravity (implies rotating the character as well -> probably going to become something like "VVVVVV") and stuff like that, but only for certain chunks). This could either be done with some wizardry @Immortius might know or have the tombs of, or special blocks that affect an area around them. Still working on this concept, and would like some ideas/suggestions.
For a simpler way of regarding the tasks, I thought a more obvious and organized list would be in order. As such, this will be a start:
-
Improved Health System
- Damage over time / healing over time
- Instant damage / health items.
- Blinking effect for health loss
- Regeneration
- Add visual wave effect to regeneration
- Add correct frequency to the wave effect
- Add visual wave effect to regeneration
- Status effects
- Health coloured properly
- Icons for displaying on screen (/w timers)
- Slowness
- Dizzyness
-
Sprinting System
- Add energy system
- Add bar to to the UI
- Add stats? (strength, stamina, agility - if anything just to have their potential there)
- Create energy replenishing items
- Make the Sprint bar dynamic (as explained above)
- Add energy system
-
Combat System
- Weapons
- Create a few unique weapon prefabs to be used in game
- Give them properties (reach, damage)
- Create models for them
- Add damage types to said weapons
- Add weights to weapons? This will be of aid for when the power attacks come into play
- if (Sprinting System) Add different types of attacks
- Create a few unique weapon prefabs to be used in game
- Defense
- Conjure several rare armors for in-game testing of weapons
- Add relevant stats (armor thickness, armor type, durability, weigth)
- Create proper models for said armors
- Create the inventory slots necessary for adding armor and items
- Find a way to show the armor on the player
- Tie the armor to the player in such a way that its stats can be read from the player wearing it
- Create defensive items (shields, bucklers, dreamcatchers wait what?)
- Again with the properties
- Models as well
- Add player status interaction to type of hit -> type of armor relation
- Bleeding effects for cuts and pierces
- Concussion effects for bashes
- We'll need some visual awesomeness here. Player should see jack buck
- Slowness effect as well
- Maybe just a camera shake for when the player receives damage?
- Blood on screen? Too cliche? Thought so...
- Bleeding effects for cuts and pierces
- Conjure several rare armors for in-game testing of weapons
- Counters
- Implement vulnerability periods after striking and missing
- Add power bars for harder hits
- Add groggyness time for after getting hit by a powerful attack while defending
- Create defense move (mouse 2)
- Allow weapons to block projectiles
- Means also adding material/armor type
- Make the weapons 3D models that projectiles can interact with (if they don't already)
- Fletchery
- Add bows to the game
- Add bow model
- Add shooting power
- The actual power bar
- An animation for said power bar
- Sound?
- Add different ammo types to the bow
- Normal Arrow
- Fire Arrow
- Explosive Arrow
- Gooey Arrow (if you hit another creature with it, it explodes into tens of Gooeys moments later; Does not work on gelatinous creatures)
- Torch Arrow
- Platform arrow (embeds itself in the wall so that it makes a solid wooden block (like a sideways fence)
- Ladder arrow? (drops a rope ladder all the way to the ground
- Add item inventory?
- Add alternative firing mode
- Add crossbows to the game
- Add crossbow model
- Add shooting animation and sound
- Add different types of ammo
- Bolt
- Thunderbolt (as much a reference to mlp as it would be a challenge to visually design the effect it would emit between targets and how it would sync up with the code itself).
- Add bows to the game
- Weapons
-
Anatomy System
- Survival
- Implement hunger
- Add ingredients
- Add models for new ingredient items
- Add spawn source for these ingredients
- Add blocks out of which ingredients fall?
- Add an "ingredient" component to already existing items that fit the purpose ( I know we have farming somewhere)
- Invent basic foods
- Add recipes
- Add block models
- Add effects? (like steam from soup)
- Add stats for dropped ingredients
- Make the stats a random chance between a maximum and minimum
- Create dishes that combine ingredient stats.
- Add status effect to foods depending on stats
- Body Parts
- Add a giant block around the player (for proof of concept)
- Add a rigidbody for each bodypart
- Add animations for types of movement
- Flying
- Running
- Walking
- Implement detection for player attacks
- Implement wounds? (damage local to body parts)
- Add impact towards overall movement (attack speed, running speed, jump height)
- Add visuals? (cuts, bleeding effects, scars)
- Falling + Gravity
- Calculate a player weight depending on either armor or inventory, or both
- Calculate relative damage for different falling speed impacts
- Survival
-
AI System
- Add a random movement AI to entities for testing
- Add several simplistic pathing algorithms
- Clump into an area
- Disperse into a formation
- Go from A to B straight
- A to B with obstacles (with cases of impossibility)
- Improved algorithms
- Add preference system
- Dislike dangerous paths
- Dislike slower paths
- Dislike forbidden paths
- Approve healing
- Wait if no reasonable way to get to target without hurting self too much
- Hide if taking damage in safe zone
- Recognize hiding positions
- Aiming system (for ranged enemies)
- Enemy recognizing
- Proper ballistic trajectory plotting to stationary target
- Position anticipation
- Morale? (enemies run away when badly hurt or attack you if they are in a pack)
- Add flying enemies?
- Add preference system
-
Sticky System
- Implement sticking blocks to terrain
- Add threshold for sticking
- Add sticking sound?
- Implement sticking blocks to terrain
-
Projectile System
- Implement proper arrow impacts
- Solve tunneling issue
- Add arrows with different physical properties
- Pierce
- Ricochet
- Bounce
- Add projectile "riding" capabilities
- Implement possibility for mid-air projectile collision
- Add TorchBomb
- Model
- Functionality
-
Must:
- Bow + arrow that damages any entity (including certain blocks? [wall] )
- Weapon defense mechanism (reduces damage taken from any source)
- Simplistic hit detection (orientation + target position + click)
-
Should
- Healing and Damage items(potions) + DoT/Regen
- Simple sprint mechanism (no sprint bar)
- Some weapons with different damage values and lengths
- One armor slot that reduces damage by a set amount (depending on armor set)
- Sticky items
- Projectile that embed themselves in targets
- Distinction between body areas (not necessarily body parts)
- Simple AI that moves towards or runs away from the player (no pathing)
-
Could
- UI feedback for effects and damage/healing
- Proper sprint implementation
- Interaction system between weapons types and armor types
- Body part implementation
- AI that can avoid obstacles, dead ends and dangers
- Different types of arrows + crossbow
- Hunger + food crafting + ingredient system
- UI feedback for effects and damage/healing
-
Won't
- Different bow/crossbow firing modes
- Varying sprint bar
- Counters
- Weight impact on falling damage
- Smart AI
- TorchBomb
- Fletchery (special arrows)
- Proper animations + sound + effects (for most of the stuff)
- Flying enemies
- Projectile riding
- Random stat ingredients + foods
- Wounds (affecting player movement and camera?)
I added some color coding depending on how I considered a certain task to be as : 3D Wizardy, Models, UI related. I'm not a pro at deciding what colors should be used where, but this is an alpha asessment
Trello board is also a WIP
Last edited: