Jump to content
  • Advertisement
  • entries
    51
  • comments
    120
  • views
    2905

About this blog

Unsettled World, the working title for my most overly-ambitious project yet.  Here I shall blog all of the resultant madness.

3bots.thumb.jpg.64b609a8838d3d868994618826e47a1d.jpg

 

Entries in this blog

I finally put the rocket in the board!!!

Time for the 3AM Roundup!  What was I doing all evening??.. hmm.. So, finally, these RocketBoards are ROCKETBoards!  No more put-put'n around on the ground, no no no! I've completed the currency circle and now you can exchange your shiny golden rings for some airBoost Fuel!  1ring = 1 second of fuel.  You can hold 100 seconds worth at a time, recharge whenever by clicking on the Rocket Shop menu item!(even while playing)   This allows you to use your rocket thrusters while in the air, like every true RocketBoard should do.  So, now instead of a few hundred meters on a jump from the plateau, I'm reaching 1000+ on a straight shot with lots of speed.  It's so much fun.  The race courses are a whole other experience like this.  (Still no npcs to race with yet, it's next I swear!!) SlingBot Boarding v0.2.2: https://www.kongregate.com/games/WilliamOlyOlson/slingbot-boarding I've also put some significant work into more/better sound effects, spent some time in Audacity making some permanent remixes since I'm having trouble with applying effects in Unity, this way should be better for performance anyhow. Also spent several hours on the UI, fixing things up and making them nicer to look at(hopefully).. haha What else, mmm.. airBoost rockets, UI upgrades, Rocket Shop menu... Testing the last build... fingers crossed!!!! Ahhh Yeah!  There's the money shot! Enjoy!

Septopus

Septopus

One dose of Currency please! (v0.2.1)

So, it was time I added a form of currency to SlingBot Boarding.  I've been working out how to make the game more interesting and I also wanted to incorporate more classic game elements.  So, say hello to Spinning Golden Rings!  build v0.2.1: https://www.kongregate.com/games/WilliamOlyOlson/slingbot-boarding Every player starts with 100 rings in their account(new space in the UI top-right).  These will be used to buy boost fuel and upgrades for your board/engines.   When I make those things...  Soon. You will soon be able to earn them doing all kinds of fun and interesting things throughout the park.  But for now, you can go Rabbit Hunting every 5 minutes to get a chance at snapping up a goodly sum, before I inevitably extend the Hunting interval out a bit longer...  Or make the rabbit a little less generous..  Probably both.  haha   I've also tweaked all of the sounds a bit and added a few new ones(a good crunchy when the board leaves from/returns to the ground, and a nice classic power-up style ring collection sound), it's really starting to sound like a game now!!  I've also switched out some of the main UI text elements for a more meshy type of.. type..    It will look much cleaner when I get them all swapped out and arranged/colored/etc.. All for now, going to bed before 2am today, trying anyhow.. Happy Hunting!!

Septopus

Septopus

SlingBot Sounds.. and A Rabbit?

So, I've built v0.2.0..  and it's well after 3:00am my time this go-round. haha In this build I've started to implement sounds, currently I have a wind sound for ambiance and a  fairly rough(sounds much better in the editor) board/snow sound.  For some reason it sounds like the High Pass Filter I applied in Unity isn't making its way into the WebGL build.. more troubleshooting.  But it does sound better than NO sound at all... WAY Better!! Game Link:https://www.kongregate.com/games/WilliamOlyOlson/slingbot-boarding Oh yeah, I have the first NPC working too. It was a simple test of NPC steering, and it turned into an entirely new feature of the game! It's called a Rabbit Hunt!  Click the Rabbit button and you have 2 minutes to beat the high-score.  All you have to do is stay close to the NPC.  haha!  Within 50m scores 1 point for each frame, outside of 50m loses 1 point.  Your direction arrow fades away if the rabbit gets further than 200m away.  Just noticed the Courses button is still visible during the rabbit hunt... Shoot... Oh well, hopefully it doesn't let all the bugs out when it's clicked during a hunt...  Fix it tomo... later today!   After sleeps. BTW, I'm really diggin on the easter-egg potential of this new Rabbit Hunt feature.  (no there aren't any yet, but the potential is just ridiculous)

Septopus

Septopus

Unity + WebGL + PlayFab + Kongregate = :D

It can be done.. I got PlayFab leader-boards WORKING!!! heh, it's past 2am.. In spite of my trouble yesterday, I decided to give it another go and somehow it all just worked.  I think I got ahead of myself yesterday and just wrote too much code in one sitting without running it.  I can see that becoming a temptation for me while dealing with the much longer build times for WebGL.. I also have the numbers synchronizing between PlayFab and Kongregate..  And by that I mean whenever I retrieve the stats from PlayFab, I update Kongregate to reflect those statistics.  So I have all the numbers in a system I can manage. And now when you click the little score podium on the top right, you get a nifty overlay showing you your all-time best stats.  I'll add numbers for the current positions of your top scores on the leader boards and whatnot.  But first.. sleeping.. If this is not your sleeping time though, please, give it a whirl.    Link Below. Game Link: https://www.kongregate.com/games/WilliamOlyOlson/slingbot-boarding V 0.1.8: PlayFab integration is functional.  Some minor improvements/fixes to how airtime is recorded, I was seeing unreasonably high numbers before.  I think that's under control now.  

Septopus

Septopus

SlingBot Boarding Kongregate Leader-Boards.

Game Link: https://www.kongregate.com/games/WilliamOlyOlson/slingbot-boarding Okay, all non-racing stats are now updating Kongregate leader-boards.  (Best Trick(combo trick points), Best Airtime(time in air in ms), Best Flight(longest linear distance in air), Best Speed(fastest recorded speed), and Courses Completed. I'll be adding 3 trophy/medal counters when I get NPCs and racing going (gold,silver, bronze).. Unfortunately, the stats system on Kongregate is designed mostly to help Kongregate encourage players to earn Kongregate badges and etc. achievements by playing games.  So, the stats system is only a one-way transaction.  Which makes it nearly impossible to display accurate leader-boards in-game.  They display on the side-bar in non-cinematic mode, and I'm sure you can browse to them somewhere else too, but for now I guess that will have to do. I spent at least 3 hours trying to figure out how to get PlayFab(an actual leader-board back end that's supposedly "partnered" with Kongregate) to work with my WebGL build on Kongregate and no go...  I've used PlayFab before on a PC/Android game and it worked flawlessly, so it's not just me, haha..    Got frustrated with it for now, so Kongregate stats will be all there are for the moment.  haha   I need to work on some other things for a while...  Like providing some visual feedback on the fact that you've earned points for doing stuff..   Oh yeah, and some NPCs.. Anyhow, there's something at least sort-of competitively motivational in the game now.  lol

Septopus

Septopus

SlingBot Boarding first public playable WebGL build.

Well, it's not complete but I think the gears are all there now.  I still need to incorporate leader-boards, build some NPCs and do some more fine tuning here and there.  Still, not much more than a toy, but it's pretty fun! https://www.kongregate.com/games/WilliamOlyOlson/slingbot-boarding ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Really anxious to hear about frame-rate numbers(bottom corner).  In this latest(WebGL) build I've been getting close to a stable 60fps in FireFox. I even threw together a simple touch interface, haven't tested it on a touch device yet though, so I dunno how well I guessed for size/placement of the buttons.  I'm thinking they might need scaled down a bit for some devices... haha.   Anyhow, would love some feedback if you got a minute to do some rocket-powered snowboarding, with a robot.    

Septopus

Septopus

Hello Unity + WebGL + Kongregate, goodbye sanity.

So, it's 2am and I'm writing a blog entry.  I must be waiting on a Unity WebGL build to complete so I can upload it and THEN check if my Kongregate API code hacks are working yet... Wow, never expected this journey to be like this.  I suppose I never do anything the easy way.  So now I'm integrating a JavaScript API into my c# Unity game... I'll do a more thorough write up/code share later, this will just be some quick notes.. and something to keep me busy between builds.. Go here first for basic Kongregate API initialization and integration: https://www.kongregate.com/forums/1021798-game-programming-subforum/topics/1673115-guide-kong-api-with-unity-jslib-system The above uses the new(2017.1+) Unity way of including JavaScript (.jslib), so at least you know it's supported, even if there's no documentation on how to use Kongregate with it yet. I'm currently working on adding support for kongregate.sharedContent to my game, may even contribute to/fork the above when I'm ready for that.. This will allow players of SlingBot Boarding to Create and Share their own race courses.  With shared leader-boards it will be pretty close to multi-player without all the headache.  I may even simply record race data and use that to generate npcs that actually move like players. Alright, last build and hopefully I'll have Race Course Save and Load working on Kongregate... If not, I will sleep anyways, because now it's almost 3am..  haha.. Well.. one more.. Haha.. Still not quite there.. I can save items, I can view saved items, I just can't figure out the callback registration for "loading" the saved file.  So the struggle will continue tomorrow.

Septopus

Septopus

Sling Bot Boarding Day 7, Toy Build 4! :D

Not much to say about today's build that I didn't post yesterday... or earlier... wait.. what day is it??.  haha In fact, there's nothing else to be said...  Just play it!! .zip = Win32 (Scanned clean with Kaspersky VirusDesk, see .png for checksums) SBBB4.zip  

Septopus

Septopus

Sling Bot Boarding Dev Day 6, Scoring!

I've got a few more features to cram in here before I put out another toy build, but here's what I got going today: Scoring System: points are accumulated for Air Time, and rotations(tricks) that are performed while in the air(right now, just turning and flipping).  A combination multiplier is calculated each physics frame to determine if multiple rotations are being executed simultaneously(rotate & flip), this will double that frames point value, if the player velocity also exceeds 150km/h it will triple that frames value. In the screenshot below you can see the new Records section, this holds your current high speed, your longest air time(distance) measurement, and your highest single combo score. My next toy build will include a replay button for each of these record items so you can revel in your own robot glory!! The total score on the right will be more important for running courses and racing, which I have yet to begin on.. Even More Camera Improvements:  I was still unhappy with the camera follow as of toy build 3, so I played with the rotation Lerp speed, in toy build 3 the camera's movement and rotation Lerp speed modifiers are the same.  I've cut the camera rotation Lerp speed in half now and it does a much better job of keeping the player centralized in the view.  Don't really have a screenshot for that though..  Lets see... Oh YES!!  Glitter!  Hahaha, I dunno if it will stay like this exactly...  But it's pretty fun. Now when ever there are points being accumulated you get a visual signal in the from of red and green glitter shooting from the ends of your board. These are just cubes I colored to use as placeholders for something nicer, but I almost like them just as they are... The more combinations you do the more glitter you get. It makes a nice visual feedback for the player, at least I think so. That's all for today, Happy coding everybody!      

Septopus

Septopus

Sling Bot Boarding Toy Build 3!! :D

Hey Everybody! Toy Build 3, sporting improved camera follow, and Instant Replay!! I'm really interested to hear how the replay feature works for you guys, it stores the replay data based on the frame-rate and not a fixed clock tick, so I'm hoping I got the math right and it replays correctly for all frame-rates equally...   Currently the buffer is fixed @ 1200 samples, so the actual replay time will vary according to your frame rate a bit.  Once the buffer is full, it removes the oldest frame and adds the next.  So you can replay at any time(when the buffer is full) and get the last n seconds of play.   Pretty awesome!  .zip = Win32 (scanned clean with Kaspersky VirusDesk before upload, see attached .png for checksum) SBBB3.zip

Septopus

Septopus

Now With 100% MORE Flipping! :D

Day 2, Sling Bot Racing. Toy Build #2  "NOW WITH 100% MORE FLIPPING!!" Actually so, and not only that, an entirely revamped camera follow routine.  It's much more like an actual "follow" camera now, as in it follows you and faces you, but doesn't always point the same direction the player does.  You'll see what I mean.   It makes it a little more challenging to navigate sometimes, but most of the time the movement is exactly how I want it.  I'll be working on refining it more, and maybe adding some other camera angles for a more freestyle play option.. e.g. I don't think this camera would work very well for half-pipe trick competitions, but it will work great for time racing and running "courses" which is the main game-play I'm targeting right now.  As a side effect you can now ride "switch foot" on the board, you just turn and switch to reverse thrust.   I haven't intentionally tried any flip-twists yet, but I know the controls should work for that as well. Next on the list, well besides the Android Toy build, I will be working on setting up courses and rewards.  Working on some custom animations, these are all reused from standard assets, and I discovered the Idle animation was killing about 10FPS, ugh... I guess I should have paid closer attention to what the animations were doing to my frame rates.  Probably wouldn't have noticed this in my main project(which uses the same idle animation), for some time yet..  When I get back to that I'll be able to make some direct improvements thanks to this detour. Moving forward with this..  I'm thinking about going classic 90s, using some coins and speed boosts and stars and what have you, something like the good old classic snowboarding games mixed with some Hedgehog type speed-action.   I was gonna go a slightly different direction with this one, but programming semi-realistic boarding action seems to be more within my skill-set than I though it would be.  So I'm gonna just make a cool robot-rocket-snowboarding game instead.  The sling part will still be there, up on the plateau there will be some catapults and various other contraptions that I've not yet imagined, which will sling the player into action following one of the many courses that I'll try to setup before Christmas... haha.. You should find the .zip file attached, Build #2 for your entertainment.  Still no barriers, so if you leave the terrain, I guess you lose. Enjoy. *see next blog for latest build. ;)

Septopus

Septopus

Well now, I can't be the only one having fun! :D

So, as this first day of raBid development has come to a conclusion, I find I've spent far more of it having fun playing my new mini-game than I did actually feeling like I was making one.  And HEY!  Check this out, I have a Toy Build for you to play with too...!! (this is just a screen shot of it though, you'll have to find the attached .zip file) Takes a second to get used to the controls, it's a fully physics driven movement system, so keep that in mind.  You are moving with Thrust, and there WILL be THRUSTERS!! on these super robot boards!  I didn't have time to add the THRUSTERS!! to the toy, sorry for that..  Yes, they will be awesome enough to have two exclamation points, and yes even in the middle of a sentence..  So don't worry about it. Enjoy. Oh yeah, and if you happen to think about it, I would love feedback on EVERYTHING... 32bit Win Build in zip(Scanned with Kaspersky VirusDesk before upload), I'll probably put up an Android toy too, dunno when yet(tomorrow?).  Trying for several platforms here, but I've only got PC and Android that I can test myself, so we'll see how it goes.  I may have to borrow an Ipad from somebody. Anyhow, enough of my rambling, go on, kick the tires!!  Hope it doesn't crap out on ya.  It works on my dev. machine which has some pretty terrible "graphics hardware"..  Easier to keep things mobile-friendly that way though. Latest Build: https://www.gamedev.net/blogs/entry/2266237-sling-bot-boarding-day-7-toy-build-4-d/  

