Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411512 Posts in 69376 Topics- by 58430 Members - Latest Member: Jesse Webb

April 26, 2024, 08:12:14 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsProject Rain World
Pages: 1 ... 149 150 [151] 152 153 ... 367
Print
Author Topic: Project Rain World  (Read 1447280 times)
AxezDNyde
Level 0
**


View Profile
« Reply #3000 on: February 26, 2015, 01:08:49 AM »

Code:
public class Water(){
//These are the parameters used by the surface simulation. Expect to spend at least a day tuning them haha
     float   dx = 0.0005f * 20f;
     float   dt = 0.0045f;
     float   C = 1f;
     float   R = C * dt / dx;


     surface = new SurfacePoint[100];
     for(int i = 0; i < surface.Length; i++)
         surface[i] = new SurfacePoint();
}


public class SurfacePoint
{
   height = 0f;
   lastHeight = 0f;
   nextHeight = 0f;
   public SurfacePoint()
   {
   }
}

public Update(){
 float averageHeight = 0f;

        for (int i = 0; i < surface.Length; i++) {

            //This here is the fancy math from the paper, which I don't claim to understand in the slightest :P
            if (i == 0) { //special case first point
                surface[i].nextHeight =
                  (2f * surface[i].height + (R - 1f) * surface[i].lastHeight +
                  2f * Mathf.Pow(R, 2f) *
                  (surface[i + 1].height - surface[i].height)) / (1f + R);
            }
            else if (i == surface.Length - 1) { //special case last point
                surface[i, 0].nextHeight =
                    (2f * surface[i].height + (R - 1f) * surface[i].lastHeight +
                    2f * Mathf.Pow(R, 2f) *
                    (surface[i - 1].height - surface[i].height)) / (1f + R);
            }
            else {
                surface[i].nextHeight = Mathf.Pow(R, 2f)
                   * (surface[i - 1].height + surface[i + 1].height)
                   + 2f * (1f - Mathf.Pow(R, 2f))
                   * surface[i].height - surface[i].lastHeight;
            }

            surface[i].nextHeight *= 0.99f; //points should slowly tend towards 0, or the water level will change over time

            averageHeight += surface[i].height;

        }

        averageHeight /= surface.Length;

        for (int i = 0; i < surface.Length; i++) {
            surface[i].lastHeight = surface[i].height; //This line here is the necessary line. Below is some stuff I came up with to stabilize the system, it tended to flip out in some scenarios
            float h = surface[i].nextHeight - averageHeight;
            if (i > 0 && i < surface.Length - 1) h = Mathf.Lerp(h, Mathf.Lerp(surface[i - 1].nextHeight, surface[i + 1].nextHeight, 0.5f), 0.01f);
            surface[i].height = Mathf.Clamp(h, -40f, 40f);
        }
}

Two cents regarding this water surface algorithm:

 - Did you try using three separate arrays for nextHeight, height and lastHeight and simply swap pointers after each iteration instead of copying (last for loop) ? It's probably just a couple hundred (?) values in these simulations but hey, cheaper is cheaper. (You would also have to move the dampening code you introduced to stabilize the system further up and use averageHeight from the previous iteration)

 - The other cent is just an attempt to make you understand this equation:
Let's ignore the border cases for the left- and right-most indices, they do the same as the other just atking into account that there is only one neighbor to them. What happens in hte main part is:
Code:
surface[i].nextHeight = Mathf.Pow(R, 2f)
    * (surface[i - 1].height + surface[i + 1].height)
    + 2f * (1f - Mathf.Pow(R, 2f))
    * surface[i].height - surface[i].lastHeight;
