Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411500 Posts in 69373 Topics- by 58429 Members - Latest Member: Alternalo

April 25, 2024, 02:39:02 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsLeilani's Island
Pages: 1 ... 62 63 [64] 65 66 67
Print
Author Topic: Leilani's Island  (Read 411762 times)
vdapps
Level 5
*****


Head against wall since 2013


View Profile WWW
« Reply #1260 on: December 15, 2020, 10:25:19 AM »

Congratulations to you, all the best to newborn!
Logged

EJlol
Level 0
**


View Profile
« Reply #1261 on: December 16, 2020, 05:59:20 AM »

Congratulations! Beer!

As for the boats, when the screen is scrolling, I find it difficult to see the boats are moving. Maybe you could try to add some wake to make it clearer they are moving?
Logged
kevin andersson
Level 1
*


Producer/ Designer by day and Programmer by night


View Profile WWW
« Reply #1262 on: December 17, 2020, 06:05:46 AM »

Congratulations, take care Smiley
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #1263 on: January 08, 2021, 11:31:39 AM »

Thanks all for the nice words!

Boat level finished

Over the last four weeks or so I managed to get this level finished! I like how it turned out. It's on the difficult side, as there's a lot going on and it's quite easy to miss a boat, fall in the river and die. In these situations I always have the fallback option of making it an optional secret level so it doesn't become a difficulty spike.



There's a real focus on low routes using the boats and high routes, and a lot of bouncing on enemies. Leilani's tiny jump (only 3 blocks high) really becomes a limitation here so making use of enemies to bounce higher becomes very important.

I made a small intro area for the start of the level which encourages you to bounce on an enemy to reach the breakable blocks - just a quick reminder for the player.



As for the boats, when the screen is scrolling, I find it difficult to see the boats are moving. Maybe you could try to add some wake to make it clearer they are moving?

Thanks for the suggestion. I added a small wake effect behind the boats this morning which does help to get across that they're moving. I didn't spend long on it but hopefully it does the job. Smiley

Next up I'll be making a start on... another new level!
Logged

kevin andersson
Level 1
*


Producer/ Designer by day and Programmer by night


View Profile WWW
« Reply #1264 on: January 08, 2021, 12:42:09 PM »

I think these updates are some of the most pleasant to read Smiley I don't know if you've written or responded to this before but do you know how much you have left of the development?
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #1265 on: January 10, 2021, 11:29:04 AM »

I think these updates are some of the most pleasant to read Smiley I don't know if you've written or responded to this before but do you know how much you have left of the development?

I found the most recent time I answered this and it turns out it was your question then too Grin So maybe you just missed the response.

Great post! Feels like there's so much cool stuff in the game. Do you know how long you've got left on the project?

I don't have any concrete time windows or anything for completing the game. I'm now trying to be a bit more sensible in what new things I choose to add for new levels (such as reviving old unused mechanics like the switch blocks, or making bosses fairly similar to each other, or reusing existing tilesets and just adding a bit of lighting effects or a new background to make them feel fresh) with the hope of speeding up the development of the rest of the game a little bit. In terms of number of levels completed I'm around 40-50% of the way there at the moment. That's not a reflection of the overall development work for the whole game though, as many of the surrounding features like menus and whatnot are basically done. I even have the framework in place for the end of game credits Smiley

Not much has changed since then, but with the newly completed level I'm at 23 complete levels!
Logged

irn
Level 1
*



View Profile WWW
« Reply #1266 on: January 10, 2021, 11:36:08 AM »

Oh my god, this is so cute!
Logged

vdapps
Level 5
*****


Head against wall since 2013


View Profile WWW
« Reply #1267 on: January 14, 2021, 10:23:29 AM »

High quality update as always. Gentleman Cg to 23 complete levels! Beer!
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #1268 on: January 16, 2021, 11:35:55 AM »

Boats Implementation

I thought it might be interesting to go a little more in-depth on the boats mechanic shown in the level I finished last week, and see how it works:



Boat entities

Firstly we need some boats. These are basically just moving platforms and use the same setup as my other moving platforms do. I can draw the boats in the level using tiles, and then cut that set of tiles out of the level to turn it into a moving platform. (I call this a Tile Chunk in the code).



I placed the boat above the level here - it doesn't really matter where it goes as these tiles don't exist as part of the level.