Septopus

Septopus

Sling Bot Boarding, Day 1, already makes me giggle.

Looks like video gallery links are still broken.. https://www.gamedev.net/gallery/image/10413-boardin_day1mp4/ I did work on this a bit last night as well, so I guess it's day 1.5.. ish.. haha! Still working on the crappy frame-rate, I'm not sure the frame counter is even working correctly...

Septopus

Septopus

Sling Bot Boarding

Soooo... Additional project time! It's a personal Christmas challenge.  Plus I really need to make something that I can release before another year goes by. A basic re-use and re-imagining of my current main project assets.  With some inspiration from @CyberFlash's most recent adventure into "sling the object" games. Here's the synopsis, so you really don't need to click the link..  

Septopus

Septopus

Redesigning, Rewriting, and Refactoring

So I spent several months there just writing code like an insane monkey with a caffeine addiction...  I'm spending the week cleaning house and making sure all my ducks are in a row to continue implementing the new story objectives that I wrote up.  There's a LOT of code in this pile that doesn't even really apply anymore. I had built a pretty solid mining claim system so the open world could regulate access to the mining resources.  That's not exactly necessary for this segment of the story, so all of that got commented out today.  As well, I had a Land Deed system in place that won't see the light of day for quite some time.  These were each several hundred lines of code both on the server side AND on the client side. It actually feels good to have those bits of code on ice for the moment.  They really are features that aren't going to be even remotely useful until I have a large player-base and a story-line that encourages that kind of activity.  Not there yet. I've also been working on the UI, re-aligning the theme to match the new story line.  It's just a start, but I already like it more. As you can also see, the spheres I was using for testing out the NPCs are now replaced with the first actual NPCs, RepairBots!!  They're pretty lame so far, just following around the player, with only one speed of animation atm, so it looks pretty funny when the character is running and the npc is speedwalking behind it. I've also been working on the UDP network protocol bits, that whole bit of code will look a little different here in a few days.  Because I'm terribly strange and I enjoy working with strings, sometimes I'll prototype things using them...  And sometimes, most of the time, I keep using them for a little too long... I'm pretty much done with my prototyping now.   So now it's time to do away with all the strings I tied it all together with.  Truthfully I should have converted it all over to byte[]'s a while ago, before I had so many methods to re-touch..  But such is my process.. hahahaha!! The good news is, it was pretty easy to build secondary code paths where necessary so I can run the string based net protocol right beside the new byte[] based one.  Well, so long as the transition is under-way anyhow.  I'll have no need for the string version when I'm done. So, yeah, more NPC fun, UI redesigns, and net-code rewrites..  That's my life!

