tankorsmash









Level 1 Re: Deceiver « Reply #140 on: September 05, 2017, 01:25:45 PM » I'm all about juice. What about, going purely off that one shotgun gif, some level of screenshake to go along with the camera. It'll make it look more like it's being pushed back instead of the camera only being moved back.



Could even go further and ease the camera, so that the last bit of movement takes as much first as the first 90% of movement, so it's like the camera takes a second to get back into place (without moving forward again). Logged

etodd









Level 3 Re: Deceiver « Reply #141 on: September 07, 2017, 09:42:20 AM » I'll try adding a bit of screenshake. Right now the camera uses the same easing as the rest of the gameplay. Most of the time I like to keep it glued to the drone to facilitate accurate aiming. Thanks for the suggestion.I'll try adding a bit of screenshake. Right now the camera uses the same easing as the rest of the gameplay. Most of the time I like to keep it glued to the drone to facilitate accurate aiming. Logged

etodd









Level 3 Re: Deceiver « Reply #142 on: September 11, 2017, 12:10:24 PM » Cooldowns, again



Cooldowns have gone through the most iteration to date. Aside from the health system, movement system, reticle code, and story.



People were having a hard time equating the three pips below the reticle with the amount of "charges" they had left. The bolter made things more confusing both for the player and for the code, because it let your fire three bolts per charge. Then the shotgun came along, which required two whole charges to fire. Things were getting crazy.



I did away with all that and replaced it with an actual heat-based cooldown system. Looks like this:







You can also see the new muzzle flash effect in that gif.



Linux



I finally re-installed linux on my desktop, and wonder of wonders, the graphics drivers worked out of the box. That never happens. I was shocked. Here's the built-in open source AMD drivers running the game faster than Windows 10:







Spawn effects



Jack made a pretty awesome spawn sound which had basically zero accompanying visuals, so I added some:







Adding controllers on the fly



I never realized what a huge win this feature is. Especially at expos, it's great to be able to add and remove players on the fly as people come and go. Took maybe 50 lines of code. Totally worth it.



Friends, admins



I finally added some rudimentary friend functionality. You can create a server and mark it as "private", which means only friends are allowed to join. I also added the ability to mark others as server admins, which means they can change the server settings, switch maps on the fly, mess with teams, and kick people.



Tons of other stuff is going on in the background, including work on the first official trailer (woah) Cooldowns have gone through the most iteration to date. Aside from the health system, movement system, reticle code, and story.People were having a hard time equating the three pips below the reticle with the amount of "charges" they had left. The bolter made things more confusing both for the player and for the code, because it let your fire three bolts per charge. Then the shotgun came along, which required two whole charges to fire. Things were getting crazy.I did away with all that and replaced it with an actual heat-based cooldown system. Looks like this:You can also see the new muzzle flash effect in that gif.I finally re-installed linux on my desktop, and wonder of wonders, the graphics drivers worked out of the box. That never happens. I was shocked. Here's the built-in open source AMD drivers running the game faster than Windows 10:Jack made a pretty awesome spawn sound which had basically zero accompanying visuals, so I added some:I never realized what a huge win this feature is. Especially at expos, it's great to be able to add and remove players on the fly as people come and go. Took maybe 50 lines of code. Totally worth it.I finally added some rudimentary friend functionality. You can create a server and mark it as "private", which means only friends are allowed to join. I also added the ability to mark others as server admins, which means they can change the server settings, switch maps on the fly, mess with teams, and kick people.Tons of other stuff is going on in the background, including work on the first official trailer (woah) Logged

etodd









Level 3 Re: Deceiver « Reply #143 on: September 27, 2017, 06:13:20 AM » Trailer



I spent a few weeks animating, capturing, and editing a trailer. I started out working on some story scenes:











Animation can be really tricky. Here's a problem I encountered with Blender's "Child Of" constraint:







I export the animation at 24 fps, but play it back at 60 fps. That causes the cigarette to shake around a little. Fortunately you don't really see the cigarette too closely in the shot I had planned.



At any rate, I talked to the wonderful



I did finish the trailer, and even managed to cram a teensy bit of story into it. OBS Studio wasn't able to record even 720p video at 60 fps without hitching, so I picked up an HDMI pass-through recording box and hooked it up to my laptop. Worked beautifully at 1080p 60 fps. This is the first time I've been able to make a 1080p trailer.



Generators



The Assault mode is a bit like League of Legends. Team A tries to destroy Team B's turrets. When people try this mode, they immediately want to know if they can repair their turrets. A repair tool has been on my to-do list for some time, but I wasn't excited about adding a whole new ability that accomplishes only one purpose.



