Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411420 Posts in 69363 Topics- by 58416 Members - Latest Member: timothy feriandy

April 18, 2024, 12:06:12 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsEnso - A planetary twin-stick shooter, with space combat
Pages: [1] 2 3
Print
Author Topic: Enso - A planetary twin-stick shooter, with space combat  (Read 13341 times)
bithead
Level 0
**



View Profile WWW
« on: February 28, 2015, 01:21:08 PM »


Enso
Genre: Twin-stick shooter, space combat
Target Platform: Windows
Features:

  • Fly your ship around a procedural generated galaxy
  • Battle robots in space, and on planets
  • Collect scrap for trade
  • Upgrade weapons, ship, etc.

Backstory

During a golden era of technological advancement, and interplanetary colonization, the human race is now face-to-face with it's own extinction. A horde of sentient robots have emerged from a nearby wormhole, and are systematically killing and enslaving every last human. Our last hope remains in a resistance network of freedom fighters.

About Development

I'm developing Enso alone in C++ using a custom engine, because I'm old school, and I enjoy suffering. The planets are generated on the fly using an algorithm which creates a stylized cartoon appearance, using elevation "slices" based on a height map.

Youtube video




« Last Edit: September 20, 2015, 05:33:30 PM by bithead » Logged

lagdog
Level 0
**



View Profile
« Reply #1 on: March 01, 2015, 02:25:12 AM »

this looks amazing, feels like it has a ton of potential
Logged

Swaelo
TIGBaby
*



View Profile WWW
« Reply #2 on: March 01, 2015, 02:41:18 AM »

This looks really cool, how long have you been working on it?
What happens if you try to exit your ship outside the atmosphere?
Logged
bithead
Level 0
**



View Profile WWW
« Reply #3 on: March 01, 2015, 01:40:46 PM »

this looks amazing, feels like it has a ton of potential

Thanks! The hardest part right now feels like narrowing down the possibilities to something realistic for a one-man team, heh.

This looks really cool, how long have you been working on it?
What happens if you try to exit your ship outside the atmosphere?

Thanks! I started working on it probably 3 years ago, developing the procedural planet generation. Wasn't really sure which direction to go with it, so I put it on the back burner for a while. I've decided to complete a game with it, and document the experience.

I regret to say you cannot leave the ship unless you are grounded. I'd really like to add some kind of EVA/spacewalk stuff, but to keep the scope realistic the planned modes of gameplay are currently the starmap, piloting the ship, walking on the planet, and possibly some kind of top-down Smash TV style dungeon gameplay.
« Last Edit: May 29, 2015, 06:49:31 AM by bithead » Logged

yuotta
Level 0
**


View Profile
« Reply #4 on: March 01, 2015, 05:02:57 PM »

This looks so cool, definitely following!
Logged
bithead
Level 0
**



View Profile WWW
« Reply #5 on: March 04, 2015, 07:16:32 AM »

Experimenting with Bullet Physics, which I'll be using for space flight/battles.


Logged

TonyManfredonia
Level 6
*



View Profile WWW
« Reply #6 on: March 04, 2015, 04:21:58 PM »

I love the style, graphically speaking.  It's quite beautiful and very elegant!
Logged

Composer | Orchestrator
Website
Twitter

Soundtracks include:
Kharon's Crypt
Call of Saregnar
wccrawford
Level 3
***



View Profile
« Reply #7 on: March 05, 2015, 05:34:04 AM »

You had me a "planet-exploring".  Smiley  Looking forward to more of this one!
Logged
Christian
Level 10
*****



View Profile WWW
« Reply #8 on: March 06, 2015, 04:23:12 PM »

Love the look of this, especially that seamless space-to-landing GIF. Following, can't wait to see more
Logged

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


?!?! ... It's just a box.


View Profile WWW
« Reply #9 on: March 06, 2015, 08:37:43 PM »

This looks really impressive! love the style of the planets with the colors and clouds around it, really appealing. And the perspective is very interesting when you're on the ground with the spherical terrain. Very very cool! Eager to see more.
Logged

acatalept
Level 1
*