On the upper level, this is a linear interpolation of A and B:
Code:
Mathf.Pow(R, 2f) * A + (1f - Mathf.Pow(R, 2f)) * B;
In words, A is the spatial derivative of x. ( It's also the inclintion of the tangent in s(i). Also the central difference in FEM. Just different interpretations of the same thing ). And B is the derivative in time. ( How much did the water level at s(i) change in the last step. Anyway, what happens is that the factor R decides how much of the old "velocity" (change in water level) in point s(i) is maintained or how much the point is smoothed to become the average of its two neighbors. A is the average of the two neighbors, with the division by 2 missing, so it introduces a factor of two, that's probably why there is a factor of 2f in B, so the weights are equal. But I don't get it here, it seems to me the system in total adds a factor of two. ( That's energy introduced without a source and, hence, bad for simulations. )
After that,
Code:
surface[i].nextHeight *= 0.99f;
just dampens the water to account for friction and such ( let's be honest, this just helps stabilizing the system. ).
What I also want to point out, that the 4 Parameters dx, dt, C, and R are really just one parameter that needs to be tuned. dx should be set by the distance of the surface points ( grid size ) and dt by the time you want to move on per step. C then defines something akin to viscosity I believe and is the only parameter you should vary. R just depends on the previous values.

Oh well, I think that helped me understand it more than you. Now I really would like to take a look at that paper to see how they explain it...

...maybe you will find it again sometime...
Logged

Axez, Grant Ed.
jamesprimate
Level 10
*****


wave emoji


View Profile WWW
« Reply #3001 on: February 26, 2015, 02:14:33 AM »

I was thinking earlier that you could probably incorporate the old lingo red bubbles in some exclusive sand box levels which wouldn't necessarily have to be bound with the same cohesion as the rest of the world.

I think they could make it in one way or another, they'd just look a little different! The old ones had some sort of early 2000's free flash game look to them with the radial gradients and all, I can probably do better now.

you know, i hadn't really even considered the bubbles, but they do bring an entirely new (and fun!) gameplay mechanic relatively easily. i could see them potentially fitting very well in the design of at least 2 upcoming regions, plus as you say having them in multi / sandbox would be super fun. They've got my vote!
Logged

oahda
Level 10
*****



View Profile
« Reply #3002 on: February 26, 2015, 03:46:14 AM »

my source code for the water stuff
Seems we're doing similar stuff (using "surface points" (called "impacts" in my implementation)) with a couple of "fine-tuned" constants/parameters. Only my code is much shorter as it is in no way based on any real physics or attempts at writing a correct simulation – I simply improvised it and it looked OK. Tongue

Mine is just basically a limited list of "impacts" generated when something hits the surface, which holds an x position, a width and height of the wave and a timer for how long the wave should last and then all parameters but the timer are passed to the shader (all parameters decreasing as the timer increases) and the fragment shader loops through the impacts and draws the surface at different heights depending on the fragment's distance (with the camera's position taken into consideration of course, in order to get a world coördinate) from each point.

The code is basically illegible at the moment, so there's no point in posting it, but here's the simplicity of the shader's struct:

Code:
struct ImpactSurface
 {
float x;
vec2 size;
 };

And simplified the process goes like this:

Code:
float addMin = 1.5;
float addMax = addMin;

for (int i = 0; i < countImpactsSurface; ++ i)
 {
float fade = /* distance from current impact's center between 0.0 and 1.0 */;
addMax += max(addMin, impactsSurface[0].size.y * fade); // size.y is the height of the wave
 }

addMax = min(50.0, addMax);

// Then addMax is used as a factor and eventually the code generates a smooth transition between the heights for each fragment.

Then in the C++ there's this:

Code:
for (UInt i(0); i < m_impacts.size(); ++ i)
 {
m_impacts[i].timer.tick();

if (m_impacts[i].timer.time() >= m_impacts[i].time)
{
m_impacts.erase(m_impacts.begin() + (i --));
continue;
}

// ... Fetching GLSL uniforms here.

const Float f{static_cast<Float>((m_impacts[i].time - m_impacts[i].timer.time()) / m_impacts[i].time)};

glUniform1f(uX,    m_impacts[i].x);
glUniform2f(uSize, m_impacts[i].size.x * f,
  m_impacts[i].size.y * f);
 }

-----

No need to comment on this, AxezDNyde – it's not an attempt at realism. c;

Maybe I can get something out of reading your code, JLJac, and AxezDNyde's comments on it, either way, tho – so thanks! Coffee

-----

Here's the current result of my code, which doesn't look as amazing as yours, but at least gives the player input that the water is reacting:

http://i.imgur.com/QKQJjP1.gif

But I think values can be tinkered with, and particles as well, in such a way that it ends up looking reasonably good. For never having done this before, I'm pretty happy to have gotten this working in a couple of hours!

Anyway, the code interpolates between each impact, so I don't need to supply a bunch of points. Two impacts of different magnitudes in close proximity will look smooth in between – the shader does the rest of the work.
Logged

AxezDNyde
Level 0
**


View Profile
« Reply #3003 on: February 26, 2015, 11:24:32 PM »

