Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411506 Posts in 69374 Topics- by 58429 Members - Latest Member: Alternalo

April 25, 2024, 10:33:58 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsWobbledogs
Pages: 1 2 [3] 4 5 ... 37
Print
Author Topic: Wobbledogs  (Read 232416 times)
michelmohr
Level 1
*



View Profile WWW
« Reply #40 on: March 09, 2016, 06:59:08 AM »

In adding the voxeldog it feels like something for lost, it feels too real now. Sad
Logged

Rojom
Level 0
***


View Profile
« Reply #41 on: March 09, 2016, 07:00:31 AM »



Uncanny valley indeed lol. Could be cool as an unlockable skin though.
Logged
ActualDog
Level 3
***



View Profile WWW
« Reply #42 on: March 09, 2016, 10:57:08 AM »

In adding the voxeldog it feels like something for lost, it feels too real now. Sad

lol, like I said, this was just for fun. The standard box dogs aren't going away any time soon. No matter what, I want the final art for this to be bizarre and goofy. I'm not planning on going the route of realism.

Uncanny valley indeed lol. Could be cool as an unlockable skin though.

Honestly, I think I could go way deeper into that valley. Realistic dog model with some more time by me spent on syncing up the joints and maybe some passive head movement. Again, I don't want that for actual final art, but yeah, an unlockable "realism" mode might be hilarious.
Logged

dany69burton
Level 0
**


Do you want a disease?


View Profile WWW
« Reply #43 on: March 09, 2016, 04:53:19 PM »

They have good spooky faces like a classical representation of what a nightweird looks like!!
 Toast Right Toast Right
Logged

░░
███░░
░░░░░
░░███
░░░░░
ActualDog
Level 3
***



View Profile WWW
« Reply #44 on: March 09, 2016, 10:20:54 PM »

They have good spooky faces like a classical representation of what a nightweird looks like!!
 Toast Right Toast Right

Thank you. I am always striving to give some Classic Spooks.


I've been thinking about building a new physics animation system for some of my behaviors. My current strategy for "animations" is to define curves that map to torque values to apply to different parts of the dogs.

What I've noticed so far is that all the behaviors that work the best are context sensitive. For example, bucking works great and is conditionally triggered depending on top and bottom body collisions. Not only that, but the dogs buck differently depending on where that collision is on their body. Stability steps are another example. There are rules for when to execute them and their power varies depending on how off balance the dog is. Walking, on the other hand, is just a static torque curve. It works great under specific circumstances, but it can get really screwed up just as easily, and heavily relies on the dogs's sense of balance to be at all practical.

With all that in mind, I'd like to try and build a secondary animation system. The idea's to have curves with context sensitive keyframes, and for the curves to define target angles rather than raw torques. The system would reverse engineer the needed torque at each interval based on the target angle, and the "animation" would proceed/hold/change based on the conditions at each frame. A statemachine more than an animation, I guess. In retrospect this sort of system seems pretty obvious to me, but hopefully that just means it'll actually work well.

Going to try and get that working soon so I can do some tests. Today I did some experiments with PID Controllers. I was thinking I could use them for this, but after some learning and testing I don't think I will. I need to be able to have direct control over how long each "keyframe" takes to reach. PID Controllers take a ton of fine-tuning to get right depending on the context, and my system would need a ton of different controllers in different contexts to work. Also, it seemed like there wasn't an easy way to directly change how fast a specific PID Controller runs. I need my system to be able to do this automatically.

All that said, I have another plan for getting this to work, and the PID testing generated some pretty good content.





I'll be honest, these PID boxes got me thinking a little. I really like the idea of having a few bizarre things like this as toys. It ties into the wacky physics of the world, and they present great opportunities for some fun behaviors. I can just imagine a box dog's reaction when seeing one of these for the first time. Running away but cautiously intrigued and not letting it out of its sight.

Ahhh I can't wait to start in on an emotion and learning system for these guys!
Logged

RujiK
Level 2
**



View Profile
« Reply #45 on: March 10, 2016, 06:22:51 AM »

I like voxel dog!
Logged

nosferathoo
Level 1
*


indiedev from Poland


View Profile
« Reply #46 on: March 11, 2016, 04:10:15 AM »

props for voxel dog - didn't see that coming Smiley
Logged

ActualDog
Level 3
***



View Profile WWW
« Reply #47 on: March 11, 2016, 03:55:17 PM »