Then I started thinking about Sensors. These have been in the game almost from day one, but they've never felt overpowered like everything else does. They detect and track enemy drones, and they create a stealth zone where you become invisible. That's it.



I decided to combine the repair tool idea with Sensors and ended up with Generators. In addition to the old sensor functionality, these also passively generate energy at a fairly good clip. They pay for themselves within 30 seconds or so. They also slowly heal any minions and turrets in range. I also buffed them up and gave them more health and a shield. You can spawn a ton of these near a turret to get a whole bunch of healing power.



Prepare for alpha



The multiplayer alpha is really close to release. Just need to polish a few things and deploy the servers. I tested my ability to run multiple instances on the same server. It looks like I could run about 6 games with 4 players each on a single t1.micro.



I added support for GameJolt login. Also added a crash reporter on Windows:







It also opens the



I'm showing the game at I spent a few weeks animating, capturing, and editing a trailer. I started out working on some story scenes:Animation can be really tricky. Here's a problem I encountered with Blender's "Child Of" constraint:I export the animation at 24 fps, but play it back at 60 fps. That causes the cigarette to shake around a little. Fortunately you don't really see the cigarette too closely in the shot I had planned.At any rate, I talked to the wonderful M. Joshua who advised me to hold off on the story elements. The trailer isn't for the full release, only for a multiplayer alpha.I did finish the trailer, and even managed to cram a teensy bit of story into it. OBS Studio wasn't able to record even 720p video at 60 fps without hitching, so I picked up an HDMI pass-through recording box and hooked it up to my laptop. Worked beautifully at 1080p 60 fps. This is the first time I've been able to make a 1080p trailer.The Assault mode is a bit like League of Legends. Team A tries to destroy Team B's turrets. When people try this mode, they immediately want to know if they can repair their turrets. A repair tool has been on my to-do list for some time, but I wasn't excited about adding a whole new ability that accomplishes only one purpose.Then I started thinking about Sensors. These have been in the game almost from day one, but they've never felt overpowered like everything else does. They detect and track enemy drones, and they create a stealth zone where you become invisible. That's it.I decided to combine the repair tool idea with Sensors and ended up with Generators. In addition to the old sensor functionality, these also passively generate energy at a fairly good clip. They pay for themselves within 30 seconds or so. They also slowly heal any minions and turrets in range. I also buffed them up and gave them more health and a shield. You can spawn a ton of these near a turret to get a whole bunch of healing power.The multiplayer alpha is really close to release. Just need to polish a few things and deploy the servers. I tested my ability to run multiple instances on the same server. It looks like I could run about 6 games with 4 players each on a single t1.micro.I added support for GameJolt login. Also added a crash reporter on Windows:It also opens the GitHub issues page after uploading the crash dump.I'm showing the game at GDEX this weekend, then at LexPlay next month. Logged

etodd









Level 3 Re: Deceiver « Reply #144 on: October 03, 2017, 06:13:48 AM » GDEX



My friend Charles Dickens loaned me some massive TVs that made this booth a sight to behold:











Deceiver got two honorable mentions for something something art-related, and best of show. The weekend was a lot of fun, and there were a ton of great games.







One interesting insight was that the game played really really fast, much faster than previous builds. One one hand, that's great, people love the action, but on the other hand, I could tell people were getting tired playing the game. It's very demanding. Players would become completely absorbed for 10 minutes, then snap out of it and say "okay that's enough of that".



That was one thing I noticed about the best of show winner



This ties in with something I read a while back about the success of PUBG. That game also has a ton of downtime, which is great for streamers because they need time to interact with their chat.



For now, I tempered the pacing a bit by increasing cooldown times. It's a stop-gap measure. I would like to find another way to facilitate those all-important peaks and valleys in pacing. I think larger maps and larger teams would be a great way to do that.



Website, Steam



I made some major improvements to the website on the advice of the illustrious







I also submitted a Steam store page for approval from Valve so people can wishlist the game.



This leaves two items on the alpha release to-do list. First, I'm waiting on itch.io to