No need to comment on this, AxezDNyde – it's not an attempt at realism. c;

 Who, Me? Feel free to ignore my blabbering. Just don't tell me what to do.  Cool

That said, Hand Joystick Durr...? Toast Right

Also, where's more Rain World GIFs?
Logged

Axez, Grant Ed.
JLJac
Level 10
*****



View Profile
« Reply #3004 on: February 27, 2015, 01:42:57 AM »

@AxezDNyde Thanks for the explanation! I have a way better understanding of what's going on now. Love this sort of devlog interactivity  Grin Hand Shake Right

The *= .99 was actually added by me, for exactly the reason you mention Smiley I know the solution could be more slimmed, but actually the code I posted here was cleaned up, in my actual implementation I'm saving some other stuff as well for the surface points, why I'm keeping them as classes.

@Prinsessa, looking good! Really interesting to see how you use a different method to achieve a similar result. When you're done tinkering I'm sure we're all eager to know the result, is Gabe a witch?   Who, Me?

Update 402

Lizard infighting! This has taken the entire day, but I think I'm getting somewhere. The actual animation, i.e. how the lizards move, still needs polish, but the more general behavior seems solid enough.



Basically it goes like this - the lizards have an AgressiveRival relationship towards each other, of varying intensity. They're mostly aggressive towards others of the same breed. As they move around, they can get annoyed with each other, because of various reasons. If they're very aggressive, just because the other is too close, otherwise in situations such as the other being too close to the prey they're hunting, and in particular when they bump into each other and block each others' path.

If the annoyance goes high enough so that it's picked by the utility comparer, a Fight behavior is initiated. As this is mostly a display of dominance it's not really as much fighting as hissing, but if they end up in a narrow space it might get ugly.

When fighting, the lizard has a chance each frame to to send out a signal. I've set up a rudimentary system for inter-lizard communication, right now there are only two types of signals Aggressive and Submissive. The angrier the lizard is, the more Agressive signals it's sending to the other. On receiving an Aggressive signal, the receiving lizard's annoyance is also incremented, making it more likely to return the Aggressive signals, and that way the conflict escalates. However, there's also a small chance upon receiving an Aggressive signal to return a Submissive signal.

When a lizard sends a Submissive signal, the conflict is de-escalated, and the submissive individual gets tasked with leaving the room. For this I had to set up a new AI module called Mission Tracker, which will come in handy for a lot of stuff. The Mission Tracker can basically keep track of a bunch of tasks an AI entity has set out to do, such as travelling somewhere, or maybe in the future to hunt down a specific individual, search a specific room, or similar. The Mission has a utility, and if something happens to the lizard with a higher utility the mission can be dormant for a while, and then continued later. This means that now a lizard can for example be headed somewhere, but be interrupted by a threat, flee for a little while, and then when it's safe continue its Mission.

At the moment there's just one Mission implemented, which is to get out of a room. When the mission is activated a neighboring room is chosen, and the lizard starts to move there. Actually it tries to move two rooms away if possible, which will scatter the lizards all over the world to James' delight haha! James is generally trying to shape the play experience with level design, but my unpredictable critters tend to get in the way of that  Cheesy Maybe if it's too crazy I'll have to take a step back on that.

Anyhow, all of this basically boils down to a pretty simple behavior - the lizards will hang out, but occasionally get annoyed with each other, do a lot of hissing and maybe a little fighting, until one of them decides to scram with its tail between its legs. Hope this interactivity will make the game feel more dynamic and fun.
Logged
Dohman
Level 0
*


View Profile
« Reply #3005 on: February 27, 2015, 02:39:18 AM »

In order to contain the lizards, and other critters, why don't you add feeding grounds, places where there's more food of a specific kind?
It would make it preferable for lizards for example to stay in one area, it would induce conflict around the food, some of the lizards could be forced to leave, having to live a difficult life away from where the majority of the food is.
I don't know if your critters can starve yet, but starvation and survival can go a long way in programming AI.

There was this video on youtube, where some scientists had programmed some robots with AI, to have exaggerated competitive behaviour. They had to find food, and they wanted to do so very badly.

At one location, there'd be food, on another, poison.

They were programmed to help each other, by turning on a blue LED if they knew where the food was, or if they could see another robot with it's LED on, in the end, they would all end up at the same location, 'eating'.
After a few tries, they adjusted their behaviour, some of would not turn on the LED, even if they knew where the food was.
In the end, they became aggressive too..