Septopus

Septopus

Wait what? Did I just choose a genre?

Soooo.... I've been working out some of the ideas I've had in mind for the game I've been building all this silly infrastructure for.. haha.  I know, I'm the most backwards thing you've probably ever heard of. Anyhow, I've always been a huge fan of games with some real-time strategy elements built in.  So, I guess that's more or less the genre I'm going with here.  I've sketched up some major "objectives" or game "phases", I'm not sure if these will be actual *** OBJECTIVE COMPLETED *** YOU MAY NOW PROCEED TO LEVEL 2 ***, type objectives, but regardless.  Most of these objectives past #2 will correspond to a specific "quest" type activity that will be presented to the player for their somewhat optional consideration. Here they are: Objective 1: Minimal operational status. The player will work through making repairs to their bot with found parts until it is at minimal operational status. This will also serve to tutorialize some main game-play elements. Story Elements: Post intro: First person camera, bot comes online slowly with errors flashing in from all angles.  Some appendage is severely damaged, or missing.  Some other major systems are offline or considerably hindered and in need of immediate(limited time) repair.  Damages will be randomized so each attempt will be different, it could/and possibly should take a few tries to get a working bot out of the beginning gauntlet. Antagonists: Lower Bots, bots who have achieved some level of self-awareness yet exhibit almost zero predictably conscientious behavior.  These bots will seek to either dismantle the player bot or to befriend it, or sometimes, both... Objective 2: Basic Crafting, Recycling and Mining. The player will master basic crafting skills required to make simple parts from recycled, or raw elemental matter, and repair them in the field. Story Elements: Player has achieved nearly full operational status and has begun exploring the "world", aided by all kinds of indicators and on-screen displays the player has discovered the usefulness of the garbage piles as well as discovered how to mine resources directly from the moon itself. Antagonists: Lower bots, Peer player bots, junk haulers, and guard patrols. Notes: New players will be dropped into a part of the world that will be hard to get back into(kinda pointless as well) once you've completed Objective 2.  This place will be a fairly hostile dumping ground where bots are consistently dropped from great heights and regularly used as target practice by the haulers(human) and guards(human). Objective 3: Bot Programming. The player will learn how to connect to other bots in order to encode their loyalty and put them to task. Story Elements: The player has achieved Objective 2 and has escaped from the "intro zone"..  Now begins the game, the first narrative characters will appear at this time and will instruct the player in ways they can proceed to find territory and to assert their control over the lower bots. Antagonists: Lower bots, Peer player bots, only occasional haulers and guard patrols. Objective 4: Bot Networking. The player will obtain the hardware/software upgrades necessary to connect to other loyalty encoded bots for the purpose of combining processing power and increasing their ability to perform complex tasks(Max of 5 to 10 per player). This stage will also introduce shared loyalty, where multiple player bots can use the same loyalty code, thus enabling multiple players to collaborate without their loyal bots fighting each other.  Command loyalty always resides with the last programmer, so they only obey orders from the programmer that encoded them most recently. Story Elements: First major quest taking the player an extremely long distance away from their "territory".  The player will have to prepare their band of loyal bots pretty well in order to make it back with the prize.
Antagonists: Aside from major narrative related NPCs the antagonists from this stage forward will primarily be other players and their loyal bots competing for resources plus some mob type activity from lower bots here and there. Objective 5: Advanced Crafting. The player will learn how to repair damaged bot MagCores and to build and repair various other complex components.  MagCores are the future processors that when combined in two or more pairs(4+ cores) have the power spark self-awareness. Story Elements: It takes one core to run the MagMagic tech that makes a bot mobile, it takes 2 to make it do anything with it.  When redundancy was added, that's when strange things started to happen.  Narrative characters will be used to explain how things came to be, and what can be done about it. Objective 6: Incorporation. Using all the skills learned thus far the player will begin building a small functional production site(town).  Raw materials will be gathered and processed in various structures. Defensive structures will be built and the site will be guarded by technology developed and deployed by the player and their loyal bots. Objective 7: Production. During this phase the player will be encouraged through narration to build their production capacities up to the established minimum levels across the board. Objective 8: Mobilization. With production solidly under way, its time to begin thinking about the bigger picture, what resources can we mine if we have some faster transportation?  What can we make then? Objective 9: Infrastructure. Through constant attacks(greater mobilization only makes the attacks worse) from other players/hordes and mob/npc characters alike, the player will be encouraged to build up their infrastructure/armaments to meet the demand.  Until they are no longer threatened within their territory. Objective 10: Discovery. The player will discover the original production site for the MagCore technology burried beneath the rubble of this garbage moon and will learn the original source of its power. Story Elements: This will end the primary narrative of the main story-line.   So, its something like a real-time strategy game, just with a handful of units per player, and on a fairly massive 3D world with lots of resources and cool stuff to make.  Battles to fight, production sites to protect, mines to guard.  Mysteries to discover, and a moon to transform from a garbage heap into the shining example of what an aware and sentient mind in a robot body can build.   Or you can just go rogue and wander around exploring the planet, helping lower bots achieve higher levels of awareness and consciousness, participating in small narrative quests and the like.  Or maybe you'll build a roving horde and dismantle your way across the terrain building your core collection as you go, leaving only the empty shells of the bots who got in your path.  In the wild only the smartest bots survive...  The choice is yours really.  My goal is to have enough narrative to support a full introduction and a solid set of objectives for the beginning and intermediate play levels, yet be able to fade out in the middle in favor of more pvp rts/3rd/1st person play, and then when the player has proved their dominance, provide a subtle yet powerful kind of closure to the main story arc without concluding the game. Well, how does it sound to you?  I think I'm starting to feel it..

