Hello Again

Hi guys, Inca here again.

I’ve returned from travelling over summer and graduated from uni this year and I’m looking to get a part time job while I save up to go travelling again and as a result will have more time on my hands than I previously had. I now have a degree in Computer Science with Game Engineering and would like to keep my skills alive until I decide to get a career job.

For those who don’t know me I was one of the original founders of the project and most of my work has been it in the opening stages. Since then I’ve dropped in from time to time with varying levels of contribution, but often found the forum a bit too unwieldy and overextended to get properly reinvolved as well as having too many demands on my time, so I’m glad to see we have moved to a more streamlined more efficient method of production.

I have experience with C++ (it was the main language we used), but not Lua, though I think it won’t be too hard to pick it up.

I’m looking forward to helping this project move forward :slight_smile:

Hi Inca! Welcome back!

Your skills are pretty much spot on for what we need. @crovea or @Moopli can help you get to grips with the code. We’re gearing up for a new release pretty soon, so we’ll take all the programming help we can get.

Sounds good. Is there anything in particular I can work on rather than just jumping in whereever? I’d rather ease myself in gently with smaller parts and be directed specifically untill I’m confident with the whole set up.

Hi Inca, welcome (back) to the team.

If you have any questions feel free to ask. Also do you like differential equations? If so there’s a tonne of stuff to do in that direction (fluid dynamics and CPA system), I’ll happily help you if you’re interested.

I wouldn’t say I like them exactly but I know how to do them and did do some work involving fluid dynamics at uni. What needs doing exactly with that, I’ll take a look?

Cool, of course you can work on what you like and I’m no programmer, so don’t feel obligated. Moreover if these feel overwhelming it might be a good idea to get your feet wet with some easier issues first.

The first problem is to improve the “feeling of being in a fluid” as you play the microbe stage. Here is the github issue about it

it’s linked with the compound clouds (at the moment there are discrete compound emitters). I believe @moopli agrees with me that a full fluid simulation is too computationally intensive to be worthwhile (especially when we move to 3D) so we’ve been thinking about a “curl noise” based approach. In the prototypes folder you can find a prototype I made for a curl noise system

basically it creates a noise field and then only lets you see it if a microbe has passed over that place recently (thereby imitating a wake). If you have any questions about it feel free to ask.

The second, much bigger, problem is to build the Compounds - Population Dynamics - Auto-Evolution system (CPA) which is a major component of the game which hasn’t really been started yet. Bascially for each “patch” (area of the ocean) we need to build a system which keeps track of what species are there, what compounds they contain, how they feed on each other (preadator-prey modelling), how they evolve over time and how they spread between patches.

Now that I am typing I realise how huge that job is so if you want to go in that direction then great, but make sure you take on a challenge which is the rights size at first. I’m sure @moopli or @crovea can give you something nice to get started with.

To be honest they both sound a bit above me, though I will have a think about the fluid sim issue.

Just having a look at the code, where theres this bit

generate noise for the potential field, this is where I don’t really know what I’m doing

def generate_psi(self):
noise = math.sin(timeself.iself.j/50)
self.psi = noise

Whats the problem here?

Sure, I thought I’d offer in case they were your kind of thing. You may find it more fun to program more “gamey” things.

So at this point a nice Perlin noise would be nice, https://en.wikipedia.org/wiki/Perlin_noise

which looks natural and random. It would give the fluid a nice “fluidey” feeling. However I didn’t want to go to the trouble of installing a library so I just used that simple sin function. Really it should be the sum of a lot of different frequencies chosen at random. So what I’ve done is an approximation of what would be good to have. In the proper version I don’t think it should be too hard to find a nice perlin noise package to generate the noise, I don’t know, something like this


I think the rest of the prototype works ok.

I can implement Perlin Noise if you want, or could try Simplex as that removes the tendancy for straightlines in the noise (which results in squarish hills etc). For this purpose though, we could use Value Noise, which has a lower quality of noise, but I think is more than sufficient for what we’re trying to do here. I believe it less computationally expensive. I have a value noise function ready to go if we want to use that?

Awesome :smile:

If you want to upgrade the prototype then that is cool. If you want to put it in the game you’ll need to talk to the other programmers about the specs for it (there needs to be a rolling grid for both this and compound clouds I believe) and make sure they are happy with the noise you’re proposing. Have you been invited to Slack yet? That’s a good place to discuss this stuff. If you haven’t I’ll ask moopli to send you an invite.

No I haven’t. I’ll see whats its like in the prototype in a bit then.

Yeah great, would be really nice to see how it looks with better noise. Here is the video of how it looks now.

and here is the thread about it

Just gonna weight in on a few things:

  • Welcome (back)!
  • Simplex and Perlin noise are way above our requirements, we only need it to be smooth and noisy. Having a few octaves of noise is nice, but not necessary.
  • Ages ago I wrote a simple datastructure to let us, essentially, index points in a 2D lattice in space, where only the data for points near the player are maintained. I was planning on using this for the compound clouds, but never got around to it. So, if you have a noise function that doesn’t need to operate in large blocks, you can use that. I think value noise is fine in this respect.

If you want to work on CPA, much of it will be architecture/refactoring work at first. This is stuff I was doing a few months ago before the dependency upgrades broke my build, so I could help you get started easily.

  • Refactoring the process code to make it more physically-realistic and add some rate-control parameters
  • Refactor microbe definitions into some Lua scripts, I almost had this finished, probably not too hard
  • Finish up the basic population object code, make compound data get updated by microbes
  • Clean up the microbe initialization code to use the species for body plan and population for compounds
  • Assorted refactoring to finalize the tying-together of compound and population parts of CPA
  • Implement Auto-Evo

Now, CPA is definitely a big task, so you don’t have to dive into it. I’ll be working on it again once I get a chance to fix my builds, maybe you could help with that, idk. There are always other things to do, you can ask @crovea.