The feeding ground wouldn't have to be static though Tongue


Depending on what would be the lowest chain in the food chain, you could place that at specific places. If it's a plant, it'd be static, forcing all herbivores to feast at those places. The hunters of those herbivores would then be attracted to that place, because they desire to have food. There may or may not be enough food for all of the hunters, so competition within the hunters begins. Some will be forced to leave, some will stay.

It would be like a living ecosystem.


I don't know if any of this is in, or even planned, but I think it'd be a good way to contain your critters to certain areas (mostly) and it would also bring some more dynamic gameplay to the game (I think)
Logged
AxezDNyde
Level 0
**


View Profile
« Reply #3006 on: February 27, 2015, 02:43:59 AM »



Thx for the eye-candy!  Kiss

I notice some heat-haze like refraction going on, but it's too subtle to point my finger at it. Basically I see some pixels shifting position. What's causing it?

The depth impression caused by the shadowing of the passing clouds is remarkable in this shot. I think it's largely due to the perpendicular wall on the right edge.
Logged

Axez, Grant Ed.
Christian
Level 10
*****



View Profile WWW
« Reply #3007 on: February 27, 2015, 04:26:34 AM »

Will different lizard species behave differently towards eachother in terms of infighting? Like the purple lizards were already the wild frenzied type, but what about the passive white lizards? Would they snap eachother like that as well

What about vulture infighting? They sound like solitary predators, but you have examples in nature of lions or bears fighting when one male enters another's territory
Logged

Visit Indie Game Enthusiast or follow me @IG_Enthusiast to learn about the best new and upcoming indie games!
DarkWanderer
Level 3
***



View Profile
« Reply #3008 on: February 27, 2015, 07:27:09 PM »

If they accidentally attack each other would that make things more than a hissing match? (Like Christian) I'm also curious as to the hierarchy of species interrelations. Like that gif you posted with the two whites ganging up on the blue. Say the blue annoyed a white, would it be safe to assume it'd be way more submissive knowing it can't take the white on? & would the white be more inclined to actually aggress against it because it doesn't view it as an equal?
Logged
JLJac
Level 10
*****



View Profile
« Reply #3009 on: February 27, 2015, 08:11:08 PM »

@Dohman, we do have a similar system planned, where James will be able to define what rooms are considered attractive hunting grounds! Keep in mind that we're doing two things here, we're making a terrarium-like thing for sure, but also a game, so we are going to use some tools to shape the experience. For example it's more fun to encounter lizards in actual rooms rather than narrow corridors and stuff like that, and it also makes more sense for them to hang out there, which is why we're going to have them gravitate towards certain areas. Once that happens though, the dominance struggle will set in and some of them might have to settle for less attractive territories.

When it comes to the actual nutrition web part of the ecosystem, we're not doing that. There might be some starvation-like mechanism down the road, probably manifested in an increasing desperation for food, but we're not aiming to make a proper simulation of an ecosystem - it would just not be possible to keep it stable, and the effort would be humongous with really no payout in terms of player experience. As a scientific research project or something I'd love to go down that road, but here we're aiming to create an experience rather than an accurate simulation.

@AxezDNyde thanks! The refraction stuff is a little detail in the shader, the idea was that it was supposed to make stuff look wet, but I don't really know if it accomplished that haha! It still makes the environment looks more dynamic and alive though, so it'll stick around Smiley

@Christian, yup, they have different degrees of aggression towards members of the same breed and members of other breeds. Right now it looks like this:

Code:
        EstablishRelationship(CreatureTemplate.Type.PinkLizard, CreatureTemplate.Type.PinkLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.4f));
        EstablishRelationship(CreatureTemplate.Type.PinkLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.15f));
        EstablishRelationship(CreatureTemplate.Type.PinkLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.2f));
        EstablishRelationship(CreatureTemplate.Type.PinkLizard, CreatureTemplate.Type.WhiteLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.25f));

        EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.PinkLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.2f));
        EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.8f));
        //   EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.2f));
        EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.WhiteLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.05f));

        EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.PinkLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.3f));
        // EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.15f));
        EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.45f));
        EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.WhiteLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.25f));

        EstablishRelationship(CreatureTemplate.Type.WhiteLizard, CreatureTemplate.Type.PinkLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.15f));
        EstablishRelationship(CreatureTemplate.Type.WhiteLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.05f));
        EstablishRelationship(CreatureTemplate.Type.WhiteLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.35f));
        EstablishRelationship(CreatureTemplate.Type.WhiteLizard, CreatureTemplate.Type.WhiteLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.25f));

        EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Eats, 0.25f));
        EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Afraid, 0.25f));