Septopus

Septopus

Command Line Interfacing

One of the great advantages to having a distributed modular system comes in its flexibility and its configurability/re-configurability.  The modular approach I'm taking with my system will allow me to service and tune specific aspects of the architecture individually during live operations.  The more flexible and modular the system becomes, the harder it becomes to manage efficiently.  This is a general rule in large scale computing, at least one I've come to believe in over the years. I was continuing work on the Mob server(loot-drop type NPC controller), and I realized it was past time to begin thinking about how to manage this beast once it's actually breathing internet bits.. Pub/Sub to my rescue again! I'm rolling with a simple CLI program on the servers and it's just using a standard MQTTNet client. Each individual server has a topic in its own name that it subscribes to.  e.g. "MobServer01" Each type of server subscribes to their group topic. e.g. "MobServers" So, to send a command to a server or a whole group of servers is just a matter of publishing to the appropriate topic, across the entire infrastructure. Here I've set the Mob to Player ratio to 2 before logging in. The Mob server output is bottom left, the CLI is bottom right. and here's the 2 npcs after login. and now the fun stuff! Well, I guess you'll have to click the link until the embedded images start working again.. https://www.gamedev.net/gallery/image/10396-npccli3mp4/ lol  

Septopus

Septopus

Resume Course and Speed. ;)

