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:23:58 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsLeilani's Island
Pages: 1 ... 21 22 [23] 24 25 ... 67
Print
Author Topic: Leilani's Island  (Read 411854 times)
Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #440 on: December 09, 2016, 11:39:55 PM »

I agree that floating pose is so lovely! Really amazing to see this still in development. I'm sure you have explained your process in the past and I missed it but how do you tend to choose the palette for new costumes etc.? I love the contrast of enemies (yellow/purple to leilani and her environment green/brown)

Sorry for the slow reply. To choose exact colours for the game I mostly just experiment until I find something that looks good. I love the combination of pink and green which is why it became Leilani's main colour scheme, and for the fire and water powers reds and blues were an obvious choice to make. The robot's purple and yellow colour scheme was inspired by Wario's outfit, and I think it works well as a garish and unnatural colour scheme to stand out from the environments.
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #441 on: December 10, 2016, 12:04:21 AM »

Last week I started Level Design Month with a level based on the spinning flower platforms I added recently. It was hard work to get my brain properly into level designing mode. I then took the game along to a small event in Cambridge to show it off and get some playtesting done!



It was really rewarding to see people playing the new level, and I got lots of good feedback. Luckily most feedback is about tweaks to the level or the flower platforms mechanic, there were no real complaints about the core gameplay.

Flower Jungle level

For the structure of the level I tried following what's described in this Game Maker's Toolkit video as the 4-step Mario level design. When you're looking at totally blank canvas it can be tough to get going, I found it useful to be able to split the level into 4 parts and make a start just getting something playable made.

Pre-Intro

This isn't really part of the level (I wouldn't include it in the final game) so it's not actually part of the 4-step level structure. This room acts as a little crash course to introduce the core mechanics of the game to people who played it at the event.

01. Intro

The intro section forces use of the flower platform in a safe environment. Unfortunately I noticed that the blocks above the flower, which I put there to encourage people to jump onto the flower, can also get in the way when you're trying to jump off the flower to the right. So that will need tweaking.

Shortly after this the spinning top enemy is introduced, these are used here and there throughout the level to add a bit of pressure.

02. Development


Introducing harder challenges with the flower. In the first image here the flower is too high to reach so you need to bounce off an enemy to get to it. The second image shows a flower that needs to be activated in mid-air, and if you don't pay attention to the timing of the platform (which disappears after a few seconds) then you could risk falling into spikes.

03. Twist

This section of the level mixes things up a bit - the cannon below Leilani fires a bomb which rolls along and activates the flower platforms for you. So you have to make your way along without falling into the spikes.

04. Conclusion

The end of the level gets a bit more puzzly if you want to hit the top of the battery tower. You need to spin the flowers in the correct order to give you time to jump across them and reach the battery.
« Last Edit: December 10, 2016, 10:46:52 PM by Ishi » Logged

flipswitchx
Level 3
***



View Profile WWW
« Reply #442 on: December 10, 2016, 01:44:21 AM »

Bunch of awesome new mechanics since last time I checked. Excited to see how the mechanical areas will turn out, seems like a lot of potential for making mechanics that... would have otherwise been ... unnatural? haha, I'm captain obvious.
Logged

SolarLune
Level 10
*****


It's been eons


View Profile WWW
« Reply #443 on: December 10, 2016, 07:39:19 PM »

Seems like that fourth image isn't the correct one?

Anyway, nice! It's cool to see how levels should "gear up" over time - I don't really consciously do any of that for my game, so I probably should go back over it to see how the areas should "grow". Nice write-up!
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #444 on: December 10, 2016, 10:48:17 PM »

Seems like that fourth image isn't the correct one?

Anyway, nice! It's cool to see how levels should "gear up" over time - I don't really consciously do any of that for my game, so I probably should go back over it to see how the areas should "grow". Nice write-up!

Ah, fixed the image! Thanks!
Logged

Basil
Level 0
**


Starting more projects than I can finish