View Profile WWW
« Reply #10 on: March 07, 2015, 06:26:11 AM »

This looks great, love the whole low poly tiny planet thing, reminds me of playful, accessible Planetary Annihilation.  And I'm amazed that this is all in a custom engine.  Nice work, can't wait to see where this goes!
Logged

bithead
Level 0
**



View Profile WWW
« Reply #11 on: March 07, 2015, 07:25:08 PM »

Weekly Update #1

Thanks for all the encouragement, everyone!

This week I worked on refactoring some of the prototype code. My goal was primarily to push the planet generation code into a background thread. It's not apparent in the video, but it can take several seconds to generate a planet, and I really wanted to keep the smooth transitions from the Star Map into gameplay.

Since I don't have much new stuff to show, I figure it's a good time to go talk about how the planet generation algorithm works, which was the basis for this whole game.

Procedurally Generating Cartoon Planets

I wanted to generate planets that could be used for a very stylish, non-photorealistic look. It needed to have clean, smooth shorelines, and raised/extruded landmasses, giving a fun exaggerated look, like these example references:


The "Videogame Planets" video by Tim Hijlkema was also an inspiration. If you haven't seen it, it's worth checking out:




In all of these references I made a mental list of qualities I was looking to emulate:

  • Hard edges on shorelines, and cliffs
  • Visually distinct regions (grass, sands, water), no blending
  • Bright primary colors, with few or no textures

The traditional way of creating a planet is deforming a sphere with a displacement map, or a noise function. The concept is fairly easy. Subdivide a cube, or icosahedron to a desired tessellation. Then, offset each vertex along it's "up" vector (the vector from the center of the sphere to the vertex, which is really just it's normalized position) by a height value -- generated by a noise function, or a cubemap lookup. The problem is, this is really just a heightmap, which is really just a grid. Large variations in heightmaps create funny edges, and there was no nice way of getting those distinct edges I wanted between regions.

Elevation Slicing and Extrusion

After a lot of experimentation, I eventually came up with the idea of slicing the planet into layers based on elevation, like a contour map.

My process is as follows:

  • Generate an icosahedron
  • Subdivide icosahedron using basic 1-to-4 "mid-point split" algorithm N times to create a sphere
  • Using 3D simplex noise, assign a height value to each vertex, and translate it along it's "UP" vector (which is just it's normalized position, relative to the sphere center)
  • Define a set of slicing "elevations"
  • For each face of the planet that fall entirely above/below a slicing elevation, store them into corresponding containers
  • If a face intersects a slice threshold, it needs to be split:
         - Only one of the 3 verts will be on the opposite side of the slice threshold, meaning 2 edges need to be split
          - Split the edges by adding new vert where the slice intersects the edge, based on height of the two end verts
          - Generate the new faces, and put them into the corresponding containers
          - Store the new edge that has been created (between the 2 new verts) in a linked-list of edges


The last thing that needs to be done is to order the edge lists, so they are consecutive, and form closed loops.

Now that the planet is sliced into layers, based on elevation, we can extrude the layers. Extruding is as simple as offsetting the layer's verts along their "up" vectors by some extrusion amount. Then, using the edge lists, generate quads that connect the edges of the layers together, to fill the gaps. The cool thing about the edge lists is that they can also be used to create shorelines, overhangs, or even as a path for geometry to follow.


Early development screens: geometry follows the edge loops to create cliff walls.



Shoreline UVs animate (left) and wireframe view after slicing planet (right)

I generate the white shorelines by creating a series of quads along the edges of the layers. The U component of the texture coordinates are accumulated around the loop, so they can be scrolled using a texture matrix animation.

Finally, the layers are populated with grass, trees and rocks (and whatever else) by iterating over a layer's faces, and placing a mesh near the center of the face, oriented to it's normal. I use a noise function to vary the density, and jitter the mesh locations slightly so it doesn't look completely uniform.

Next week I'm hoping to get physics integrated, at least enough to move forward with more gameplay prototyping. Thanks for reading!
Logged

Mef
Level 0
***


8 bit massacre!