The properties contain "Type = ChunkBoat". This makes the game create the Tile Chunk as a specific boat entity rather than a generic moving platform. This entity knows to move to the left at a consistent speed without having to be attached to a path, and handles other little bits like the wake effect at the back of the boat.

The "Duplicate = 4" property makes 4 copies of the boat, which is the maximum that can spawn in the level at any one time.

The other properties don't matter too much but I'll cover them for the curious. "Active = false" and "Content = true" ensure the boats entities start as inactive, and puts the boat entities into a special entity pool, so they won't be present when the level starts and won't appear until told when and where to spawn. "Tag = Boat" allows the boat spawner to find the boat entities.

Boat spawner

This is an invisible entity that's responsible for spawning boats into the level.



It has a few properties so it knows how wide the boats are, how far apart they should be, the speed they move at, etc. The boats begin at the position of the boat spawner, and are placed at regular intervals to the right, and essentially go on for infinity.

If we know how long the level has been played for then we can calculate the position of any boat at that time. The X position of the spawner is 44, and boats move at -1.5 units a second, and there's a boat every 18 units. So:
  • At 0 seconds, the first boat is at x = 44
  • At 0 seconds, the second boat is 18 units further right, x = (44 + 18) = 62
  • At 10 seconds, the first boat is at x = (44 - 1.5 * 10) = 29
  • At 10 seconds, the second boat is 18 units further right, x = (29 + 18) = 47

Each frame the boat spawner despawns any boats that have moved far enough off the screen. Then, using the above calculations it decides whether any boats should be present in the on-screen portion of the level, and spawn a boat there if one is missing.

Deciding what's on each boat

The boat spawner entity has a property that tells it an XML file to load. This contains a set of boat layouts:

Code:
<BoatLayouts>
<Layout name="Empty" tag="Boat">
</Layout>

<Layout name="Drills" tag="Boat">
<Entity type="drill" x="2.0" y="-3.5"/>
<Entity type="drill" x="9.0" y="-4.5" left="false"/>
</Layout>

The "tag" refers to the same "Tag = Boat" property that's on the boat entity. So this determines which boat entity will be spawned.

Then there's a list of entities that will be spawned on the boat. At the start of the level the boat spawner creates its own pool of these entities to draw from, for example it makes a pool of 10 drill bots that are purely used for being spawned on boats.

When spawning a boat, how do we know which layout to use? This is based on where the boat is when it's spawned into the level.





These objects are placed along the bottom of the level which determine which boat layout will be used for boats spawned in that part of the level. So any boats spawned within that first range will use the "Empty" layout, with no enemies. Boats spawned within the second range will use the "Drills" layout. You can see this in action if you go back to the gif at the top of this post.

An interesting point here is that the individual boats don't have a consistent layout. For example if you move quickly and reach the second boat early then it'll have the "Drills" layout. If you take your time and the second boat is further to the left by the time you reach it, it'll have the "Empty" layout. Once a boat has gone off screen and despawned, if the player travels back to get it back on screen, it may contain a different layout of enemies as it spawns the boat from scratch and creates a layout appropriate to that part of the level.

I decided this inconsistency / lack of persistence in the boat contents was a good choice as it allows the boat contents to progress throughout the level regardless of how fast the player travels through the level. From a certain point in the level, the boats will contain drills, later on they will contain spinners, etc. If the player travels back through the level the boats back in the earlier parts of the level will still contain those appropriate contents.
Logged

oahda
Level 10
*****



View Profile
« Reply #1269 on: January 16, 2021, 11:42:06 AM »

This is really cool! I do agree now with the previous poster that it's a bit hard to see that the boats are moving when the level is also scrolling, so I hope you can figure it out. Anyway, love seeing breakdowns like this so thanks for sharing. Kiss
Logged

Alain
Level 10
*****



View Profile WWW
« Reply #1270 on: January 17, 2021, 11:50:18 PM »

Thanks for the detailled breakdown and keep up the great work. I love the rolling and jumping animation by the way Smiley
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #1271 on: January 22, 2021, 04:59:01 PM »

Flying enemy revamp

I've revisited the design of one of my enemies - known as the Buzz (better enemy names will happen at some point) - the only flying enemy in the game.

Here's the old design in action:



It's often bothered me how the design feels a bit lazy, especially with the fact that it has no visible grabbing mechanism. The new design aims to rectify this:



The golden rule of 'form fits function' that I try to follow in all enemy design helped me to decide what changes to make. Hopefully the new design better indicates the enemy's behaviour:

  • The eye is angled more downwards now, not looking forwards, indicating that the enemy responds when Leilani's below.
  • Hands hold the object that's being carried. This also suggests that the object will be dropped at some point.
  • After dropping the object the arms retract and the eye closes - the enemy is now inactive and won't respond to Leilani anymore.

New flying enemy

I also added a new flying enemy! It's actually just a flying version of the Red Eye enemy.



It was quite quick to get this new enemy up and running. I considered whether it would be worth trying to share code properly between similar enemies - the flying code could be shared with the Buzz and the aiming and shooting code could be shared with the Red Eye. I decided for now to favour the quick and dirty method of just copy and pasting the relevant parts and not worrying about it, as I'm more interested in making progress. Sometimes you have to do things the nasty way Evil I'll probably regret it later, but I can always refactor the code in the future.

The gif above shows how the enemy maintains its position despite the pause and recoil that happens when firing. Above Leilani, a stationary one that returns to its position after firing. Along the top and on the right hand side, enemies with fixed velocity - they catch back up to where they should be after firing (note that the ones that fire a projectile speed up to catch up with the ones that don't fire). And in the middle, an enemy flying on a path - again it speeds up to return to where it should be on the path, so it stays in-sync with the shells that are on the same path.
Logged

oahda
Level 10
*****



View Profile
« Reply #1272 on: January 23, 2021, 01:59:49 AM »

Your attention to detail is fantastic as always. Love these little touches! The new design is a definite improvement too.
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #1273 on: January 23, 2021, 07:13:26 AM »

Those grabby arms look like they could pluck power-ups out of the sky, so you have to defeat them first before getting one
Logged
fall_ark
Level 2
**



View Profile
« Reply #1274 on: January 25, 2021, 07:32:13 PM »

After dropping the object the arms retract and the eye closes - the enemy is now inactive and won't respond to Leilani anymore.
Maybe the eye could reopen or show a surprised look when being attacked/destroyed? Blink
Logged

Chinese localizer and influencer. Translated Dead Cells, Slay the Spire, The Count Lucanor, Katana Zero, Dicey Dungeons, and involved in the localization of Reigns, The Curious Expedition, Desktop Dungeons, etc.
If you have questions about Chinese loc and publishing etc., find me at Twitter @SoM_lo
Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #1275 on: January 29, 2021, 11:23:08 AM »

I do agree now with the previous poster that it's a bit hard to see that the boats are moving when the level is also scrolling, so I hope you can figure it out. Anyway, love seeing breakdowns like this so thanks for sharing. Kiss

I've finally gotten around to having another look at this. Here's the old one again for reference:



I noticed that the water surface felt like it was scrolling to the left at the same speed as the boats were moving, so I've slowed down the scrolling speed of that animation - hopefully that helps a little. I've also improved the wake effect, including some underwater bubbles, and added more of them. It should be better now!



I also made the boat's headlights glow in the dark as I originally intended Smiley

After dropping the object the arms retract and the eye closes - the enemy is now inactive and won't respond to Leilani anymore.
Maybe the eye could reopen or show a surprised look when being attacked/destroyed? Blink

Yeah using the open-but-blank eye for the destroyed version might be better than leaving it closed - it would be clearer that the robot was now dead. Thanks for the suggestion!
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #1276 on: January 29, 2021, 11:32:50 AM »

It looks a lot better, but we need a replay of the first gif for a proper scientific comparison! Wink
Logged
Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #1277 on: February 11, 2021, 12:00:57 PM »

6 years of devlog! 7 years of development!

As of today Leilani has been in development for 7 years, and the devlog is very nearly 6 years old. I made a fun gif to celebrate! Thanks to everyone who continues to read and comment on this thread. Coffee



In devlog news, I went back and had a look through the posts I'd made about the collision system and made a few notes about what to write for the remaining entries. I don't always have a lot of free time these days, but will be aiming to finish off this series of posts in the near while I work on new content for the game. Smiley
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #1278 on: February 12, 2021, 03:16:15 AM »

Stone Cold Leilani committing casual murder to celebrate seven years of development Cool

Congratulations! Coffee
Logged
oahda
Level 10
*****



View Profile
« Reply #1279 on: February 12, 2021, 03:54:06 AM »

Woohoo, congratulations, it has certainly paid off considering how amazing the game looks by now!
Logged

Pages: 1 ... 62 63 [64] 65 66 67
Print
Jump to:  

Theme orange-lt created by panic