View Profile WWW
« Reply #445 on: December 11, 2016, 12:59:35 AM »

Ramps up the excitement for Leilani's Island more  Coffee
Logged
and
Level 6
*



View Profile WWW
« Reply #446 on: December 14, 2016, 04:36:15 AM »

really cool to see you testing out some level layouts here. I've been doing a bunch of that myself and it's amazing how much of a difference even tiny changes can make.

Glad to see things look like they're really coming along well. Keep it up!
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #447 on: December 18, 2016, 09:13:12 AM »

Aloha!

I had a bit of a slow development week this week due to various things (illness, Last Guardian, Rogue One!) but I made an effort to catch up with my level designs this weekend.

I finished off my second level of the month which is focused around wall jumps. Part way into the game I want to start making wall jumping mandatory. A few people during playtesting have figured out wall jumping themselves which is good!

When rolling, Leilani can slide on walls and jump off them, like so:



So I have tried to build areas of the level which encourage that sort of behaviour. Trails of shells also indicate what to do.



The level also features missile cannons for some timing-based challenges.



Plus I was able to make a start on the third level of the month, a mechanical base level that uses the battery-powered doors and toggle platforms. I'll talk more about that once I'm further into it.



Finally, back in May 2015 I talked about how I edit levels, and posted this image of the tileset I use for placing entities and objects in the Tiled level editor. I thought it'd be interesting to show an updated version.

    ---->   

I'm now making smarter use of some of Tiled's features in order to avoid repetition of objects in this tileset. For example I previously had four separate tiles for the spike object, facing in different directions. Now I just use the Z key to rotate the tile when I place it, which both makes editing easier and frees up space on this little tileset!

I'm impressed with the slow but steady improvements to Tiled and really recommend looking into it if you're working on a 2D tile-based game.
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #448 on: December 29, 2016, 01:37:13 AM »

Hello, hope everyone had a nice Christmas!

I didn't spend a huge amount of time working on the game over the last week as I was visiting family. The bit of work I did do wasn't focused on level design - I just got a new laptop, so I focused on getting the game working nicely on that instead.

Windows 10 DPI-awareness

I now have Windows 10 so have encountered the DPI handling stuff for the first time. Depending on your settings in Windows you can get programs to scale up so they're more usable on high-DPI screens. This can be handled by the program itself, or alternatively if the program isn't DPI-aware then Windows will simply scale up the program's windows to make it appear larger.

When I first ran the game on the new laptop it looked blurry as it was getting scaled up by Windows. All I needed to do here was to set a property in the program's manifest file to make the program DPI-aware, and Windows no longer scales it. I don't need to actually handle anything else myself as the game is already in a resizable window, so the DPI of the monitor is pretty irrelevant.

Touch Screen support

Another new feature I can now test is supporting touch screens on Windows. Even though the game is only playable with keyboard / controllers, I support using the mouse for menus, so it makes sense to support touch screens too. I feel like this kind of menu control is important for making the game a friendly, intuitive experience. It's good from an accessibility point of view too - you can navigate through to the control settings menu without actually having to use a controller to get there.

I use SDL's input events to read input for the game. SDL provides touch screen support, and by default it generates mouse events alongside the touchscreen-specific events. I didn't find that this mouse emulation produced good results, though. So I started listening to the touchscreen events and coded the UI to react to those in ways you would expect. Now it feels really nice to just tap through the menus.
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #449 on: January 07, 2017, 08:41:58 AM »

Happy new year! Now we're into January, it's Audio Month for Leilani. Over the last week I've done a huge much-needed revamp of the game's sound system. Sound is super important for the feel of a game and for giving the player feedback, but I will admit I've never got too excited about it before. I'm quite happy with how this revamp of my sound system has gone though, so let's discuss what I have.

Audio System

API: My audio system uses the FMOD API for loading and playing audio files.

