Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411779 Posts in 69685 Topics- by 58652 Members - Latest Member: theoutlier

December 10, 2024, 11:58:30 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsCasmage: A cooperative boss-fighting platformer
Pages: [1] 2 3 ... 10
Print
Author Topic: Casmage: A cooperative boss-fighting platformer  (Read 48287 times)
Canotico
Level 1
*



View Profile
« on: August 24, 2014, 01:09:22 PM »

Casmage is a game about fighting bosses that would be completely impossible to beat by yourself.

You can't do this alone is the moto of the game.

Since I began the development, I did so with the idea of making it entirely focused on cooperative action. This is why I've paid special attention to the networking engine, because I want the game to support pretty much any kind of multiplayer configuration you can think of. Local multiplayer, Online multiplayer, aaaand a bit of both if you'd like.

The idea behind this game is to evoke that moment when you are so proud of what you've acomplished with your teammates, that you just want to high five them and SCREAM and maybe call your mom because you are so happy or something... The point is, it's a game made to be played by 2 or more players. Yes, this means no single-player experience. BUT TOTALLY AWESOME.



Bosses!

Currently working on ---> The Eye





-------------------

And of course, there will be multiple characters to pick from!

The Shieldmaiden


The Thunder Swordsman


AND MANY MORE TO COME!



« Last Edit: June 25, 2016, 12:03:21 PM by Canotico » Logged
Canotico
Level 1
*



View Profile
« Reply #1 on: August 29, 2014, 06:44:45 PM »

Grabbing or well, carrying other entities.
Happy accident: it turns out you can make a totem of people walking around! Didn't think about that but my friends managed to do it while we were testing. I don't think I will be fixing it either, seems like a cool thing to do.

Logged
Canotico
Level 1
*



View Profile
« Reply #2 on: September 01, 2014, 08:07:09 AM »

Wish I had new GIFs to show because well... they are more fun to watch, but this is not the case Sad

But I made progress! Spent literally the whole weekend solving networked movement issues. Turns out that the way I was handling movement wasn't working for the kind of real-time precise movement I was aiming for.

Since I'm working on an Authoritative server I wanted every single detail to be handled by the server and then updated to all the connected clients. This works fine for most cases, except for movement when you have more than 0 latency (yes, that's 99% of the real-world scenarios).

I wanted to handle everything through RPC's (Unity), because I like to have control over how much information I'm sending and when. And because of this, I was also handling the movement through RPC's because on my thesis project I did the same and it worked just fine, but there was a slight difference in the way movement was handled between those 2 projects.

My thesis project was a MOBA game, think of League of Legends or Dota 2. In those games you don't need to update a player's position everytime, instead you just need to tell all the clients that a player is moving towards certain point (because these games are click-to-move) so, sending the server a message asking to move to the point (X,Y) works and looks fine in both clients and server.

In Casmage, however, this is not the case, because players are constantly moving and jumping and whatever. So, handling the movement by asking the server to move, letting the server perform the movement and informing all clients that your character moved is.... is not wrong, but the latency generated here is too noticeable to the point where it becomes annoying to move.
I thought I could fix this by just switching the movement from an RPC call to a State Synchronization of whatever component of the character. Theoretically this would update immediately the character's position to all the connected clients and interpolate between the received positions to have a nice and smooth movement replication. This did happen, but I still had the latency problem and here I was getting to the point where I just didn't know what was I doing wrong.
Then I read about a different way of handling movement for an anthoritative server: Letting the client move and then inform the  server and other clients. "But this breaks the authoritative server schema!" Yes it does, but to address that the only thing that needs to be done is add a small "cheat check" on the server that will handle any possible cheating a client may be doing, like a speed-hack for example.

After setting up the client as the owner of the entity and letting it handle the updates of their character, everything started to work a lot more smoother, but It still didn't feel right.

I was handling movement using physics. To move to the right I added a constant force to the character's body to make it move  to the right. But when replicating movement on another client I still had a janky movement, so I decided to test non-physics based movement which actually worked out pretty well and I decided to keep them. I think this kind of movement is better for players in this cases since I need a clean and precise movement, if this was a racing game where velocity plays a mayor role maybe I would've kept the physics based movement.