I wanted to release tomorrow, but it's looking like I'll have to push it to next week. At any rate, it's getting close! My friend Charles Dickens loaned me some massive TVs that made this booth a sight to behold:Deceiver got two honorable mentions for something something art-related, and best of show. The weekend was a lot of fun, and there were a ton of great games. BOMBFEST absolutely stole the show!One interesting insight was that the game played really really fast, much faster than previous builds. One one hand, that's great, people love the action, but on the other hand, I could tell people were getting tired playing the game. It's very demanding. Players would become completely absorbed for 10 minutes, then snap out of it and say "okay that's enough of that".That was one thing I noticed about the best of show winner MageQuit . Despite offering a lot of PvP action, it actually plays pretty slowly and gives players a ton of downtime. I realized this design works great for local multiplayer games where you're mainly trying to hang out with friends anyway.This ties in with something I read a while back about the success of PUBG. That game also has a ton of downtime, which is great for streamers because they need time to interact with their chat.For now, I tempered the pacing a bit by increasing cooldown times. It's a stop-gap measure. I would like to find another way to facilitate those all-important peaks and valleys in pacing. I think larger maps and larger teams would be a great way to do that.I made some major improvements to the website on the advice of the illustrious Jessie Kooner I also submitted a Steam store page for approval from Valve so people can wishlist the game.This leaves two items on the alpha release to-do list. First, I'm waiting on itch.io to enable OAuth support . Second, I need to buy and deploy some dedicated servers.I wanted to release tomorrow, but it's looking like I'll have to push it to next week. At any rate, it's getting close! Logged

etodd









Level 3 Re: Deceiver « Reply #145 on: October 07, 2017, 05:49:47 AM » Dedicated servers



I shopped around for a while but ended up back where I started: Digital Ocean. So, the reason you're not supposed to use VMs is because performance is unpredictable; you never know when someone else on the host is going to saturate the CPU with a massive cron job or something. Theoretically you should be shielded from that, but in reality, it's not great for realtime applications.



I personally can't yet say whether it's an issue or not. But I did purchase special "high CPU" instances, which guarantee that you get two dedicated physical cores. One instance each for US East, US West, and Europe. I'm running four server processes per core for now.







Also set up an extremely simple alerting system that sends me an email when a server process crashes, and when a client uploads a crash dump.







Dashboard



I added a simple dashboard to the master server that allows me to execute SQL commands and keep an eye on connected servers and clients.







The bulk of this feature was done on stream:











Spotting



Someone on stream suggested adding a "spot" feature which would allow players to call out targets for their team. I thought it was a pretty good idea. This feature was also done on stream:











Gifs



Needed some new gifs for the website, so I recorded a few.











The alpha is basically ready. I might have to launch without itch's OAuth support. We'll see. I shopped around for a while but ended up back where I started: Digital Ocean. So, the reason you're not supposed to use VMs is because performance is unpredictable; you never know when someone else on the host is going to saturate the CPU with a massive cron job or something. Theoretically you should be shielded from that, but in reality, it's not great for realtime applications.I personally can't yet say whether it's an issue or not. But I did purchase special "high CPU" instances, which guarantee that you get two dedicated physical cores. One instance each for US East, US West, and Europe. I'm running four server processes per core for now.Also set up an extremely simple alerting system that sends me an email when a server process crashes, and when a client uploads a crash dump.I added a simple dashboard to the master server that allows me to execute SQL commands and keep an eye on connected servers and clients.The bulk of this feature was done on stream:Someone on stream suggested adding a "spot" feature which would allow players to call out targets for their team. I thought it was a pretty good idea. This feature was also done on stream:Needed some new gifs for the website, so I recorded a few.The alpha is basically ready. I might have to launch without itch's OAuth support. We'll see. Logged

tankorsmash









Level 1 Re: Deceiver « Reply #147 on: October 15, 2017, 08:42:40 AM »



How did you find writing the server backend in C++ compared to a slower language more commonly used like Python or Ruby? I feel like a C++ server would be like 100x faster which is way more important for games, so it's probably a dumb question, but I'd love to know.



I dunno if you've seen it, but I use Congrats on the Alpha launch dude, I know how tough it is to get those ready.How did you find writing the server backend in C++ compared to a slower language more commonly used like Python or Ruby? I feel like a C++ server would be like 100x faster which is way more important for games, so it's probably a dumb question, but I'd love to know.I dunno if you've seen it, but I use https://github.com/octol/vim-cpp-enhanced-highlight for C++ vim highlighting, makes a big difference for me. Logged

etodd









Level 3 Re: Deceiver « Reply #149 on: October 25, 2017, 08:46:30 AM » Playtest feedback



I've had a ton of incredibly useful playtest feedback the past two weeks. Here are some of the gameplay changes and additions I've made in response to feedback:



Team bases are now surrounded with indestructible force fields to prevent spawn camping.







My friend



One of the problems with this system was that it changed the behavior of the right trigger without telling you. If you switched to the shotgun and attemped to fire, you'd expect it to fire and then toggle back to the normal movement/jump ability. But if the shotgun wasn't ready to fire, you none of that would happen, which might leave you confused as to which mode you're in.