Structure: I will explain the various components of the audio system. When I refer to external code I just mean anything outside of the audio system. It could be gameplay objects, environmental effects, UI, whatever.

  • SoundSystem: This is the high level audio system, there is only one (it is a singleton). It loads Waves and keeps track of all the Channels that are currently playing. External code uses the SoundSystem to perform most audio interactions (stopping a Channel, setting Channel volume, setting volume of a whole group of Sounds, etc). The exception to this is that external code doesn't use SoundSystem to actually play Sounds - that is done via a SoundBank, because only the SoundBank knows the names of the Sounds.
     
  • SoundBank: SoundBanks are created by loading an XML file that specifies a list of Sounds. When the SoundBank is created, it uses SoundSystem to load all the Waves that are required by the Sounds in the SoundBank. SoundBanks can be loaded and unloaded as necessary. So for something like a boss which uses a lot of unique Sounds, I would put those Sounds in a separate SoundBank which is only loaded if that boss is present in the current level.

    External code uses the SoundBank to play Sounds. For example GameplaySoundBank.PlaySound("Jump", position) will find a Sound called "Jump", calculate the properties of the Sound that should be used, and then passes the Sound's Wave through to SoundSystem.PlayWave(waveID, properties), which plays it on a Channel.
     

Code:
<Sound name="Jump"
   filename="Jump.wav">
</Sound>
<Sound name="PowerRollStart"
   filename="PowerRollStart.wav"
   volume="0.4">
</Sound>
<Sound name="RollLoop"
   filename="RollLoop.wav"
   loop="1"
   sustain="0.05">
</Sound>
Example of part of a SoundBank XML.


  • Sound: A Sound is like a friendly wrapper for a Wave. It has a name which external code uses to play it, and has various other properties attached to it, which are loaded from the SoundBank's XML file.

    Some of the Sound's properties alter how the SoundSystem loads the Wave, for example whether it loops or plays once, etc.

    Other of the Sound's properties affect how the Channel plays the Wave, for example the volume, pitch, sustain length and group. These properties (apart from group) can be randomised within a range when the Sound is played. Since these properties are supplied by the XML file, this makes it easier to tweak sounds (especially balancing volumes of sounds) without having to alter any code.
     
  • Wave: A raw bit of audio that has been loaded by the SoundSystem.
     
  • Channel: An instance of a Wave that is being actively played. When external code plays a Sound, the SoundBank returns a handle to the Channel which the external code can then use to perform further actions on the Channel (changing volume, repositioning, stopping, etc).

    Changes to things like the volume of the Channel are relative to the original volume specified by the Sound. So if the Sound specified a volume of 0.7, and external code then sets the Channel's volume to 0.5, the actual resulting volume will be 0.7 * 0.5 = 0.35.
     

I hope that gives a good overall idea of how the system is put together. Now let's talk about what useful features I've added this week.

Groups: Each Sound now has a group. When the Sound's Wave is played, the Channel inherits the group value from the Sound. I can then easily control all currently playing Channels that belong to the same group. The best example of this is that gameplay and UI Sounds are in different groups. When the player pauses the game, all Channels in the gameplay group are paused, but this won't effect any Channels that are playing UI sounds. It's then easy to resume all the gameplay Channels when the player resumes the game.

Also when transitioning between different areas of a level, or quitting out of the level, I fade down the volume of the whole gameplay group first. This ensures that there is no abrupt audio cut-off during the transition.

Sustain: This is a new feature that causes a Channel to fade out rather than stop instantly. I now use this for Leilani's rolling effect. Previously when she stopped rolling, the looping audio that accompanies the roll would have an abrupt cut-off, which sounds too artificial. Now I use a sustain length of 0.05 seconds which is just enough to soften the edge.

The external code doesn't need to be aware that the sustain feature exists. By calling SoundSystem.StopChannel(rollChannel), as far as the external code cares the Channel has been stopped and can not be interacted with any longer. The sustained fade out is applied invisibly in the background.