TL;DR: When handling real-time movement that needs to be constantly updated to all clients (in Unity), use State Synchronization and make each client the owner of their player's character (meaning that client A controls the character A movement and updates it to all the other clients and server). This will negate any local input latency and make all players move smoothly. REMEMBER to add cheat-checks on the server to avoid speed-hacking or anything like that from the clients!!!


Logged
Canotico
Level 1
*



View Profile
« Reply #3 on: November 06, 2014, 12:11:26 PM »

Well it's been a while. I've been working a lot, A LOT on art to getting rid of that ugly placeholder character and it seems like I've finally managed to create the first character for the game.

Although it won't be the last iteration of this character, here's Bast, the Shieldmaiden.


She will be the equivalent of the tank in the game. Her playstyle will revolve around defending her allies and tank's stuff. I still haven't figured out the skills she will have at her disposal, mostly because I've almost literally spent all this time doing art... but I will get to it as soon as I'm done with the missing animations like jumping, falling and all that stuff.

Here's a walk cycle which took me a lot more time to make than it should've because I was really busy with work for the past 2 weeks.


I've also been thinking a lot about the design of the game and it's proving a lot harder than I thought to come up with a good design that makes for a good co-op game, so for the time being the current design of the game may change depending on what I find more useful for my ultimate goal of making this a co-op driven game.
Logged
Canotico
Level 1
*



View Profile
« Reply #4 on: December 09, 2014, 06:03:30 PM »

Ok so, it seems like I'm finally done with the typical movement of a platformer, which means that now I can get to the actual game itself, I think I will first go for a prototype of the way I'm imagining the game right now, it would be hand-made just to get a quick glimpse of it (by hand-made I mean no time spent on algorithms to create levels), but it should get the job done of figuring out if I need to change anything.

Anyway, GIF:
Logged
EdFarage
Level 2
**


I can upload avatars


View Profile
« Reply #5 on: December 09, 2014, 06:23:12 PM »

The new character looks amazing, smooth animations indeed.
Hoping to see more about this
Logged
Canotico
Level 1
*



View Profile
« Reply #6 on: January 08, 2015, 06:20:36 AM »

The new character looks amazing, smooth animations indeed.
Hoping to see more about this

Thanks! I'm glad to hear it does look good :D.

Since December is now over I will be posting  updates more frequently, mostly because I optimized a few things in the networking engine to be able to create a small level to test how the game feels, yaaaay!
Logged
AwkwardKnightGames
Level 0
**



View Profile WWW
« Reply #7 on: January 08, 2015, 07:58:00 AM »

I love the character animations and the overall look of the game. The physics also looks very smooth. I will definitely be following this.
Logged

bdsowers
Level 3
***



View Profile WWW
« Reply #8 on: January 08, 2015, 08:12:00 AM »

I like the little trails you've got behind your character. It's a small touch, but it looks super cool while she's jumping. Smiley I don't like it so much when she's climbing up the ladder.

It sounds like you might be considering procedurally generated levels?
Logged

Canotico
Level 1
*



View Profile
« Reply #9 on: January 10, 2015, 05:30:32 PM »

I love the character animations and the overall look of the game. The physics also looks very smooth. I will definitely be following this.

Thanks! I've really put a lot of effort in the animations because I'm new to all of this pixel art stuff and I wanted it to look at least decent before showing it.

I like the little trails you've got behind your character. It's a small touch, but it looks super cool while she's jumping. Smiley I don't like it so much when she's climbing up the ladder.

It sounds like you might be considering procedurally generated levels?

Yeah I thought the trails would give it a nice touch but as you said they look kinda noisy sometimes, like when climbing ladders, at some point I will give them enough love for them to look super cool :D

Procedurally generated leves. YES. I'm drawing a lot of inspiration from the world generation of Rogue Legacy for that part. Also I think that anything related to procedural generation is insanely cool so yeah, procedurally generated leves.

Right now I'm working on the enemies AI because I'm putting together a small demo world with a couple of rooms and enemies. I need to get a better look at how the combat may feel before I start making the character's abilities. After this demo level is done I will probably start working on both the world generation and the skills design.