So, sometimes I get wrapped up in the moment and think 42 steps ahead of where I am, and in that 42 steps I usually take a sideways leap somewhere and not realize that I've put myself on a different train altogether.  I got caught up in the idea that I had an architectural problem on my hands and that I really needed to evaluate what to do about it.  And really, I probably would have ended up with one if I hadn't stopped for a moment and sorted it all out...  Again. See, when I was first designing my multi-player server code, I had already come to the conclusion that I could only control one copy of one Object with one(1) physics simulation.  Otherwise things would just get too funky...   lol. I'm only ever using physics as a motor force for the objects "influenced" by the simulation providing those forces.  I somehow forgot I had solved this conundrum to my satisfaction for the player characters, when I started adding in NPCs... So, just so I have it written somewhere: All NPC game objects have a primary copy, that is "owned" by one(or many) of the servers and "influenced" by one of the clients per the servers instructions.  Since a great number of my characters will probably be "player controlled/controllable" - N/PCs   This setup actually made the most sense to me. What I have yet to do though, since introducing the idea of NPCs into my system, is properly write down how that's all going to work, with pictures and diagrams.  So I don't forget it again... Without further ado, that's what I'll be up to for the next few hours, while I eat my holiday pie.   Hope you got some pie today too, holiday or otherwise!    Everybody needs some pie.