Zac suggested putting the movement ability on a separate button, but I didn't want to add complexity to the controls. There was also the problem that the reticle gives tons of feedback about where you can and can't jump, and of course if you have a weapon equipped, you can fire it anywhere you want. So I would need two reticle indicators, one to show whether you can jump, and one to show whether you can fire. I might still do this, but it will take some thought to pull it off without complicating things too much.



Here's what I ended up doing. Rather than toggling abilities on and off, I made it so that when you press Y, it switches to the Y ability and stays there until you select a different ability. I also cut the number of abilities down to two, so that I could map the movement/jump ability to X. I also now allow abilities to be replaced, so while you can only carry two at a time, you can buy as many of them as you can afford.



The upgrade menu also now lets you choose which slot you want the ability to go in, which solves another issue. When someone always buys the shotgun first, they build up muscle memory that says "Y is shotgun". If they change the order of buying, the old system would change their control bindings so that Y is something else. The new system lets the player choose their control bindings regardless of purchase order.



Here it is in action:







Another feature request I heard a lot was for a "capture the flag" game mode. So that's in now:







Another common complaint dealt with the camera. I've explained



Unfortunately I've always kept this cone active, even after the player has landed on the surface. This prevented the player from looking directly back at the surface they were attached to. They would have to swing the camera around the cone. This was an easy fix. After landing on a surface, there's a half second where the cone does its thing, and then I disable it. Now you can swing the camera around any way you like without regard for level geometry.



Spotting was another requested feature. I already have text emotes in the game that allow players to shout out specific turrets or batteries, but it's much more intuitive to just aim at something, hit a button, and have everyone see it.







Assault needed a bit of balancing. It was weighted pretty heavily in favor of the defenders. I'm balancing this by giving the attackers a pretty hefty chunk of energy to start with, and also by adding time to the clock and giving the attackers extra lives for every turret they destroy.



Also, players on the attacker team used to have an individual pool of lives, which meant one player could run out of lives and get stuck spectating. I switched to a ticket system so that lives are shared across all players.



That takes care of gameplay changes for the most part. Of course I've been tweaking cooldowns, damage values, and other numbers like crazy. But that's not very interesting.



One thing everyone agrees is very interesting is authentication! I asked itch.io to add third-party OAuth support, and they did it! Now you can log in to the game using your web browser even if you don't have the itch app installed.







I also integrated the Steam SDK, which will also log you in automatically.







Some players were having issues initiating and maintaining a connection, so I made another pass at the netcode and added some redundancy and improved latency handling. Now I'm sending every message at least twice as a pre-emptive measure. Also, when packets arrive delayed or out of order, the game does a better job of fast-forwarding to catch up with the server.



Another common feature request was mouse support in the menus. This is mostly done now.







Tons of other minor improvements have also been made. Players can edit server settings in-game. The game now gives more feedback when you kill another player. There's now an FOV slider. The input system now respects your operating system's keyboard layout. The crash reporter system has allowed me to fix a number of crash bugs.