So far I've made my slimes know when to jump in order to reach their target, which is very basic stuff but I giving them a brain so that's kinda cool:
Logged
bdsowers
Level 3
***



View Profile WWW
« Reply #10 on: January 10, 2015, 07:31:59 PM »

I don't think Rogue Legacy used procedurally generated levels in the strict sense of the term. I think each room was hand-crafted for design purposes, and then the rooms were stitched together procedurally. In their patch change logs, you see statements like 'added 3 new room types.' Which, honestly, I think is the right way to go for a platformer with jumping. I don't like the systems that just throw ladders everywhere to compensate for jump limits.
Logged

Stals
Level 0
**



View Profile WWW
« Reply #11 on: January 11, 2015, 04:26:50 AM »

I agree, Spelunky also uses connected room templates to create a path to the exit.
Here is the explanation about it: http://tinysubversions.com/spelunkyGen/
Logged

Canotico
Level 1
*



View Profile
« Reply #12 on: January 14, 2015, 08:13:24 AM »

Yes you guys are absolutely right! I also forgot to mention Spelunky Tongue, I really like the way they used this pseudo-random room generation, I think it's the best possible combination between procedural generation and well designed rooms. I actually think this is the most time-saving approach.

And just to be clear, no, there won't be ladders thrown around to compensate for badly placed platforms  Smiley
Logged
Canotico
Level 1
*



View Profile
« Reply #13 on: February 05, 2015, 01:00:44 PM »

Last week I fought bravely against an evil bug in Unity.

Turns out that Unity goes crazy if you start assigning manually NetworkViewIDs to objects that are serialized over the network. This prevented some random enemies in the game to be replicated client-side, which of course turned the client into a chaotic bugfest where invisible enemies would kill you and stuff like that. Not cool.

Gladly I found a solution after figuring out what the problem was (stupid buggy Networking API), which consisted of using Network.Instantiate instead of the manual instantiation I was doing before. "Why didn't you do that to begin with?" you may ask, and the reason is that... I don't really know Who, Me?. Probably it was because I thought I would loose control over what happened when entities where instantiated, which isn't the case so all's fine Grin

TL;DR If you are using serialized objects in your game in Unity, never ever ever ever ever ever handle instantiation of these objects manually. Use Network.Instantiate, otherwise you will suffer in hell.

NOW! The progress part! YES! I played with 2 other friends a simple test level I made and it was awesome! Check it out!




I seriously apologize for the crappy quality of the video. Next ones will be better, promise Smiley.
Logged
Canotico
Level 1
*



View Profile
« Reply #14 on: February 07, 2015, 11:30:41 AM »

I think I haven't talked about how I'm planning to design the character's skills so here I go.
  • Primary: pretty much the equivalent of auto-attacks. Main source of damage.
  • Evasion: lets the character evade attacks for a short duration.
  • Second: this can be anything that enforces the gameplay of the character
  • Third: same as the second skill
  • Special: equivalent to an 'ultimate' skill in LoL. I want these to be ridiculously badass and representative of the character. They will the character's signature skill

Now, some love for Bast Smiley

I've thought about the skills she could have so far, I've been piling up ideas for her skills, and although these are in no way final, I gotta start somewhere right?
  • Primary, Shield Bash: this will be her primary attack. It knockbacks, damages and stuns/debuffs the enemies she hits. I hate the animation I made for this tho, doesn't feel at all like she is bashing someone's face with her shield
  • Second, Ground Slam: Bast jumps and hits the ground, knocking enemies airborne and damaging them in an area around her
  • Evasion, Shield Wall: since Bast is the tanky character, she will have a skill that blocks incoming damage with her shield, instead of evading. This is all because I want her skills to revolve around the fact that she is supossed to protect her allies
  • Third, nameless: For x seconds, Bast absorbs all the projectiles around her. I'm still debating about what would happen after she absorbs them, but I'm thinking something like she receives a reduced percentage of the damage of the projectiles and then when the skill is over, she shots something from her shield that does damage related to how much damage she absorbed
  • Special, nameless: I've been thinking about a couple of candidates for this one. The one I'm liking more right now is: Bast becomes invulnerable and taunts ALL enemies on screen for X seconds. I think I could add something else too but I'm not sure what yet

