I spent most of yesterday working with the pathfinding AI.
The basic idea is that, once the basic level has been generated, an AI player runs through the level, trying to reach the other side.
To ensure at least one of these players survives, a fleet of 32 AI players are sent over the level, and each tries to find the “best” way through.
Here you can roughly see what’s going on. The green and red blocks are floors and walls, and then the blue dots are the various AI players, and their varied paths through the level.
Once that’s achieved, the final process is to pick one of the AI Paths and use it to generate the level’s collectables and checkpoints.
All in all, this entire process takes 3 frames. 1 to build the map, 1 to run all 32 AI players through it, and then 1 more to add the extra stuff once the “Best Path” has been picked.
In the following video you’ll see the game mode selected, and the mini-map show up almost instantly. This is how fast the game is at both building the map and finding the paths.
A very simple and extremely speedy process, although I’ve only so far tested it with short levels. The next step is ensuring it’s still silky smooth once you start getting really epically lengthy levels, too!
I’ll be spending most of today finding shortcuts to help smooth things out, as well as making the path generator run a little better and then adding some deadly objects using some of the alternative paths.
Should be fun!
Yesterday I started to put some effort into the “Pre-Game AI Player” stuff. It’s going to be a lot more complicated than I’d thought, but I’ll try my best to get it working.
I basically need to create a computer player that runs through the level, ensuring that you can at least reach the end without dying.
Along the way, he’ll generate a path which I’ll use to plant various objects like the Checkpoint flags, and perhaps some evil objects to get in your way.
This won’t, of course, be the ONLY path, but it’ll ensure that there is at least one way to complete each and every level.
..but it’s going to be tricky to make it all work!
Do you own a classic Gameboy?
Do you have a flashcart for it?
Then today’s (*yesterday) your lucky day!
For the past week or so, Socoder member Rychan has been working on a port of SpikeDislike for the Gameboy!
You can grab it here, and either play it on any available emulator, or if you’re lucky enough, you can even play it on a real world actual gameboy! And if you DO do that, I want a video!!! 😀
Meanwhile, I’ve been playing about some more with the level generator thingy.
I can now get distinct level “styles” from the game, ranging from flat worlds to big chunky landscapes.
Colourschemes have been setup, and things are looking nice. I’ve basically got enough content in the game to generate three distinct worlds, but I’ve not yet drawn up the different graphical packs for each.
Basically, I want to stick with the default template until I’ve got all the pieces in place, at which point I’ll start redrawing the various tiles for all the different themes.
Plenty more work to be done!
Last night, I started watching a series on Vimeo titled “ITV In the Face”.
The show is essentially a look back at all the various UK ITV franchises, along with the history of what happened to all the different companies along the way.
Thrilling stuff, I’m sure you’ll agree.
But it kept me awake until 5am, this morning, and is one of those “Can’t stop watching” sort of TV-History documentary things that I have a nasty habit of getting badly into, sometimes.
Luckily, I’ve watched every single one of them* so won’t have to do that again.
(* Although, they have just added a new episode in the last half-hour!! Mmmm!!!!)
Anyhoo, yesterday I did some more tweaking of the level generator, and although it’s not noticeably different at a glance, I can certainly feel the improvements coming along quite nicely. Hopefully I’m starting to get rid of any blocked paths along the way, as those were kinda nasty in places. I’m adding little extra ledges and things, to make sure large walls don’t appear at the end of giant chasms, that sort of thing.
At the same time, however, I’d like to tackle a few precarious jumps, so I might try adding a few complex mini-rules in to ensure certain obstacles show up in specific sorts of areas.
It’s hard, however, to ensure things don’t get overly repetitive. It’s all well and good having the floor disappear, and a single ledge half-a-screen away, but if you do that too often it becomes boring.
A dash of randomness, and plenty of tweaks to the generator, and we should be ok to go.
You know, I’m sure the original generator didn’t take nearly as long as this!!
I’m not 100% certain, but I think my lack of AGameAWeek might be slowing down my ability to rush these things out…
I tried doing some music, last night, but everything I attempted turned out terribly. I guess my spurt of musical talent has run out, for now! Aw well, at least I can concentrate on getting my game done, instead.
Yesterday I tackled Object vs Object collisions so that thrown weapons could interact with enemies and vice versa.
The basics are in, and although I’ve still only got the basic 3 weapons, they do at least work correctly.
I’ve still not added “Hat” powerups, and am still hopeful that I can come up with some alternative powerup types, but for now things are looking fairly similar to how they used to.
More complicated work playing with the level generator, yesterday. I still have LOADS to do, and progress has been somewhat slow, but I’m taking my time and trying to account for lots of different things at the same time.
There are some elements that need to be missed out, this time around. Ladders and “drop down” things simply won’t work on a touchscreen, unless I start making the onscreen dpad do up and down, which honestly, I’d rather not do. One single axis is plenty for movement. As soon as you add a second axis, you find the placement becomes much more of an issue, so I’m trying my best to avoid up and down.
Left, right, jump and throw. That’s plenty!
So, keeping that in mind, ignoring certain tile types, and trying to keep things lively, all at the same time.. I think I’ve got my work cut out for me!.. Even Mario has “Down to enter a pipe!”
Still, I’m carrying on, and I’m starting to consider what sorts of tilesets I’ll be needing this time around, too. I’m going to try to make the different “themes” stand out a bit more, this time around, but whether that ends up being the case will depend on my artistic talents..
Jumped back and forth through a couple of things, yesterday, but mostly spent more time working on the level builder.
Things are starting to look a little more varied, and thankfully the addition of vertical scrolling has added a little bit more.
I’m currently worried about making sure the levels are completable, as I haven’t yet added an AI player run-through of the level, to ensure it’s at least playable. I’ll have to do that next, I suppose.
In the meantime, I’ve been ensuring enemies and bouncing objects react roughly the way they should within the environment.
As you can see, the balls now bounce in a slightly less erratic way, and appear to be vaguely under some kind of control. They’re no longer bouncing up steps and out of sight within a few frames, and are instead bouncing back and forth a bit before disappearing.
Hopefully, future changes in the landscape style won’t make that all a worthless amount of coding!
Meanwhile, I randomly decided to give Sheep Goes Right a test on my iPad..
Mmmm… I think I might need to work on some levels for that, now.
Meanwhile, back in the world of Development, I did a whole bunch of tweaking to the level generator.. But nothing’s noticeably different at this point, so a screenshot is entirely worthless!
A rest day..
I spent most of yesterday watching YouTube videos and generally lazying about.
I watched RHLSTP, A couple of MusicVideos, as well as spending a good half hour watching a man walking.
As someone who’s stuck indoors most of the time, being able to watch a nice long trail-hike was oddly kind of compelling. Especially the impressiveness once you stick your headphones on. A lovely walk, and hopefully I can find more of the same.
Last night I added some blocks to the Level Generator, which of course then required me to faff about adding extra rules to the player, and the baddies, and the other objects, to ensure they collide “roughly” correctly with the tilemap.
It didn’t take too long to get the basics in, but having to essentially rewrite the rules for half-a-dozen different object types meant for a long and complex bit of work.
For example, some of the enemies will want off a floor, dropping down to the layer beneath.
Other enemies will instead turn around when they hit a ledge.
Thrown balls and ice rocks will bounce off walls, whereas flowers will smash on impact.
These are the basic rules that were implemented into the original NeonPlat Adventures, so have been recreated here. I’m also planning to add a bunch more rules, which will hopefully make the enemies a little more intelligent this time around.