I'm also putting together some assets for the upcoming Kickstarter. Progress continues! I've had a ton of incredibly useful playtest feedback the past two weeks. Here are some of the gameplay changes and additions I've made in response to feedback:Team bases are now surrounded with indestructible force fields to prevent spawn camping.My friend Zac Pierce gave some great feedback about abilities. Previously, you could carry three abilities, which were permanent. Abilities got mapped to X, Y, and B in the order they were purchased. You could "toggle" them on and off by pressing X/Y/B to select the ability, and then right trigger "fired" the ability. The ability automatically toggled itself off after firing.One of the problems with this system was that it changed the behavior of the right trigger without telling you. If you switched to the shotgun and attemped to fire, you'd expect it to fire and then toggle back to the normal movement/jump ability. But if the shotgun wasn't ready to fire, you none of that would happen, which might leave you confused as to which mode you're in.Zac suggested putting the movement ability on a separate button, but I didn't want to add complexity to the controls. There was also the problem that the reticle gives tons of feedback about where you can and can't jump, and of course if you have a weapon equipped, you can fire it anywhere you want. So I would need two reticle indicators, one to show whether you can jump, and one to show whether you can fire. I might still do this, but it will take some thought to pull it off without complicating things too much.Here's what I ended up doing. Rather than toggling abilities on and off, I made it so that when you press Y, it switches to the Y ability and stays there until you select a different ability. I also cut the number of abilities down to two, so that I could map the movement/jump ability to X. I also now allow abilities to be replaced, so while you can only carry two at a time, you can buy as many of them as you can afford.The upgrade menu also now lets you choose which slot you want the ability to go in, which solves another issue. When someone always buys the shotgun first, they build up muscle memory that says "Y is shotgun". If they change the order of buying, the old system would change their control bindings so that Y is something else. The new system lets the player choose their control bindings regardless of purchase order.Here it is in action:Another feature request I heard a lot was for a "capture the flag" game mode. So that's in now:Another common complaint dealt with the camera. I've explained previously how I use a cone to nudge the camera away from whatever surface the player lands on, so that they're more likely to be aiming in a direction they can shoot toward next.Unfortunately I've always kept this cone active, even after the player has landed on the surface. This prevented the player from looking directly back at the surface they were attached to. They would have to swing the camera around the cone. This was an easy fix. After landing on a surface, there's a half second where the cone does its thing, and then I disable it. Now you can swing the camera around any way you like without regard for level geometry.Spotting was another requested feature. I already have text emotes in the game that allow players to shout out specific turrets or batteries, but it's much more intuitive to just aim at something, hit a button, and have everyone see it.Assault needed a bit of balancing. It was weighted pretty heavily in favor of the defenders. I'm balancing this by giving the attackers a pretty hefty chunk of energy to start with, and also by adding time to the clock and giving the attackers extra lives for every turret they destroy.Also, players on the attacker team used to have an individual pool of lives, which meant one player could run out of lives and get stuck spectating. I switched to a ticket system so that lives are shared across all players.That takes care of gameplay changes for the most part. Of course I've been tweaking cooldowns, damage values, and other numbers like crazy. But that's not very interesting.One thing everyone agrees isinteresting is authentication! I asked itch.io to add third-party OAuth support, and they did it! Now you can log in to the game using your web browser even if you don't have the itch app installed.I also integrated the Steam SDK, which will also log you in automatically.Some players were having issues initiating and maintaining a connection, so I made another pass at the netcode and added some redundancy and improved latency handling. Now I'm sending every message at least twice as a pre-emptive measure. Also, when packets arrive delayed or out of order, the game does a better job of fast-forwarding to catch up with the server.Another common feature request was mouse support in the menus. This is mostly done now.Tons of other minor improvements have also been made. Players can edit server settings in-game. The game now gives more feedback when you kill another player. There's now an FOV slider. The input system now respects your operating system's keyboard layout. The crash reporter system has allowed me to fix a number of crash bugs.I'm also putting together some assets for the upcoming Kickstarter. Progress continues! « Last Edit: November 25, 2017, 04:48:55 PM by etodd » Logged

etodd









Level 3 Re: Deceiver « Reply #150 on: November 02, 2017, 02:01:58 PM » CTF tweaking



CTF turned out to be a bit too easy to score in. There was no incentive to capture the batteries, which takes a lot away from the game. So I added force fields around the flags. Now you have to beat down the force field before capturing the flag, which encourages you to earn more energy to improve your damage output and capture flags quicker.



Story mode



Started working on story mode again, beginning with the most important features, like shopping cart physics:







The story mode is basically Dishonored, except there are no people and all you do is climb.



For a long time, the first level has had a problem of not feeling like a real place with a purpose. It feels like everything was put there just for you, the player. I spent some time fleshing out the level and making it feel more like a city with a life of its own:











This is like, version 10 of this level. There's still a lot of work to do on it. I would like to add more NPCs. CTF turned out to be a bit too easy to score in. There was no incentive to capture the batteries, which takes a lot away from the game. So I added force fields around the flags. Now you have to beat down the force field before capturing the flag, which encourages you to earn more energy to improve your damage output and capture flags quicker.Started working on story mode again, beginning with the most important features, like shopping cart physics:The story mode is basically Dishonored, except there are no people and all you do is climb.For a long time, the first level has had a problem of not feeling like a real place with a purpose. It feels like everything was put there just for you, the player. I spent some time fleshing out the level and making it feel more like a city with a life of its own:This is like, version 10 of this level. There's still a lot of work to do on it. I would like to add more NPCs. Logged

etodd









Level 3 Re: Deceiver « Reply #151 on: November 25, 2017, 09:21:17 AM »







Story mode changes



I was able to watch some brand new players get a little lost and confused in the Docks level I posted last time, and have since refined the level design to the point where my sister had no problem finding her way around. Some super dedicated playtesters in our Discord server also found a ton of bugs and exploits which I was happy to patch.



I also decided to include audio logs in the game, to give more time to explore the characters without having to build expensive cutscenes. Other small touches to add life to the Docks include this fire effect which didn't turn out quite right on the first try:







Drone combat tweaks



The active armor effect has been a problem for a while. It was too subtle. Just some sparkles around your drone. I finally did what I should have done months ago:







Back in August I posted about "drone repulsion". Basically, if two drones are crawling around and they bump into each other, the slower one takes damage and goes flying. The intent was to avoid the problem of shooting at a player, just barely missing, and landing anti-climatically right next to them, so close that your shields overlap. Drone repulsion ensures no two drones ever overlap.



The problem is when you're crawling along, suddenly bump into an enemy drone, and your drone goes flying 20 meters without any input on your part. It's jarring, disorienting, and not fun.



So I got rid of it and instead solved the problem of near-misses in a much more obvious way: use a sphere-cast rather than a raycast. Now if you're flying toward an enemy and any part of your shield touches their shield, that counts as a hit for you. Once you land and start crawling, no more drone repulsion.



Can't believe it took me this long to figure this out.



New map



This is Treatment Plant. Actually it's an old map by Ian Cuslidge, but it's been revamped, cleaned up and welded together to accommodate the new rendering system and game types.







Other news



Special thanks to



Code: #if _WIN32

extern "C"

{

_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;

__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;

}

#endif



Also, look for a new entry in the "Poor Man's" series of game programming articles this coming Tuesday.



In the course of poring over old screenshots and gifs for said article, I dug up a couple neat images from the past 2.5 years of development:



















Hello! It's been a while since the last update. I was out of the loop for a few days recovering from wisdom teeth removal. Also, while the past few weeks have been very productive, it's more like a thousand small improvements rather than two or three big ones. I'm writing a lot of commit messages like this:I was able to watch some brand new players get a little lost and confused in the Docks level I posted last time, and have since refined the level design to the point where my sister had no problem finding her way around. Some super dedicated playtesters in our Discord server also found a ton of bugs and exploits which I was happy to patch.I also decided to include audio logs in the game, to give more time to explore the characters without having to build expensive cutscenes. Other small touches to add life to the Docks include this fire effect which didn't turn out quite right on the first try:The active armor effect has been a problem for a while. It was too subtle. Just some sparkles around your drone. I finally did what I should have done months ago:Back in August I posted about "drone repulsion". Basically, if two drones are crawling around and they bump into each other, the slower one takes damage and goes flying. The intent was to avoid the problem of shooting at a player, just barely missing, and landing anti-climatically right next to them, so close that your shields overlap. Drone repulsion ensures no two drones ever overlap.The problem is when you're crawling along, suddenly bump into an enemy drone, and your drone goes flying 20 meters without any input on your part. It's jarring, disorienting, and not fun.So I got rid of it and instead solved the problem of near-misses in a much more obvious way: use a sphere-cast rather than a raycast. Now if you're flying toward an enemy and any part of your shield touches their shield, that counts as a hit for you. Once you land and start crawling, no more drone repulsion.Can't believe it took me this long to figure this out.This is Treatment Plant. Actually it's an old map by Ian Cuslidge, but it's been revamped, cleaned up and welded together to accommodate the new rendering system and game types.Special thanks to Ryan Evans for pointing me in the right direction to get my game recognized by graphics drivers so that it runs on discrete GPUs rather than integrated Intel HD garbage. Here's the code in question:Also, look for a new entry in the "Poor Man's" series of game programming articles this coming Tuesday.In the course of poring over old screenshots and gifs for said article, I dug up a couple neat images from the past 2.5 years of development: Logged

etodd









Level 3 Re: Deceiver « Reply #153 on: November 28, 2017, 06:33:20 AM » Quote from: rarelikeaunicorn on November 25, 2017, 12:29:21 PM ...



Hey, thanks! Glad you like the look of it. And yeah I'm finally feeling mostly back to normal.



Anyway just popping in here to link to the latest entry in the "Poor Man's" series of game programming articles. This one covers the last two and a half years of "duh" moments encountered while designing the 3D camera for Deceiver.



http://etodd.io/2017/11/28/poor-mans-3d-camera/



There are lots of gifs and only a handful of thinly veiled references to mathematics. Hey, thanks! Glad you like the look of it. And yeah I'm finally feeling mostly back to normal.Anyway just popping in here to link to the latest entry in the "Poor Man's" series of game programming articles. This one covers the last two and a half years of "duh" moments encountered while designing the 3D camera for Deceiver.There are lots of gifs and only a handful of thinly veiled references to mathematics. Logged

ashtonmorris







Level 2 Re: Deceiver « Reply #154 on: November 28, 2017, 08:37:01 AM » Nice looking trailer! Logged



Roah * Bomblsinger * Goliath * Wings of Vi * Lemma * Bit Heroes * Star Command Galaxies





http://www.ashtonmorris.com