View Profile
« Reply #12 on: March 08, 2015, 02:31:05 PM »

Posting to follow.
 Durr...?
Logged

"Stand rigid for the next battle
Peace means reloading your guns
The love for life is all hatred in disguise
A carnival creation with masks undone"
1kW
Level 0
**


View Profile
« Reply #13 on: March 11, 2015, 04:06:21 AM »

Posting to follow too Crazy
Logged
Fenrir
Level 3
***



View Profile WWW
« Reply #14 on: March 11, 2015, 04:14:14 AM »

This is definitely promising, will foolow too! Smiley Are all planets the same size?
Logged

bithead
Level 0
**



View Profile WWW
« Reply #15 on: March 11, 2015, 11:17:09 AM »

This is definitely promising, will foolow too! Smiley Are all planets the same size?

Thanks Smiley The planets will vary in size, but they will be relatively small.
Logged

zilluss
Level 1
*



View Profile
« Reply #16 on: March 11, 2015, 01:00:55 PM »

This looks great and toyish, something I can pick up and have immediate fun with.
Logged

@zilluss | Devlog  Hand Point Right
bithead
Level 0
**



View Profile WWW
« Reply #17 on: March 14, 2015, 02:06:37 PM »

Weekly Update #2


Meteroids, and asteroids!

This week is a shorter update. I added some placeholder meteoroids, and asteroids. Meteoroids (being smaller) will be destructible, and will sometimes contain resources. The one in the gif above has a glowing green center, indicating that it contains a specific type of resource. Probably not final design, but it looks interesting.

Asteroids are larger and you'll be able to land them. They may even have small installations on them. They are just tiny planets, with lots of low-frequency noise, to give them a wonky shape. Asteroids and meteoroids can be found randomly, but there will be higher concentrations of them in special "asteroid field" sectors, on the star map.

I also integrated Bullet physics, which is working great for ship gameplay. Unfortunately, it didn't work out as well for the planet surface gameplay, like characters, trees, and rocks. Bullet doesn't handle shape casts over small distances very gracefully, nor rigid bodies sliding along triangle meshes. I ended up spending an inordinate amount of time fixing a ton of edge cases, and it just wasn't worth it. I still have problems with the player getting stuck in volumes, in certain situations. I could probably spend a lot more time and eventually resolve each issue, but I've decided to move on and just use basic sphere distance checks for everything (for now). Prototyping game play is way more important.

Next week I'm hoping to work on something actually gameplay related. My immediate task pool consists of:

  • Enemy ship AI
  • NPCs
  • More enemy robot designs
  • Conversations (with characters, and between ships)
  • Resource collection/mining
  • Player inventory
  • Quests

Thanks for reading!
Logged

sam_suite
Level 1
*



View Profile WWW
« Reply #18 on: March 14, 2015, 06:19:03 PM »

Wow! This looks wonderful. You have a really stylish art direction going on here. I love the ship.
Logged

bithead
Level 0
**



View Profile WWW
« Reply #19 on: March 21, 2015, 10:46:22 AM »

Weekly Update #3

Regions in the Star Map now have appropriate meshes associated with them, which match what you will find in the region. The preview mesh is generated as a displaced sphere, using the colors defined by the planet descriptor.


Originally, I was going to have multiple planets in a single region, but I think it makes more sense to keep it simple right now. One major planet per region, with possible moons.

I also designed an enemy ship. It's not final or anything, but I'll be using it to move forward with the ship gameplay for now.


On the gameplay side of things, I've been tinkering with a Neural Net/Genetic Algorithm for the enemy fighter AI. Mostly just for fun, and to see what comes out of it. I have a lot to learn about NN and GA, and results haven't been very promising as of yet.

NNs seem to require a lot of tuning/experimentation, depending on how complex the network is. Giving it useful inputs, and calculating a meaningful fitness score takes some intelligent thinking. It's a lot of fun, but I can see myself wasting a ton of time getting something useful for gameplay out of it. Although it does give me an idea for another smaller game, which I might do as a code jam or something!
Logged

Pages: [1] 2 3
Print
Jump to:  

Theme orange-lt created by panic