• Projects
  • My first Godot game (Qix/Xonix genre) feedback welcome

Hi, I am writing my first game in Godot! It's a bit like the old arcade games Qix and Xonix. I'm trying to make it fun and with an arcade-y feel. This is a work in progress but any ideas for improvements would be great. If someone would like to playtest it I am happy to export the project for their platform to try it. :)

Edit: Here are links to the game if you want to try it: -

Windows: https://drive.google.com/file/d/1cagdpkRMWTagphoYRyF1sDH6kVTLxLWh/view?usp=sharing

Linux: https://drive.google.com/file/d/1musbYeEOILO_nBnQQoj8Z1Edj9sXfe9n/view?usp=sharing

Thanks!

Great start, I'm interested in testing your work ! Reminds me the good old times of arcade... You mentioned Qix, but do you know Volfied, one of my favourite Qix-like arcade games ? Check here : asthalis.free.fr/arca_volfied_image.html

Hey Thanks! I was trying to go for an early retro-game type feel :)

I'll go check out Volfied now and I've messaged you re testing.

This looks really great and functional. Qix was one of my favorite games as a kid. It was one of the first games I got for the Gameboy, and after playing out Tetris and Mario, I played that a whole lot.

Yeah Qix/Xonix rocks. This looks very tight. I would like to test it but I'm afraid I could get addicted :)

Thanks guys :)

I have updated the first post with download links. I'd love to hear some feedback on how the difficulty levels fare. And any other features you can think to add to make it more fun.

I gave your game a try today and I think it's great !

I love all that reminds me of arcade's glory days : low resolution, minimalistic graphics and sounds, simple text style, simple and intuitive controls, highscore table with name entry... I need to explore it further for more comments but, so far, it looks like a classic.

One thing I noticed : at the beginning of the game, it may not be obvious where the "player" is, because it shares the same color as enemies. A different one (yellow ? orange ?) or another way to make it more visible (temporarily bigger ? permanent particles ?) may be useful to avoid confusion.

Interesting fact, kenney.nl figured out how to make a game for the attari console in the year 2021, so if you are interested in that you can check out his atarri game Wizards and Dinosaurs. He has a tutorial somewhere on his site that tells you how I think, but can't find it.

@Asthalis said: I gave your game a try today and I think it's great !

I love all that reminds me of arcade's glory days : low resolution, minimalistic graphics and sounds, simple text style, simple and intuitive controls, highscore table with name entry... I need to explore it further for more comments but, so far, it looks like a classic.

One thing I noticed : at the beginning of the game, it may not be obvious where the "player" is, because it shares the same color as enemies. A different one (yellow ? orange ?) or another way to make it more visible (temporarily bigger ? permanent particles ?) may be useful to avoid confusion.

Thanks - great suggestion! - I have added this feature and updated the download links in the first post to the new version :)

Hi ! I played your game a bit more and it's more difficult than it looks, even in easy mode ! To me, sounds and graphics perfectly fit the "arcade-esque" style. Maybe the player should keep a different color (yellow ?) to make him easier to spot when numerous enemy pixels are near. I still need training to use "reverse" function properly.

Games are fast but so were those of the arcade hits of the 80-90's so no problem to me :)

I'm really interested in the method you used in Godot to fill the covered areas : it's quick, efficient and I have absolutely no idea how you did this, especially considering you also have to check if enemies are inside or not. Could you give me a clue ?

4 days later

Hey Asthalis, thanks for playing! I've replied to your private message with some details on the filling part, did you get it? :)

Not a bad shout to change the colour of the player... I'll have a play around to see what works.

Do you think the game is too hard? Should I make it a little easier?

9 days later

Hi and sorry for my late answer :3

I tried your game a little harder and I do think visuals and sounds are perfect for an arcade game lover as I am =)

Is it too hard ? If I remember the average length of real arcade games once you had inserted a coin, it fits to the good old days. Though, it may be a bit discouraging for some players. I did choose the "easy" settings to test the gameplay and, at first, I felt that it could have been the default skill. Enemies may be still a bit to fast or too numerous for the "normal" mode.

I'm really interested about the code you used to fill (almost instantly, at the seem) the covered areas of the game. How does it work ?

By the way, Hop2D! beta 14 is out today if you want to try it ;)

Hey thanks for testing some more. I agree it may be a bit on the hard side. I was considering having "easy" mode with zero enemies in the filled area to avoid instead of one, and "normal" having one instead of two, and "hard" having two instead of three.... but maybe this makes easy mode a little too easy. I'll try it and see.

The other option is to reduce the physics tick slightly. I think it's at 50 ticks per second currently. I could reduce that a bit I guess which will make it easier. Can this be done on the fly in the game easily enough? Or is it a fixed thing in the project settings only?

The way the filling works is as follows:

The level is stored as a grid[y][x] multidimensional array (160x112 or something, with 2x2 on-screen pixels per grid cell). In basic terms, each cell in the grid is stored as a 0 for unfilled, and 1 for filled.

I have a function that (re)generates polygon2d rects from the grid that I call whenever an area is filled (or the level starts), and that is how the screen is updated. It tries to generate as few rects as possible from the filled grid cells.

For filling, when the player has finished drawing the trail, and meets the filled area again, I trace along both sides of the trail from start to finish, logging all unfilled cells touching the trail edge where the previous touching edge cell was either another trail cell or an already filled cell. This generates a list of potential seed-cells on each side of the trail. For each seed-cell I send it to my scan-line flood-fill function that operates on a grid array. I do this first in a temp/mock grid array (a copy of the real grid array), and when that's flood-filled I check if any enemies are in the newly filled area. If they are not, I do the same flood-fill (for that seed cell) on the real grid. Then at the end I call the function to regenerate the polygon2d's.

There's a little bit more to it than that, but that's basically how it works.

I'll go check out the new Hop!2D beta!

I've made a new version, links updated in the first post.

This version is slightly easier, and has a few tweaks to hopefully enhance gameplay. Also added an "insane" mode for those who like a harder challenge.

Feedback welcome!

Cheers