Twitter: Ashton Morris - Composer & Sound DesignerRoah * Bomblsinger * Goliath * Wings of Vi * Lemma * Bit Heroes * Star Command GalaxiesTwitter: https://twitter.com/ashtonmorris

etodd









Level 3 Re: Deceiver « Reply #156 on: December 07, 2017, 02:12:22 PM » Seven



Seven is the character with the most screen-time in the game. And she's a no-nonsense badass. I knew I needed to dedicate some time to her.



I started out last week by playing hair stylist. I wanted to take Overwatch's wavy hair and bring it into Deceiver's neon aesthetic.







Next I modeled some cyberpunk combat boots.







Then the rest of her outfit.







The last piece was a military ALICE pack, but I'll get to that later!



Rain audio



Logan whipped up a looping rain sound for me. Previously I've just ramped the volume up and down based on a system that calculates how much rain is falling near you. But this time I wanted to control not only the volume, but also the positioning. So if you're standing under an overhang, the rain will sound like it's coming from outside.



I already had a grid of raycast results surrounding the camera to drive the particle system, so I just ran some weighted averages on that to figure out where to place the rain sound. I used a Wwise RTPC to set the spread to 100% when the sound is close to the camera, so if there's rain all around you, you'll hear it in both ears.



Reverb voxel



I spent a day and a half on this crazy voxel-based reverb system. When my level importer builds a level, it first chops the level up into chunks. Then at the center of each chunk, it queries the AI navigation mesh and collects all the points that are "visible" from that chunk.



Then it rasterizes those points into three "shells", for close range, middle range, and far range geometry. Each shell is sort of like a spherical black and white bitmap image. If the close range bitmap is 100% black, then that means we're in a pretty tight space.



The importer spits out three coefficients for each voxel chunk, representing the amount of close range, middle range, and far range reverb. After this it runs the whole voxel through a smoothing kernel and writes the result out to a file.



At runtime, whenever a sound plays or a sound emitter moves, it's just a quick lookup to figure out what reverb values to use.



I'd like to write more about this soon. Hopefully there will be another Poor Man's article on it.



Adaptive client-side interpolation delay



I watched a talk on Overwatch netcode:











Pretty much the only thing they mentioned that I wasn't doing already was the adaptive interpolation delay. Basically, if you have a reliable connection (regardless of ping), the game will buffer incoming packets for a shorter amount of time, because it trusts that new packets will come in on time. This reduces latency.



If your connection is dropping packets left and right, the game will start to jitter. Eventually it will decide to increase the interpolation buffer to smooth over those missing packets. I use a simple scoring algorithm with some basic hysteresis to prevent the client from switching back and forth all the time.



Of course, algorithms often do the wrong thing, so it's important to give people control whenever possible. Hence this menu option:







Store art



The character in the store art I've been using dates back to 2014... and it shows.







With Seven's model finally done, I decided to redesign the store art and focus it around her, since she's the most important character.



First I tried just adding her to the existing scene:







This worked okay, but I was never quite satisfied with this color scheme. I tried messing with the lighting.







At this point I started soliciting feedback from some fellow developers, and they all thought it looked confusing and muddy. The foreground and background bled into each other too much.



I kept messing with the lighting.











Everyone wanted me to switch to cold background, warm foreground, so I tried that:







Eventually I realized the old 2014 model had to go. It wasn't up to par. I also had to spend some time in the Blender compositor to get ambient occlusion to behave the way I wanted to. By the end I had seven render layers, some of which spit out multiple passes.







At this point I slapped the logo on top and realized it would never work. The logo is surrounded by a dark border, and it didn't stand out against the dark background at all. So I switched back to a pink background, and also threw in some geometry from a level I've already completed.







You can see I also removed the scan lines from the logo. On their own, they were okay-ish, but I realized they were just too complex and I couldn't make them work with anything else.



I'm still not 100% happy with the colors on Seven; I think she might not stand out enough. But after two whole days of tweaking I think my time is better spent elsewhere. I've never had this much trouble with store art before.



The capsule art stands out pretty well, but I'm still worried about it.







The problem I've had with this game from the beginning is that it's essentially two different games in one, complete with two different art styles. There's the exploration game with vibrant, feminine colors, and then there's the drone combat game with deep, masculine colors. Which style do I use for marketing materials?