I like voxel dog!

He likes you too.

props for voxel dog - didn't see that coming Smiley

He's gone again for now, but maybe, one day, he'll return...


It's friday and I've had sort of a frustrating week doing systems work, so as a treat I let myself work on some more fun stuff.

To start with, I added in some debug controls for moving dogs around. You can move them around the stage by clicking and dragging and using the scrollwheel on any of their body parts, and just clicking adds an impulse to knock them around a bit. Every time I do stuff like this I wish I had done it sooner. So much nicer than pausing and moving in and out of Scene mode.




I've been actively unhappy with the way the dogs control in the air for a while now, but after getting in the debug controls it was much more obvious that it wasn't fun enough to throw them around, so I decided to tackle that. For stuff like this I like trying to find very simple rules to modify behavior with, so nothing I did was too complicated, but I think it's made a big difference.

This is what they behaved like before any of my changes.



Ew. Look at that. I care way more about how neat their behavior looks than I do about realism, but this behavior fails in both categories. It's not realistic and it's not fun to look at.

The first thing I tried was to just look at each limb's velocity. If the correction it wanted to employ was going against its existing velocity, I just reversed it.



The air behavior here is better, and the floppiness is kinda funny, but it makes the dogs way too unstable. I like controlled floppiness, but this is too much.

My solution was just to add a minimum velocity before the above rotation flipping took effect. This worked way better. It's still not realistic, but it's more natural than before and it's really fun to play with and watch, which is what I actually care about. Not only does it encourage them to correct in the direction they're already moving, but it results in some fun little leg flutters in the air and sometimes they'll somersault if they land in particular ways.





I'm definitely not done with this yet, but I'm so much happier with it now. The downside is that it's really fun to play with and I keep getting distracted with tossing them around.
Logged

GekidoRising
Level 1
*



View Profile WWW
« Reply #48 on: March 11, 2016, 06:39:41 PM »

I must say, this is the first time in a while that I've thoroughly read through an entire devlog because, by god, I absolutely ADORE genetic evolution algorithms! To see a game so heavily based on it is actually quite thrilling, and in all truth, it makes me incredibly curious. I actually have a ton of questions but I think for now, I'll settle on the one I'm most curious about.