But it still needs a lot of balancing, this is just something I quickly threw together. When the individual treats come around that will weight into it as well, some individuals might be more aggressive etc. In general this system could need some refinement, with separate parameters for a bunch of stuff, but it seems good enough for now!

@DarkWanderer, yeah there is occasional actual biting and stuff. Particularly if they end up fighting in a very enclosed area it might get bad. The white lizards actually won't be eating the blues, that was just a mocked up situation for fun. But in general, yeah, they have some knowledge about who's bigger, and they should be taking that into account even more as the system gets a little polish.
Logged
DarkWanderer
Level 3
***



View Profile
« Reply #3010 on: February 27, 2015, 09:54:15 PM »

IRL Lizards do these kinds of pushups when they're trying to establish dominance over an area & ward off other lizards




Maybe the more aggroed/dominant lizard could do this, in between hissing or even while hissing.
Alternatively once Lizard B decides to leave the area, the game could register that information with Lizard A, thereby queuing this mannerism (& making it organically look like Lizard A established dominance & Lizard B decided to leave)
Logged
Woodledude
Level 0
***

What does this text field do?


View Profile
« Reply #3011 on: February 28, 2015, 01:23:49 AM »

Hey there, long time fan, relatively new reader - I've been devouring the thread, and I've read a lot about Rain World and your design philosophy and decisions, though I may be missing a few things, particularly between your first year and most recent months of working on the project. So, uh... Hi.  Shrug

Anyway, I registered an account here because I was particularly interested in this new topic, the whole thing about lizard infighting. I really like the idea of lizards getting annoyed and getting into scuffles, and I started thinking about it... It makes sense for big, bad lizards with a lot of health to get into fights, but one thing I was thinking about is that often in the animal kingdom, an injury is a big deal. You don't want to take damage to an eye, for instance, because that could potentially turn into a long-term crippling injury, not to mention infection.

I suppose my point in bringing this up is that I really like the idea of infighting and scuffles, but I think it might be a nice touch not only to make some lizards less aggressive and more easily intimidated or what have you, but also have them deal with rivalries in different ways. For instance, maybe the weaker Blues would dance (such as suggested by the comment above) instead of getting into a fight, leading to dance-offs between two Blues, and so on. Another thing is a lizard trying to make itself look big - Short of adding new animations for frills and such, one thing you might do is have certain lizards do handstands to try an increase their apparent size, to try and out-intimidate their opponent. I think that in particular would be an interesting touch that would translate well to the game, at least visually, and it would be interesting to come across, too.

I realize as I'm writing this that this might ultimately be a bit superfluous, being something a player might not necessarily encounter all that much, but I just thought I'd put in my two cents to the discussion. At any rate, I think the whole idea of specialized code for lizard rivalries is a wonderful touch just by itself, and I'm really excited for the game and its ideas in general.  Grin
Logged

Fledgling game designer. Be prepared for walls of text with little coherency and much rambling. Thank you for your time, and tell me what you think.
Christian
Level 10
*****



View Profile WWW
« Reply #3012 on: February 28, 2015, 05:54:54 AM »

^^^To add to your ideas, perhaps each lizard species could have a unique fight for dominance that revolves around their unique traits.

- A blue lizard fight would involve a kind of tug of war with their tongues, like how bears wrestle
- The white lizards could use their camoflauge skill to flash bright colors at rivals, like peacocks showing off their feathers.
- Greens would charge at each other and test their strength by head-butting , like how mountain goats lock horns
Logged

Visit Indie Game Enthusiast or follow me @IG_Enthusiast to learn about the best new and upcoming indie games!
theEasternDragon
Level 0
***


Rocket-powered hype train


View Profile
« Reply #3013 on: February 28, 2015, 09:17:36 AM »

^^^To add to your ideas, perhaps each lizard species could have a unique fight for dominance that revolves around their unique traits.