Septopus

Septopus

 

ALL STOP.

So, I've been approaching this as though I would be able to devise a way to omit an authoritative physics simulation from my server architecture, while still having physics running on the clients. I'm really not sure that's actually possible for this game anymore.  Too much "fast" action... So, I guess the only way I can remotely save this codepile is to try and make player movement entirely deterministic, by killing all the physics forces and manually checking for all collisions on the server and controlling all movement via object transforms... bleh....  If it works, I'll be amazed..  If I don't have to rewrite just about everything, I'll be even more amazed. If anybody has any better ideas, would love to hear them.. I don't have the resources to get a server that can run an authoritative physics simulation built with Unity... Certainly not something that would do it well.  That's the primary reason I've been trying to omit that part from the equation..  So..  "Other" better ideas would be nice, if they exist...  Preferably ones that fit the game play you've seen me trying to make. Thanks!

Septopus

Septopus

Server Spatial Awareness

I started working on generating the systems that will instantiate the NPCs, got it booted up, you can check my latest video upload in the gallery for that.   But once I had that at a comfortable point to resume later, I decided I needed to close a planet sized gap in my server architecture. So, thus far, I've got a pretty neat client simulation going on, several fairly nifty server systems that do some pretty neat stuff too. A lot of ideas.... and a lack of glue. Well, that is until I spent a few days sorting things out. And sorting things out..  And then resorting things out..  In the process I think I found what I was looking for. https://github.com/gradientspace/geometry3Sharp That's a nifty little double precision geometry/etc. library for C#, C# in Unity, and MOST IMPORTANTLY C# on Linux in .Net Core!  Why is this important you ask?  I'll tell you.   Here you see the above library loading my planet mesh, rotating it to the appropriate angle, generating an AABB tree, and running 6 raycasts from 0,0,0 to verify the orientation of the mesh. i.e. These numbers match the same points in the Unity client simulation. And Here: You see the same thing running on Linux. Here you have(combined with the Redis database and the in memory input from clients) the mechanism(s) by which I will attempt to determine who IS where they say they are and IF they can physically be there or not. As well, who could have been there when they said they were.. If you get my drift. I'm planning to use every useful feature of this library I can to build some nifty spatial awareness directly into each server node.  Every node should be able to plot and check any coordinate/line/box/sphere/etc it may need to find/verify/predict/etc. any movement in the game it has authority over. Since I'm not running a full physics simulation in a centralized fashion, this will have to fill in for the data one would have access to from said simulation.  Combined with the ability to record and compare maneuverability characteristics over time and correlate those to player stats and configurations, I think simple geometric calculations with sufficient time references could be just as effectively authoritative as a single physics simulation.  Especially in the case where a client is using some kind of prediction/local physics anyhow. Next I get to integrate this into my Mob Server so I can start making interactions between the Player and the NPCs it generates, an actual verifiable thing. More soon!