Positional Channels: This feature already existed but is worth mentioning. When playing a Sound, a position can be specified. The Channel stores this position and uses it to modify its volume and left/right pan. Each frame the gameplay code sets the position and size of the 'window' - this window is the portion of the world currently being displayed on the screen. Channels whose position is just outside of this window will have lower volume, and Channels which are a long way out will be entirely muted. The left/right pan of the Channel is also calculated based on this window. It's a simple implementation of positional sound which is suitable enough for this game.

Avoiding sound stacking: I have had problems with playing multiple of the same Sound at the same time. For example when destroying a block, a smash effect is played. But then when destroying two blocks at the same time, that effect is played twice and immediately becomes too loud.

The cause of this is that since the exact same Wave is being played twice at the exact same time, the sound waves sit perfectly on top of each other, which causes the 2x amplification. This sounds really unnatural, as in the real world you will never hear two perfectly identical sounds.

I'm quite happy with my solution. Firstly when starting a new Channel I add a random delay of up to 1/100 of a second. This isn't noticeable but is enough to offset the waveforms and prevent the perfect amplification effect. By also using the Sound's random pitch variation I can stretch and squash each sound slightly which stops the waves from being exact copies of each other. The result isn't perfect, but sounds much more natural than naively stacking up the sounds.

To help out further I added a bit of logic to the SoundBank when a Sound is played. If the Sound was played very recently in a similar position then the volume of the new Channel is reduced.

------

If you got this far, thanks for reading!
Logged

Ashedragon
Level 2
**



View Profile WWW
« Reply #450 on: January 07, 2017, 10:36:24 AM »

That is a really cool audio system! Makes me want to implement something like it, haha. Happy new year to you as well, hope your holidays were grand.
Logged

breakfastbat
Level 2
**



View Profile
« Reply #451 on: January 11, 2017, 12:51:19 PM »

I just love this project, just when you think action platformers are going out of vogue, Leilani's Island crops up and breathes life into the genre. Keep it up!
Logged

♫ December, ♫
♫ December. ♫
jsmars
Level 0
**



View Profile
« Reply #452 on: January 12, 2017, 04:00:38 AM »

Progress is coming along nicely! Keep up the good work!

Are you planning any COOP or other multiplayer modes?

Also I could really recommend getting some difficult achievements in the game if you get a steam release. Take a look at the unofficial achievements (and hidden non-achievement achievements) for Spelunk, really a shame that some of them weren't actual achievements as a lot of people like them.
Logged
kkairos
Level 0
**


View Profile WWW
« Reply #453 on: January 12, 2017, 04:20:29 PM »

Sound stacking sounds like a thing to prevent! Had some worries about it myself. Commenting not because I have anything productive to add to the conversation because everyone's already told you how awesome this looks, but so that I can follow this one easier in the sea of devlogs.
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #454 on: January 14, 2017, 02:59:04 AM »

Thanks for the comments!

Are you planning any COOP or other multiplayer modes?

I'm not planning any coop, just focusing on making a solid single player experience. I feel like Leilani is a bit of a loner anyway Smiley

Achievements are interesting, I think about them occasionally but don't have any solid ideas of how I would approach them yet. If I release on steam I would probably implement them, just as an extra bonus, but probably in a way that doesn't introduce grind or give away any secrets of the game.
Logged

Tuba
Level 10
*****



View Profile WWW
« Reply #455 on: January 14, 2017, 04:40:55 AM »

Can't wait for Leilani's Island 2 with COOP multiplayer!
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #456 on: January 14, 2017, 06:23:49 AM »

Can't wait for Leilani's Island 2 with COOP multiplayer!

Don't forget the rideable companions too Wink
Logged

oyog
Level 7
**



View Profile WWW
« Reply #457 on: January 14, 2017, 07:06:48 AM »

Don't forget the rideable companions too Wink

Horse Armor paid DLC!?  Beg
Logged
Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #458 on: January 14, 2017, 08:27:08 AM »

Horse Armor paid DLC!?  Beg

Hand Money Left Kiss Hand Money Right

