|
Canotico
Level 1
|
|
« 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
|
|
« 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 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
|
|
« 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
|
|
« 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
|
|
« 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
|
|
« 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
|
|
« 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
|
|
« 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. 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
|
|
« 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. 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
|
|
« 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
|
|
|
|
|
Canotico
Level 1
|
|
« Reply #12 on: January 14, 2015, 08:13:24 AM » |
|
Yes you guys are absolutely right! I also forgot to mention Spelunky , 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
|
|
|
Logged
|
|
|
|
Canotico
Level 1
|
|
« 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 . 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 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 .
|
|
|
Logged
|
|
|
|
Canotico
Level 1
|
|
« 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 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
|
|
« 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
|
|
« 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
|
|
« 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
|
|
« 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
|
|
« 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 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 WHICH MEANS!! NEW CHARACTER! WOHOO!
|
|
|
Logged
|
|
|
|
|