Septopus

Septopus

It's NOT a Simulation! :D

I think I've finally put my finger on the button(s)(quite a few apparently) that may explain my project.  It's helping me to clarify my vision anyhow, so just play along okay? I'm not building a game simulation....  I've been trying to use that term because it's what everybody else uses, and it really just doesn't fit my project at all. There is no single starting point and there is no single ending point.  The story elements are to be primarily interaction based and not strictly tied to highly specific locations or circumstances.  The visual synchronicity of the experience is only dependent on entity proximity, which in effect makes it more of a relativistic kind of synchronicity than the absolute kind anyhow.  All gaming entities(players,npcs,mobs,bosses..etc) will be autonomous actors in the gaming environment, regardless of what controls it.  e.g. Each NPC will essentially be their own entirely isolated behavioral code(running on a server OR client node somewhere).  This code will generate a game entity that is just as actualized in the environment as any other object or player character, it will just behave according to its "script".  All in real-time, with client controlled physics. So, I'm building a "Multiple Entity Gaming Environment".... It's a working title..   In essence, instead of streaming data that has been aligned to a unified simulation out to many many clients, I'm streaming data about many many ongoing semi-synchronous real-time "INTERACTIONS" from game clients into a massive, fast, circular buffer.  From which, the servers shall draw conclusions and route corrective actions to multiple endpoints simultaneously, and hopefully in many cases, preemptively. When we're worrying about things in a game becoming out of sync, it's usually in relation to some kind of fast motion or relative positioning, a gun-shot or a left hook, something that is moving/has moved/will move and the event needs to have the same outcome on multiple gaming clients.  Users in most games with this kind of action, don't generally care if their team-mate was .5 meters closer to them then they looked like they were when they helped shoot down the boss.  They only care that the shots they saw coming from that team-mates gun were hitting the mark that the team-mate was aiming at, which was hopefully the boss, if the team-mate is any good. This may be something of a contrived example, but it more or less illustrates my point.  As long as the servers can provide the appropriate real-time adjustments to certain aspects of the entity interactions to make the synchronicity fall into a zone of acceptability, then nearly all the heavy lifting can be done by the client without running every client input into and back out of a tightly wound server controlled simulation.  Then, how do we control anything?  The major change here is how Authority is implemented, in a standard server-simulation, the policy is trust nobody.  Here, it is trust everybody, but also verify and cross-check everything.  In this paradigm the authority is purely corrective in nature, with designs on preemptive corrective abilities(where applicable), but primarily relying on minuscule corrective actions that steer the simulation variances into a zone of acceptability. Another fairly extensive level of control comes from the decoupled nature of the system.  Since all entities are autonomous components, they can each be turned on or off at will.  So, that pretty much gives us all the control, never heard of before.  Each entity can be rewritten, debugged, uploaded and instantiated into the game.  Without a single system restart, or change to the game code(goals, I got em).    So, since we aren't wasting all of our server horsepower on a massive interactive simulation, we can use it to play cop, crossing-guard, mail-carrier and chauffeur all at once. We can implement heavy-handed position and relative distance checking into the entity data feeds that are being streamed INTO the servers, we can correlate those patterns with known good behaviors and known cheat behaviors/known out of bounds behaviors.  We can implement corrective actions that will steer the entities back into synchronous path(s) when necessary.  And we can allow certain entities to become out of sync for longer periods without risking the integrity of any one game-wide "simulation".  Generally speaking, entities that fall too far out of sync can either get dropped like a laggy player, or will be re-instantiated from a node of the network closer to the action, depending on it's level of importance to the current branch of the narrative/network or game conditions. Haha, well I hope that this rambling mess helps you understand what I'm doing better.  The more I write it down the clearer it becomes to me.  I started building this beast before I even knew what it was going to look like.