This is a quick draft I recently made for Ground Slam. I'm still not very comfortable making the effects when she hits the ground but I'll get there eventually.

« Last Edit: February 12, 2015, 06:45:06 PM by Canotico » Logged
Canotico
Level 1
*



View Profile
« Reply #15 on: February 07, 2015, 03:13:28 PM »

Alright, this seems like a farily finished skill for now:

Ground Slam


I do want to improve the knockup effects under the slimes. But that will be in another moment.
EDIT: Or maybe as soon as I can because I cant stand it. Yes, thats better.
« Last Edit: February 07, 2015, 03:25:41 PM by Canotico » Logged
Canotico
Level 1
*



View Profile
« Reply #16 on: February 10, 2015, 06:44:54 PM »

Alrighty, here's an improved version of Ground Slam :D



Also, while working in the implementation of the Third skill (the one that absrobs projectiles, which I decided to call Magnetic Ring for now) this happened:



I thought it was pretty funny, I accidentally scaled up the player but it looks like its moving towards the camera.

And also, I finished the implementation for the Magnetic Ring:

Logged
Canotico
Level 1
*



View Profile
« Reply #17 on: February 12, 2015, 06:44:07 PM »

While I was implementing the Shield Wall skill for bast, I was thinking that the Magnetic Ring was not actually fitting her design. If there were no projectiles the skill would be completely useless, so I've decided to remove it for now.

I didn't want to loose the damage absorbsion part of the Magnetic Ring, so I thought about a new ultimate ability: Bast absorbs all damage her allies take, after the effect is over she returns a percentage of the total damage she received to the enemies that inflicted damage, or something along those lines, still a WIP.

I made it so that the Shield Wall is able to push some enemies. Bast will be moving while using the shield (but of course, slower than usual) and it would be weird if enemies just clipped through this supossedly unpenetrable shield or wall of magic or however you want to see it (I don't even know myself lol..)

Logged
Canotico
Level 1
*



View Profile
« Reply #18 on: February 16, 2015, 12:40:34 PM »

Finished making a new skill for Bast.

Relentless Will: Bast summons 4 orbs that orbit around her and attack enemies that get near Bast. Enemies that are inside the radius of the skill are taunted to attack Bast. The frequency of attacks from the orbs is proportional to the amount of enemies inside the radius of the skill.

The objective of this skill is to give Bast a way to specifically draw the attention of enemies that are nearby so that they won't attack her allies. The skill outputs more damage depending on the amount of enemies that are inside of it, so Bast is encouraged to taunt as many enemies as possible.
This is a toggle skill, so that the player can deactivate it whenever they feel they've taken enough damage.

Logged
Canotico
Level 1
*



View Profile
« Reply #19 on: February 19, 2015, 06:49:49 PM »

Well I've spent more time thant I should've on this one because I was fixing a bug that was actually not a bug, but my own stupidity Smiley

Anyway, as an update of how things are going, I'm working on the Last of Bast's skills kit: Sacrifice.
This one is her signature ability and lets her forward all the damage her allies receive to her. That's like... the most tank-defend-your-allies-and-die-instead-of-them I could think of. But that's not all there is to this one, oh no.
There are 2 possible outcomes after using this skill:
  • Bast dies from the effect: If the damage her allies take kill Bast, she dies, obviously, but she also damages all enemies that dealt damage to her allies while Sacrifice was active for a percentage of the total damage she received.
    Lets say she received a total of 1000 damage, when she dies, all enemies involved in this total damage counter receive... I don't know, lets say 70% of the total damage, that's 700 damage to each enemy.
  • Bast doesn't die from the effect: If she didn't die, she is expected to be have really low HP, and for this specific scenario, instead of dealing damage to enemies involved, she will be healed for a percentage of the total damage she received from the effect of Sacrifice.



I wish I had a more impactfull GIF to show, but as I said, it's 50% complete. I have to change a few things in the way the engine manages damage to be able to determine the source of damage and then after that I can implement what's missing. And then... and then... I think Bast will be done for now Who, Me?

WHICH MEANS!! NEW CHARACTER! WOHOO!
Logged
Pages: [1] 2 3 ... 10
Print
Jump to:  

Theme orange-lt created by panic