A fellow dev suggested doing a simple A/B test with Facebook ads, which I actually tried once a few years ago. The sample size for a $50 ad spend (on the order of 50 clicks) seemed to small for me to take action on. I dunno. It might be a good idea. Seven is the character with the most screen-time in the game. And she's a no-nonsense badass. I knew I needed to dedicate some time to her.I started out last week by playing hair stylist. I wanted to take Overwatch's wavy hair and bring it into Deceiver's neon aesthetic.Next I modeled some cyberpunk combat boots.Then the rest of her outfit.The last piece was a military ALICE pack, but I'll get to that later!Logan whipped up a looping rain sound for me. Previously I've just ramped the volume up and down based on a system that calculates how much rain is falling near you. But this time I wanted to control not only the volume, but also the positioning. So if you're standing under an overhang, the rain will sound like it's coming from outside.I already had a grid of raycast results surrounding the camera to drive the particle system, so I just ran some weighted averages on that to figure out where to place the rain sound. I used a Wwise RTPC to set the spread to 100% when the sound is close to the camera, so if there's rain all around you, you'll hear it in both ears.I spent a day and a half on this crazy voxel-based reverb system. When my level importer builds a level, it first chops the level up into chunks. Then at the center of each chunk, it queries the AI navigation mesh and collects all the points that are "visible" from that chunk.Then it rasterizes those points into three "shells", for close range, middle range, and far range geometry. Each shell is sort of like a spherical black and white bitmap image. If the close range bitmap is 100% black, then that means we're in a pretty tight space.The importer spits out three coefficients for each voxel chunk, representing the amount of close range, middle range, and far range reverb. After this it runs the whole voxel through a smoothing kernel and writes the result out to a file.At runtime, whenever a sound plays or a sound emitter moves, it's just a quick lookup to figure out what reverb values to use.I'd like to write more about this soon. Hopefully there will be another Poor Man's article on it.I watched a talk on Overwatch netcode:Pretty much the only thing they mentioned that I wasn't doing already was the adaptive interpolation delay. Basically, if you have a reliable connection (regardless of ping), the game will buffer incoming packets for a shorter amount of time, because it trusts that new packets will come in on time. This reduces latency.If your connection is dropping packets left and right, the game will start to jitter. Eventually it will decide to increase the interpolation buffer to smooth over those missing packets. I use a simple scoring algorithm with some basic hysteresis to prevent the client from switching back and forth all the time.Of course, algorithms often do the wrong thing, so it's important to give people control whenever possible. Hence this menu option:The character in the store art I've been using dates back to 2014... and it shows.With Seven's model finally done, I decided to redesign the store art and focus it around her, since she's the most important character.First I tried just adding her to the existing scene:This worked okay, but I was never quite satisfied with this color scheme. I tried messing with the lighting.At this point I started soliciting feedback from some fellow developers, and they all thought it looked confusing and muddy. The foreground and background bled into each other too much.I kept messing with the lighting.Everyone wanted me to switch to cold background, warm foreground, so I tried that:Eventually I realized the old 2014 model had to go. It wasn't up to par. I also had to spend some time in the Blender compositor to get ambient occlusion to behave the way I wanted to. By the end I had seven render layers, some of which spit out multiple passes.At this point I slapped the logo on top and realized it would never work. The logo is surrounded by a dark border, and it didn't stand out against the dark background at all. So I switched back to a pink background, and also threw in some geometry from a level I've already completed.You can see I also removed the scan lines from the logo. On their own, they were okay-ish, but I realized they were just too complex and I couldn't make them work with anything else.I'm still not 100% happy with the colors on Seven; I think she might not stand out enough. But after two whole days of tweaking I think my time is better spent elsewhere. I've never had this much trouble with store art before.The capsule art stands out pretty well, but I'm still worried about it.The problem I've had with this game from the beginning is that it's essentially two different games in one, complete with two different art styles. There's the exploration game with vibrant, feminine colors, and then there's the drone combat game with deep, masculine colors. Which style do I use for marketing materials?A fellow dev suggested doing a simple A/B test with Facebook ads, which I actually tried once a few years ago. The sample size for a $50 ad spend (on the order of 50 clicks) seemed to small for me to take action on. I dunno. It might be a good idea. « Last Edit: December 19, 2017, 06:31:40 AM by etodd » Logged

io3 creations









Level 10 Re: Deceiver « Reply #157 on: December 09, 2017, 09:22:26 AM » That's interesting question about the logo. When I looked at the New Games section on Steam, there was a lot more variety in colors, not just the dark ones you showed in the sample. So it'll depend on the actual day.



My first guess is that the blueish color would be more attractive to males - also the gamers who are more likely to play the game. IIRC, on Facebook ads you can specify a number of criteria so trying to limit the ads to "male gamers" might give you an idea if there's a preference for either version.



Since both colors are present in the game, perhaps having the two colors in the logo could work with blue given more dominance? Logged

Mr E Key io3creations.com :: twitter :: YouTube Mr E Key devlog