If I'm understanding your techniques correctly, when you were originally coming up with a walk cycle, I'm guessing that you basically ran a ton of simulations, combining the most effective animations until you found one that basically met your specifications (based on what I know of evolution algorithms at least. If I'm already way off track, you might as well skip the rest of the question haha). At the same time though, you mention performing a lot of tweaks to the actual AI on top of adding entire new behaviors. The question I'm trying to arrive at here is basically, how much of the animation in this game is directly created by you versus created from evolution algorithms? For all of the new animations like the bucking and the bowing, are you manually creating these animations and then testing, tweaking, testing, tweaking, or are you basically generating a goal ("get this box off my back!") and then running a simulation until you find a behavior that does that? Or, are you doing a mix of both, creating an animation and then simulating small variations upon it until it's perfected?

This question got super convoluted really fast, so in summary, are you creating these animations or is the computer creating these animations? Or is it more complicated then that?

Also, while I'm writing up this post, regarding the voxel dog, I have to say that I kind of like it! I can definitely see, though, where others might take issue. It definitely works as a wonderful proof of concept that you can basically swap any sort of model in if need be! I must admit I'm rather curious what your final design plan is for these fellows, but it's clear that you definitely have something in mind.

To that end, I'm wondering, have you ever considered naming these placeholder fellows? It's not hugely important but it's just something I've always found fun early on haha

Anyway, all that aside, I'm definitely going to be keeping tabs here. As I've said, I've always had a huge fascination in these genetic algorithms so I'm so curious what this whole project is going to evolve into!

p.s. I read through you're entire devlog and got to the end before realizing "hey, this guy commented on my devlog not so long ago!" Wouldn't you know it, I actually discovered this devlog entirely by chance! What a neat coincidence that you happen to be working on something I find so fascinating! :D
Logged
jmaslaki
Level 0
**


Jimbobjambam


View Profile WWW
« Reply #49 on: March 11, 2016, 08:45:01 PM »

Ah god I love this.
Logged
Raku
Level 10
*****


Dream's Bell


View Profile WWW
« Reply #50 on: March 12, 2016, 03:39:07 AM »

This is mesmerizing, I need to keep an eye on this fantastic thing you're making
Logged

michelmohr
Level 1
*



View Profile WWW
« Reply #51 on: March 14, 2016, 03:21:42 AM »

I feel like there could be something lemmings-like here.
You could decide to add some type of constructions that the dogs need to transverse. It doesn't need to be your goal, but they try to do it, and you can decide on your own if you want to help them or not.
That'll give them something to do instead of standing around looking helpless waiting for you to toss them into the sky again.
Logged

Rojom
Level 0
***


View Profile
« Reply #52 on: March 14, 2016, 07:09:11 AM »

You should include a "QWOP" mode where keys can control different limb/joint movements so you can attempt to walk and hilarity ensues.
Logged
ActualDog
Level 3
***



View Profile WWW
« Reply #53 on: March 14, 2016, 03:17:40 PM »

You should include a "QWOP" mode where keys can control different limb/joint movements so you can attempt to walk and hilarity ensues.

I want to keep all control indirect for the actual game, but this is similar to my debug setup tbh!

I feel like there could be something lemmings-like here.
You could decide to add some type of constructions that the dogs need to transverse. It doesn't need to be your goal, but they try to do it, and you can decide on your own if you want to help them or not.
That'll give them something to do instead of standing around looking helpless waiting for you to toss them into the sky again.

I have a lot of thoughts about the actual gameplay, and I promise there'll be more to do than just tossing them around! That said, obstacle courses are something I've been seriously considering as a competition style element.

This is mesmerizing, I need to keep an eye on this fantastic thing you're making

Thank you so much! By the way, I've been seeing stuff from Jack the Reaper for a while now and it looks super good.

Ah god I love this.

Thanks!

If I'm understanding your techniques correctly, when you were originally coming up with a walk cycle, I'm guessing that you basically ran a ton of simulations, combining the most effective animations until you found one that basically met your specifications (based on what I know of evolution algorithms at least. If I'm already way off track, you might as well skip the rest of the question haha). At the same time though, you mention performing a lot of tweaks to the actual AI on top of adding entire new behaviors. The question I'm trying to arrive at here is basically, how much of the animation in this game is directly created by you versus created from evolution algorithms? For all of the new animations like the bucking and the bowing, are you manually creating these animations and then testing, tweaking, testing, tweaking, or are you basically generating a goal ("get this box off my back!") and then running a simulation until you find a behavior that does that? Or, are you doing a mix of both, creating an animation and then simulating small variations upon it until it's perfected?

This question got super convoluted really fast, so in summary, are you creating these animations or is the computer creating these animations? Or is it more complicated then that?

To that end, I'm wondering, have you ever considered naming these placeholder fellows? It's not hugely important but it's just something I've always found fun early on haha

Haha, glad you're into it! I'm not literally building dogs but I've been really liking the idea of just calling them "dogs" for good. There's something about using a familiar name for something unfamiliar that's really appealing to me.

Your questions about the genetics stuff are all great, and it's probably about time I do an info post on it, so here's an explanation that hopefully covers everything you're asking.

Learning to Walk

To start off with, let me just say that not all of my dogs' motions were created with genetics. In fact, as of right now, only their walk cycles are a result of the genetic algorithm. I do plan on using it for some more complex motions in the future, but it's not efficient for me to use for simpler motions like bucking, and this project is complex enough without me artificially making things harder for myself for programmer cred. Ultimately, my use of this genetics stuff is simpler than you might think. Hopefully this post doesn't take away too much of the magic.

Walking was the perfect use case for the genetic algorithm. It's a complex motion with lots of variables, and since my dogs have a limb setup that's not 100% the same as any real animal (it's similar to animals out there but all my proportions and angles are fudged), I don't even have a great reference to look at. Being able to walk requires not only moving forward, but also maintaining balance and keeping relatively straight. Manually setting up a physical walk cycle for a quadruped that works and looks relatively natural is not easy, and physically based movement is an active area of research that I am not at all up to date on or qualified to talk about. Basically, the genetic algorithm seemed like the perfect way for me to come up with a walk cycle because it seemed like it'd do most of the work for me. That didn't end up being exactly true, but I still stand by my use of it.

To start off with, let's talk about what the genetic algorithm is and how it works. Now full disclosure, I knew nothing about this stuff before starting this project, and I learned most of what I know about the algorithm from this webpage: http://www.ai-junkie.com/ga/intro/gat2.html Anyone should feel free to correct me if I'm spreading misinformation.

As I understand it, the genetic algorithm is just a way of generating and optimizing potential solutions to a problem. Applications of the algorithm can range from ridiculously easy to incredibly complex depending on the problem, but the core ideas are pretty straightforward. In order to use it, there are two main things you need to think about. The first is that you need to be able to encode a potential solution as a series of 1s and 0s. This represents a single "gene" and its how solutions will be generated, mutated, and combined. The second thing is that you need to be able to define a fitness function. You need a way to determine how good any particular solution is.

Once you have that stuff down, the cycle is relatively straightforward:

  • 1. A group of genes is selected for trial.
  • 2. Trials are run and each gene is scored accordingly.
  • 3. Genes "breed" with each other.
  • 4. Genes "mutate".

Let's break this down using my walk cycle as an example.

1. Gene selection/generation

I mentioned above that you need to be able to encode a solution. In my case, the question becomes how to derive something like this:


From something like this:

11100000010100101110110101100111110001101111011011101111100100010101011101100000010000100000100011011110110010001101010000011100

All motion in the game is physical, I don't have any actual animations playing anywhere. Every single motion comes from the joint/rigidbody setup, and from torques applied to individual dog body parts.

I currently have a secondary physics animation system in progress, but most of my existing motions, walking included, work off of curves.

Without getting into implementation details, the walk cycle you see above is a series of curves defining the amount of torque to apply to a body part at any given time. Specifically, there are 3 curves for the legs (X, Y, and Z torque curves shared among all legs but evaluated with a time offset for each individual leg), and separate Z torque curves for both the front and back body segments.

The gene you see above decodes to a series of values for each keyframe on each curve, and is the literal current gene I'm using for walking.

Simple enough, but the devil is in the details. I never had any problem getting my dogs to move forward. From the very first test of walking, I was able to squeeze forward locomotion out of the algorithm. Generating natural walk cycles was a little harder.

When given too many variables to play with, the algorithm can take an incredibly long time to come up with anything usable. And given too few constraints, the algorithm has a nasty tendency of coming up with behaviors that, while totally efficient, are also totally goofy.


This is why my final strategy for walking genes involved a shared curve for all the legs, and why the offsets for each leg's evaluation of its curve was manually set. Yes, I could've allowed those offsets to be stumbled upon genetically, but giving the algorithm some constraints made things so much more efficient. In a sense, I'm using the algorithm to turn a frame into a topiary.

That being said, I can assure you that the algorithm is still pulling its weight. This is what generation 0 looks like for walk cycle evolution.


2. Genetic Trials

After constraints are defined and genes can be generated, it's time to run the trials. In my case, this involved spawning identical dog/platform setups, giving each a gene, and telling them all to walk forward. Fitness for walking is based off of distance walked in the time allotted for each round. There are some gotchas here as well.

A fitness function for walking that scores only off of distance traveled is a recipe for disaster. My earliest tests for this mostly all devolved into somersaulting, and I ended up with a few iterations where the dogs who made it the farthest would just recklessly fling themselves forward in a balled tangle of limbs.

As a rule, the genetic algorithm will take any exploit it can find and run with it, so fitness functions for more complex behaviors need to account for these things.

In addition to distance traveled, steadiness was important for a nice walk. Dogs that tip over or smash their faces into the ground immediately cut their scores in half and lose themselves the privilege of increasing their score in the future. Since I added a good deal of constraints to the walking genes, this was all I had to do to achieve good results, but if I had left things wide open, I would've had to be even stricter with how scoring worked.

3. Breeding

After the trials have been run and all the dogs have been scored, it's time to breed. The idea here is that the more "fit" a dog is, the higher chance they have at breeding. You need to generate the same number of genes you started with for the next round of trials, but there's no limit on how many times a dog can breed. My breeding selection is just using weighted randoms for each dog. A gene's score determines its relative chance of being chosen, and other than ensuring that a dog can't breed with itself, there's not too much to it.

When two dogs are chosen to breed, there's a chance of their genetic material combining. A crossover rate is defined (in my case, there's a 70% chance of genes combining during breeding), and if it's determined a crossover should occur, a random gene index is chosen. Everything before that index comes from dogA, and everything after it comes from dogB.

So, let's say you breed two genes:

0000

and

1111

It's determined that they should combine, so first a random index is chosen between 0 and 3. In this case, index 2 is chosen. That gets us a new gene where indices 0 and 1 come from the first gene and where indices 2 and 3 come from the second:

0011

In this way, successful behaviors have a way of mingling and generating new behaviors that might have the best parts of each.

Because of the way this works, it's really important to take it into consideration when figuring out how you'll encode and decode your genes. For example, it's not great to separate dependent values too much. I have a few gene indices that act as negative multipliers, potentially reversing other values. I was careful to make sure all those multiplier indices are encoded directly next to the values they modify so that they generally stick together during breeding. If, for example, all your multipliers were grouped together at the very end of the gene, they would have a way higher chance of all changing at once when breeding occurred, resulting in a bred behavior that didn't actually resemble either of its parents too much.

4. Mutation

The final step is mutation, and it's the simplest of them all. Each new gene has a chance to mutate. This is a chance for completely new behaviors to crop up, even once things have started to even out.

The strategy here is to literally run through each index of each gene and give it a chance to flip itself. In my case, the mutation rate is very low, just 1%. The higher the mutation rate the less stable the results, so it's something to balance.

Final Thoughts

The last thing I have to say about walk cycles is the importance of leg structure and joint setup. I spent roughly 2 fulls weeks of dev time (probably over 100 hours of actual work) trying to get my dogs to walk in a reasonable way. In the end, the most important thing was structure. It sounds obvious, but the single biggest difference in how well my walk cycles came out was determined by the actual physical structure of the dogs themselves.


These are all the major dog iterations I've gone through on this project. Some involve huge overhauls, but most are just changes to leg and joint structure. One has its legs splayed outward, another has very straight front legs, another experiments with moving the legs super close together, one moves them far apart, etc, etc. Each dog in this picture was something I spent at least a full working day playing around with. Not included are the hundreds of tiny changes to joint values and limb rotations/positions not worth making entirely new dogs for. I even experimented with all that stuff coming from the genetic algorithm at one point.

The last piece of the locomotion puzzle for me was to give my dogs joint tension. Again, it seems obvious, but adding joint motors to the legs was what finally got me dogs stable enough to walk for a while without eventually turning into dead fish. Each joint has a motor with its own set of values and strengths attempting to drive the joint back to its default rotation. The motors aren't strong enough to stop movement, obviously, but they keep the limbs stable enough to deal with balance changes.


Anyways, that's it. Really hope this is interesting to someone, and that I explained things well. Happy to answer any additional questions.

Logged

Cranktrain
Level 4
****


making gams


View Profile WWW
« Reply #54 on: March 14, 2016, 04:47:55 PM »

Really good write up. Love all the dogs, even those that the evolutionary process has discarded.
Logged

Tanner Fruit Fly
Level 0
***


Tanner sticks the pen up his nose.


View Profile WWW
« Reply #55 on: March 14, 2016, 08:23:42 PM »

Wow man, what a fantastic looking project you've got on your hands here. I'm super into the idea of genetic alteration of these "dogs" and having them genetically evolve over time through breeding. That leads me into some interesting thoughts about where you could take the gameplay concept of all this...

What if you were able to take the behavioral editing and programming you're doing now in order to get these different leg variants and body behaviors, and actually create a non-programmer friendly UI for the player to be able to create creatures of their own and have them evolve genetically based on whatever parameters they've set at the beginning of the game. They could continue to breed more and more of their creature until they think they've got a prime candidate, and then have them participate in contests. Perhaps having them place in certain ranks in these competitions gives them a wider range of options in order to construct future creatures.

I hope that made sense haha Overall though, excellent stuff you've got here, really looking forward to seeing more! These test gifs give me life haha
Logged


[Check out the "This Is Jim" book on Gumroad! Head over to my devlog for a discounted promo code Wink]
ThilDuncan
Level 0
***


Indie Developer at Ghost Town Games


View Profile WWW
« Reply #56 on: March 15, 2016, 04:29:03 AM »

Excellent post! Really excited to see this game come together, can't wait to learn how you're going to apply all this magic :>
Logged

Mark Mayers
Level 10
*****



View Profile WWW
« Reply #57 on: March 15, 2016, 06:54:04 AM »

...



I don't want to use voxels for the final art, but I like the goofy dog and it was really great to be able to test out this flow. I think this type of model overlay could work really well if I decide to go that route.

Voxel dog looks interesting, but I think the 'weird goofy pink dogs' look more original.
Even if it's prototype art, I giggle every time I see a gif of them.

You could probably go Goat Simulator route and do a completely off the wall style of game.
Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
ActualDog
Level 3
***



View Profile WWW
« Reply #58 on: March 15, 2016, 06:15:23 PM »

Really good write up. Love all the dogs, even those that the evolutionary process has discarded.
Excellent post! Really excited to see this game come together, can't wait to learn how you're going to apply all this magic :>

Thanks! I'm glad it was interesting.


Wow man, what a fantastic looking project you've got on your hands here. I'm super into the idea of genetic alteration of these "dogs" and having them genetically evolve over time through breeding. That leads me into some interesting thoughts about where you could take the gameplay concept of all this...

What if you were able to take the behavioral editing and programming you're doing now in order to get these different leg variants and body behaviors, and actually create a non-programmer friendly UI for the player to be able to create creatures of their own and have them evolve genetically based on whatever parameters they've set at the beginning of the game. They could continue to breed more and more of their creature until they think they've got a prime candidate, and then have them participate in contests. Perhaps having them place in certain ranks in these competitions gives them a wider range of options in order to construct future creatures.

I hope that made sense haha Overall though, excellent stuff you've got here, really looking forward to seeing more! These test gifs give me life haha

Thank you! That concept has a ton of promise and I really like it, but it branches from what I want to focus on at this point. I have a pretty decent idea of the direction I want to take this game, and I've decided to focus very heavily on giving life to this one specific creature type rather than trying to generalize my systems. I could talk a ton about why I'm going this direction, but that might be for another time.

You could probably go Goat Simulator route and do a completely off the wall style of game.

I want the game to be kinda goofy for sure, but I don't think I wanna head too far down the goat simulator path. We'll see where I end up, but I want to make sure things stay at least somewhat grounded.

---

This project's coming up on its two month anniversary, and I figured it's about time I try to throw together something playable. It's gonna take a super long time to finish the dogs themselves, but it'd be really nice to have a little playable version of the game going in the meantime, at the very least so all that work doesn't bunch up at the very end the project. I'm giving myself a soft deadline of next Friday, but we'll see where I get.

In the interest of putting together a little demo (which I probably won't be giving to anyone yet), there's a pretty major mechanic I need to start to tackle. Learning. I want your dogs to learn and end up different depending on what they experience. Today I took the first steps towards getting this in place. I started on their brains.

Here's the end result of the first day's work on this stuff.


I know it's not that interesting without context, so here's what's going on. The one on the left has an optimal brain. Its brain is at the peak brain age. The one on the right is old. Its brain is at its lowest point. I've started in on a system that binds variables of my choosing to a dog's central brain structure, and in the above gif I've bound leg stability to the brain's age/health.

I can bind any arbitrary class-level variable to the brain by doing something like this:

private BrainFloat testFloat = new BrainFloat(75f, 95f, 20f);

The three arguments are the starting value, the ideal value, and worst possible value. On creation, brains auto-scan all of their dog's scripts for BrainVariables and register them. The vars themselves are basically just wrappers for whatever type they contain, with the trick being that they call into the brain to get their associated value. A BrainFloat is usable and callable in exactly the same ways a float is, so swapping vars with BrainVars is painless.

What this does for me is that it collects all these variables in a central location and lets me operate on them in any way I want. Right now I have a simple model for brain aging. As brains age towards their ideal age, all associated BrainVars scale towards their ideal values. As brains pass the ideal age and get older and older, BrainVars move back towards their minimum values. There's a lot more complexity I'll be adding but it's all super easy to work with so far, which I'm so so pleased about.

This also opens the doors to light brain injury/illness models. Because of the way I'm centrally indexing the vars, and because I'm careful to let all the types cast as each other, it's be easy to scramble or flip a few here and there. I'd also like to associate BrainVars with specific "regions" of the brain, which opens up way more possibilities without adding very much complexity.

Logged

Vize
TIGBaby
*


View Profile
« Reply #59 on: March 15, 2016, 08:17:44 PM »

You should add a playable character that would be able to:
push the "pets"
attempt to ride the "pets"
and more i just dont have that much ideas right now.
(love the gifs though)
Logged
Pages: 1 2 [3] 4 5 ... 37
Print
Jump to:  

Theme orange-lt created by panic