- A blue lizard fight would involve a kind of tug of war with their tongues, like how bears wrestle
- The white lizards could use their camouflage skill to flash bright colors at rivals, like peacocks showing off their feathers.
- Greens would charge at each other and test their strength by head-butting , like how mountain goats lock horns

I particularly like the head butting idea for the greens...
Logged
Woodledude
Level 0
***

What does this text field do?


View Profile
« Reply #3014 on: February 28, 2015, 01:16:49 PM »

^^^To add to your ideas, perhaps each lizard species could have a unique fight for dominance that revolves around their unique traits.

- A blue lizard fight would involve a kind of tug of war with their tongues, like how bears wrestle
- The white lizards could use their camouflage skill to flash bright colors at rivals, like peacocks showing off their feathers.
- Greens would charge at each other and test their strength by head-butting , like how mountain goats lock horns

I particularly like the head butting idea for the greens...

I'm not so sure how the head butting would work for the Greens, seeing as they're the slow, lazy ones - They haven't the speed or initiative for charging, I'd think. If they did have infighting, it seems like wrestling would be their thing - Standing up on their hind legs and trying to push each other over, if not the regular fighting behavior that's already been shown.

EDIT: Beyond that, though, I like the idea of Whites color-flashing each other. I admit I imagined my own handstand idea for the blues, but a tongue tug-of-war crossed my mind... The only issue with that being that in some situations, it would be potentially lethal, such as high on some poles. Remember that this infighting behavior can happen pretty much anywhere a lizard can be reasonably expected to be.
« Last Edit: February 28, 2015, 01:31:45 PM by Woodledude » Logged

Fledgling game designer. Be prepared for walls of text with little coherency and much rambling. Thank you for your time, and tell me what you think.
Christian
Level 10
*****



View Profile WWW
« Reply #3015 on: February 28, 2015, 01:43:43 PM »

Greens are slow to a point. When they get near slugcat, green lizards charge forward with unexpected speed.
(I've played the backer alpha)
Logged

Visit Indie Game Enthusiast or follow me @IG_Enthusiast to learn about the best new and upcoming indie games!
Woodledude
Level 0
***

What does this text field do?


View Profile
« Reply #3016 on: February 28, 2015, 01:56:48 PM »

Yeah, I just read about that, actually. Still catching up on the devlog, I'm afraid - Been reading it both ways and trying to meet in the middle. With that information, the headbutting makes a lot of sense, and I certainly like the idea.
Logged

Fledgling game designer. Be prepared for walls of text with little coherency and much rambling. Thank you for your time, and tell me what you think.
akryl9296
Level 0
**



View Profile
« Reply #3017 on: March 01, 2015, 04:12:56 AM »

When it comes to the actual nutrition web part of the ecosystem, we're not doing that. There might be some starvation-like mechanism down the road, probably manifested in an increasing desperation for food, but we're not aiming to make a proper simulation of an ecosystem - it would just not be possible to keep it stable, and the effort would be humongous with really no payout in terms of player experience. As a scientific research project or something I'd love to go down that road, but here we're aiming to create an experience rather than an accurate simulation.

Too bad :< This could be very interesting to play in actually. And it wouldn't need any control except initial population control and difficulty in hunting - but that'd require reproduction system as well. It would self-regulate then, like in nature x)
Logged

RainWorld alpha map: 141220
Teod
Level 1
*



View Profile
« Reply #3018 on: March 01, 2015, 06:42:47 AM »

Too bad :< This could be very interesting to play in actually. And it wouldn't need any control except initial population control and difficulty in hunting - but that'd require reproduction system as well. It would self-regulate then, like in nature x)
Self-regulation works in nature because of adaptation and a very large scale. In simulation if by circumstances one species is wiped out (which is quite possible on a mere few hundreds of screens and with player interference) the whole thing is likely to fall like a house of cards. It would be a lot easier to create illusion of natural ecosystem using simpler algorithms. If it looks like it works, does it matted what's under the hood?
Logged
Noogai03
Level 6
*


WHOOPWHOOPWHOOPWHOOP


View Profile WWW
« Reply #3019 on: March 01, 2015, 09:55:10 AM »

didnt read this for ages and omg the difference... last i read you were struggling with unity porting and everything was chunks of C# code but now you've worked it out and your genius is really getting going... wow  WTF
Logged

So long and thanks for all the pi
Pages: 1 ... 149 150 [151] 152 153 ... 367
Print
Jump to:  

Theme orange-lt created by panic