Audio System - Music and Reverb!

I've done some more work on the audio system, so I'd like to talk about a new feature for sound effects, and also discuss what features I support for my music playback.

Reverb: SFX now supports reverb effects! I had a half-working implementation of this ages ago, but got distracted and never finished it. The nice thing about setting aside an entire month to audio is that I get to pay attention to details like this. It wasn't particularly complicated - FMOD has nice reverb features built into it - I just had to properly research how to use them. The effect I'm aiming for is the same as in Super Mario World where the underground levels have a nice echo to them. See "Realtime Music Filters" below for an example video!

Music: As mentioned earlier in the thread, Leila 'Woofle' Wilson is composing the music for Leilani's Island. I found her by chance on Bandcamp (her name stood out to me!) and totally fell in love with her existing music (she worked on various things including Freedom Planet), so I'm really happy she is working with me on this. You can currently listen to three of the Leilani music tracks on her soundcloud here: https://soundcloud.com/leila-wilson-woofle/sets/leilanis-island

Easy Music Management: Music playback generally works the same as the SFX playback that I described in the previous post, but with a few special bits of code specifically for music. When I tell the Sound System to play some music, I can give it a time period for fading out the current track (if there is a current track playing) before the new one plays, so it's really easy to do smooth transitions between different tracks.

Streaming From File: The music is also streamed from file rather than being loaded all in one go, which saves a ton of memory for a 3 minute+ track. Once again this is a built in feature of FMOD, I'm not doing anything fancy.

Realtime Music Filters: Similar to the use of FMOD's reverb effects, I also looked into what built-in filters I could apply to the music. In this video I use a low-pass filter to muffle the music when Leilani goes inside a hidden area.





This video also includes an example of the cave reverb effect. I still consider the SFX themselves to be placeholder.

Intro Segments: I support having a separate intro segment at the start of the track. When the music ends, it'll loop back to the end of the intro rather than right back to the start of the track. I really like it when games do this, as it can really change the feeling of the start of the level, so I wanted to support it! For the second batch of music that Woofle worked on, I asked her to include intro segments, and also to go back and add them to previous tracks she had made for me. The Lethal Lava track is a good example, the first ~13 seconds are the intro, which provides a nice slow build-up.

Cue Points: I can embed cue points into music tracks, and the gameplay code receives a callback when the music hits a cue point. I can use this to time things to the music. One example I'm considering is that in the mechanical base / factory levels, it'll initially be dark, and the factory lights will turn on in time with the beats in the music's intro.

Layered tracks: This week I've also figured out how to support another of my favourite music features, which is layering multiple tracks together. I can use a multi-channel .ogg file (which is primarily intended for surround sound audio, I think), and then use FMOD to dynamically change which of the channels are actually heard. So I could seamlessly blend between two different versions of the same music (often seen in new Mario games when transitioning from above to below water), or I could fade in an additional layer on top of existing music (like the drums when riding Yoshi in Super Mario World, or how the drum beats kick in when selecting a file in the Super Mario Galaxy frontend).

Using one multi-channel music track, rather than trying to play multiple separate music tracks at the same time, guarantees that the different layers of music will never go out of sync.

I don't have a definite plan for when to use this yet, but I'm excited to support it. This Game Maker's Toolkit video is an excellent look at how the technique is used in various games.





I hope you can see that I'm definitely trying to make a fully-featured music system, I want to make the most of this aspect of the game, as when music is used in interesting ways it can be one of my favourite things about a game.

Thanks for reading!
Logged

breakfastbat
Level 2
**



View Profile
« Reply #459 on: January 14, 2017, 08:32:28 AM »

Oh man, Woofle is working on Leilani's Island OST???

FP is one of my favorite soundtracks, and I love her independent work too.
Logged

♫ December, ♫
♫ December. ♫
Pages: 1 ... 21 22 [23] 24 25 ... 67
Print
Jump to:  

Theme orange-lt created by panic