Giter VIP home page Giter VIP logo

aranoid's Introduction

Aranoid

Aranoid is a loose Arkanoid clone, written in Godot as a sort of learning exercise.

License: MIT Language: Godot 4.0 Art: Lost Garden Sound: ZapSplat

Why the name? Well, I'm Arantor, it's my project, it's an Arkanoid clone, so... Ara-noid. I am mindful it's a bit close to the original but I'm pretty certain no-one is going to be able to confuse them...

Aranoid

Art

The art is โ€œIron Plague / Sinistarโ€ art by Daniel Cook (https://lostgarden.home.blog/)

Admittedly, this isn't really an Arkanoid style set of tiles, but it's an interesting journey in making do and treating it as a fun exercise, where I have a limitation that isn't really a limitation.

Sound

More might come along, we'll see.

Code

The code is mine. It's not good code, it's really not, it does all the things it's not supposed to do, massively tight and explicit coupling between things, minimal use of signals etc. but I'm more interested in the ways I can put the puzzle pieces together and wire them up more than I am about best practice. Especially because in my experience best practice usually lands you in a hole that you have to play dirty to get out of and knowing what my options are is usually a good place to be.

But if it matters, the code is MIT (2 clause) licensed, the other assets are under their own licences.

aranoid's People

Contributors

arantor avatar

Watchers

 avatar

aranoid's Issues

Shield icon shadow

The shield powerup icon needs its shadow adjusted to be in line with the others.

Shield

  • Shield fades in
  • Shield fades out
  • Shield prevents the ball from bouncing off the bottom
  • Shield has a display on the side for how long it has yet to remain
  • Sound effect for bouncing?
  • Sound effect on fade in?
  • Sound effect on fade out?

More levels / level change

Right now there is a single level that covers all the currently defined brick types, plus the full/half positions. It's not every exciting.

There's also no way to actually trigger getting to the next level from it! But it should be pretty easy to fire off something (perhaps on a brick's destruction) to check the brick container if there are any destructible bricks left and bump the level if that's the case.

Game logo

When the game begins, we should have a neat logo that sits atop the settings menu (which will help differentiate from Arkanoid!)

Superball

Ability to have a ball that doesn't bounce but just powers on through bricks for a short while.

  • Implement basic powerup
  • Add sound effects?
  • It currently goes through gold bricks, do we want that?
  • Add particle effect to super ball?

More brick colours

We could add more brick colours (perhaps either detach the points value from them except for silver bricks), either with dedicated sprites or creating clones of existing ones and modulating the colour on the texture.

Player lives

There is currently no actual detection for the ball leaving the playfield, nor for the player's lives.

Moreover there is no capacity for a game over when all the player's lives are spent.

Shield collides with player

Now the player actually respects physics, the static body collider for the shield powerup forces the player upwards until they are no longer overlapping.

Solution: move shield to its own layer, have the ball collision mask that layer as well and the player not match that layer.

Skip level powerup

Ability to collect a skip level powerup, it should credit you for either all the bricks outstanding, or a single clump of points. Probably should be rarer than the other powerups.

Crash when ending level

Not consistently reproducible, but:

  • only observed when shield is active
  • typically with multiball (9+ balls current)
  • on breaking the last brick or second to last brick, it just crashes with no debug output

Variable bounce angle

Currently the ball bounces off the bat based on its collision normals, where the collision shape is actually mapped reasonably approximately to the bat shape (including the little edges between the top of the pad and the side edges)

The common accepted practice is to have the return angle be determined by how far from centre the bounce position is; if the bounce is near the middle, the bounce should return near-vertical, with the edges being a more slanted angle, to give the player some control.

I think it might also be interesting to experiment with variability based on player momentum in the frame where the bounce is evaluated (or perhaps an effect of the movement across last frame and this frame) to produce a short of 'chip shot' effect, where the bounce is more controlled if you're not moving, but if you're rapidly moving as you slide the bat in place, it produces a distorted angle.

Not clear if this should be on its own, in addition to or overruled by the more discrete control method.

Visually identify the gold/metal bricks

Right now there is no visual indicator on the metal bricks - there is the audio cue (similar to Arkanoid) where they ding with a different noise when the collision isn't going to break them (but the silver ones get the usual effect when they do break)

But there's no visual cue. Arkanoid flashes the edges of metal bricks on level start / player restart, other variants have texture on the bricks (so they're not flat bricks), but I'm not sure what I want to do here. It might be interesting to be able to define an animation on them.

Extra lives

Player should be able to collect extra lives.

  • Players can get extra lives every 500 points - is this the wrong amount of points?
  • Extra life pickup

Bat edges and underside produce odd collisions

If the player catches the ball on the underside of the bat, the ball will still bounce, but of course this won't save the player from losing that ball.

Should the underside not be collidable?

Additionally, the edges that stick out from the pad area are mapped in the CollisionShape, so it's possible to produce an effect where the ball can come in at a steep angle, bounce off the edge of the upper pad area, then hit the corner of the bottom of the pad and bounce off at a weird angle. It's also very weird if the player is hard up against an edge and the ball is bouncing in that corner.

Perhaps widen the top of the bat so the 'lit surface' takes the whole area, or bring in the underside edges?

Game icon

Need to update the Godot project plus all the core icons to have a game icon rather than the Godot robot logo.

Balance

  • Are powerups dropped frequently/infrequently enough?
  • Different powerups should have different drop rates?
  • Don't drop slowdown if ball below a certain threshold?
  • Superball lasts 45 seconds, is this right?
  • Shield lasts 30 seconds, is this right?
  • Ball max speed could be raised?

Add alternate key for menu

The default binding for the in-game options menu is Esc, but this is prioritised by the browser needing to release mouse control, so add an extra keybind (space?)

Web export

  • Deploy to Itch.io
  • Hide irrelevant settings - scaling
  • Tweak mouse sensitivity (see related issue)
  • Hide exit button on main menu
  • Optimise web build

Slowball

A powerup that slows the ball down to a given speed.

I'm not clear yet whether this should slow it down to a percentage of current speed (easy) or to calculate the x/y relative to a given target velocity, e.g. if we're travelling at [30, 30] our velocity is 42.42, but of course that assumes a 45 degree angle; travelling at a steeper angle will adjust these.

Weaponbat

In true Arkanoid fashion it should be possible to get a weapon attached to the bat so the player has active abilities to take on the level without just bouncing the ball (while not losing it, either!)

Classic Arkanoid does this with making the base into a mobile laser base but this could easily be something different, perhaps time based somehow with targeting rockets? TBC.

Settings menu

Need a settings menu.

  • Volume control
  • Mouse sensitivity control?
  • Maybe resolution multiplier control?
  • Quit game

Multiball

A powerup that splits any active balls on the playfield into 3 (so, splitting off each ball at an angle of 15 degrees either way) and ideally preserving the current velocity in so doing.

  • Current angle of variance for the two new balls is 10 degrees from the origin ball's current trajectory. Maybe try other values such as 15 degrees?
  • Does this need a one-shot sound effect when collected?
  • If the 2-way sprite from Sinistar/Iron Plague can be saved from corruption, have a 2-way split as well as a 3-way split?

Destroying last brick doesn't always clear level

The bricks remaining counter clearly says 0 (with only non-destructible bricks remaining, or in some cases, no bricks remaining at all) but the detector doesn't move the stage on.

Has only been observed with superball.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.