Septopus

Septopus

All Servers Are Now On Linux!

Okay, the servers are now all running on Linux.  I had initially intended to wait until all development was mostly completed to make the transition but now I'm glad I've done it.  And, the more I use Visual Studio Code, the more I appreciate its simplicity and how well it's adopted the Linux environment.  It's starting to feel like home now that I've got a few active projects going in it.  Plus it's nice to clear my Windows development space, I could have 6 or 7 copies of Visual Studio open at one time before this, now I've only got the Unity game client and whatever test projects I need to sort out the next functional leap.   The rest is all in a Linux VM that I can VNC into if I need to use Visual Studio Code, otherwise I can do everything server side with an SSH client. The next step for these servers is to massage them into actual Linux Daemons, which shouldn't be HUGE, but it will take a minor rewrite of some bits of code.  Not a huge issue until I have a real server though.  So, really the next step is to get the base functionality built out in the next 3 Servers(Mob, Narrative, & Social) Here's a quick video of the client(Unity Windows) testing out all 3 current servers running on Linux. Top to Bottom: Avatar Server(Authentication/inventory/etc..), Economy Server(Banking/etc.), Action Server(Online Multi-Player/etc..) First we test the Action Server with the standard Ghost test you've seen here before, but then I mess a little with the banking features(transferring credits to/from inventory), and then I show how the drop item from Inventory and Pickup item(into inventory) works. Enjoy.   As always, more to come soon. linux_3.mp4  

Septopus

Septopus

And the Messages are ROUTING!!!

I have succeeded in creating a cross-platform, custom combination MQTT Client/Broker or "MQTT Router" that can Route messages to other MQTT Brokers/Routers.  They dynamically build connections to each other and test route latency.  They currently do NOT do any best route calculations.  But that is only a small behavioral ability that I can add at a later date and still feel like it's totally functional right now. In the below images you will see 3 windows, TOP = PRIMARY Router(Kinda like a DNS server, it distributes the Router hellos around so everybody knows where everybody else is. MIDDLE = PEER Router #1 on Linux BOTTOM = PEER Router #2 on Windows   Here you see the three servers connecting and subscribing to each other's publications and whatnot.   Here the Route-able message is submitted to the PRIMARY, Routed Through PEER#2  for  PEER#1   Submitted to PRIMARY, Routing Through PEER#1  for  PEER#2   And Submitted to PEER#2, Routed Through PEER#1  for  PRIMARY   Not the most interesting screen shots, maybe I'll put together a little video showing it in ACTION! haha.. Either way, a few days of hacking and I now have the core of my Content Delivery Network, at least ready for the next phase of integration and testing. Time to get back to writing the actual GAME SERVERS!!  hahaha I've got some serious refactoring and whatnot before I post any of this code though, so please be patient if you're actually interested in seeing it.    

Septopus

Septopus

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!