Giter Club home page Giter Club logo

boxclip's Introduction

Boxclip is a 2D platformer engine, with an emphasis on interactive map editing. Built using the LÖVE2D framework.

Maps can be created with the custom built-in map editor. Simply drop and place entities into the world to create a level.

1

Get the development branch

$ git clone --recursive [email protected]:Jigoku/boxclip.git

NOTE: if you download the generated "zip" archive, the game will fail to run, as submodules are not included with this method, you will need to run the above command to pull in the required submodules)

Run the game/engine

Install love2d (at least version 11.1), and simply type love . in the src/ directory or you can create a love executable which can be ran directly by using the Makefile:

$ make && make all

2

Features

  • game mode
  • editor mode
  • fully customizable world
  • STALKER-X (camera module)
  • simple AABB collisions
  • gravity / velocity
  • moving platforms
  • player powerups
  • destroyable crate pickups
  • springs / bumpers
  • traps / enemies
  • unlimited map size restrictions
  • map states

Visit the Wiki for help with game controls and editor tips.

Downloads

You can get the latest release builds from here.

Using the editor

(click the image to play) youtube

Note

Please note this is alpha software, there is no stable release yet. Currently the plans are to have a box collision based world with a map editor, and simple path-based enemies. This may change at any time!

3

boxclip's People

Contributors

jigoku avatar rufio72 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

boxclip's Issues

Filter enemy movement to world:inview()

Don't move enemies unless they are on screen.

This might help with speed in the long term. Also makes some enemies predictable, which can be useful for creating bounce/jump courses throughout a level, making things less chaotic for speed running etc.

Add 'shooter' enemy type

This would be sitting in one place.

Ideas;

  • Apply gravity so it's fixed to the structure below it, rather than manually fiddling to the pixel level.
  • When player is within a certain range, it shoots a projectile depending left or right side.
  • Cannot be killed
  • Player can stand on top of it however.

Add platform 'clip type'

Secondary platforms that do not collide with left/right/bottom sides.

This could be used to create more interesting maps.

Implement sweptAABB

Sometimes (rarely) collisions fail to resolve... usually if gravity is set to a stupid amount, or the system freezes momentarily.

Highly noticable when loading a VERY laggy and messy map. many enemy entitys will just decide to plop through the platform and die.

Add 'layers' to world

add layers;

  1. back layer (non collision background images; eg trees or other detail)
  2. middle layer (collision objects, 'structures' here)
  3. front layer (non collision foreground images)

Add 'hopper' enemy type

Like the walker, it has a fixed movement area with no left/right collisions, but jumps back and forth instead.

add world death area

groundLevel should be removed (changed) to be a deathzone.

world platforms would reside above it. deathzone should be able to be set as water (drown), lava (die) etc. This way pickups can fall into the deathzone and be destroyed, aswell as the player losing a life.

Add entity browser to editor

Should be keyboard/mouse controlled, by either a popup menu (keybind, eg M for menu?) or small corridor style menu at edge of screen. Should be scrollable to select entity type, showing a preview/name.

Why? Because there are now 9 entity types that can be added to the world, and 1-9 binds have been used up.

Add 'spinner' enemy type

Appearance would be a ball with a chain attached to a spiked ball rotating around it.

  • No gravity
  • Can be given a movex or movey parameter

Implement 'death' material

Can be added to world like the platform with click/drag, but appears as a shaded area (transparent) in the editor. Not visible in world but kills objects that collide with it.

Look into how *.love files are built

As of now, *.love reaches above 12MB... is this ideal? Might be better to try and separate the assets, so that only script files are stored within the executable.

Clean up LICENSE information for assets

This would be easier to organize LICENSE files (one per folder) similar to how some other FOSS games do it.

eg;

graphics/<AUTHOR>/file1.png
graphics/<AUTHOR>/LICENSE

Add 'falling spike' enemy

Like the icicle/spike enemies, but falls when you are below it, and collides with the ground below.
If it collides with player, it kills.

Add 'roamer' enemy type

This would check for collision with objects, and if it collides, it simply switches direction.

Add bouncing to pickups

When a crate is destroyed, add velocity depending on the side the crate was hit, and bounce momentarily before stopping.

test maps fail to load when compiled ot love executable

$ love platform_engine.love 
Error: cannot open maps/test.map: No such file or directory
stack traceback:
    [C]: in function 'dofile'
    world.lua:104: in function 'loadMap'
    main.lua:23: in function 'load'
    [string "boot.lua"]:418: in function <[string "boot.lua"]:413>
    [C]: in function 'xpcall'

Add 'doorway' entity

This could be used for loading another map, ie; challenge room, hidden room etc.

Choose a better project name

Zippy | Too many projects relating to platformers already use Zippy it turns out...
Boxclip | Generic, boring, descriptive engine name

Find something else!

Add key/chest entities

  • keys as pickup types
  • chests similar to crates
  • can only be opened if key has been collected
  • red key, opens red chest, etc.
  • one colour type per level.

Editor kp numbers need to be reworked

moving platforms are bugged when trying to reposition, also needs to have other entity types added (particularly, crates, and other non-gravity applied objects)

Add rotation option to spike enemy

Add a switch to this; eg enemies:spike(x,y,dir)

0 facing up
1 facing down
2 facing left
3 facing right

would allow spikes on platform ceilings or platform sides.

Mouse selection of world entity ordering

when selecting ents in an area that overlaps (of the same kind).

eg; platform over platform over platform. the oldest/lowest layer platform is selected for actions like deleting. most recently placed ent should be selected instead.

add some kind of reordering to platforms.

Add 'floater' enemy type

Like the walker, except there is no gravity applied. Can be used for weak flying enemies.
These shouldn't clip platforms either.

More world props needed

Arches, pillars, meshes, grates, fences, other generic platformer structures, etc.

They can be coloured or greyscal (to be themed with the world pallette/theme). These are objects that never collide with anything, but just add some detail to the world.

Example:
c

This gives a small depth illusion and appears to be supporting the platform above.
d

Or used as a tunnel support/entrance
s4

Fix camera scaling

Looks okay in "game" mode. But changing the scale gets broken in editor.
Also effects minimap view in the editor mode.

Fix collision twitching.

On a solid structure, holding right or left, causes tiny amount of pixel fighting, adjust this to make the object stay still.

Implement mapstates

If no checkpoint has been activated, and we die... we can simply reload the map.

If a checkpoint is activated, we want to store all states of entities...
*crate
*enemies
*pickups

etc

So that when we die after activating a checkpoint, we make sure collected/killed/destroyed entities collected after dying are restored to the last checkpoint state.

Might be simpler to fix this, by getting rid of all tables named "pickups" "crates" "enemies" etc, and merge them into entities={ ... }, activating a checkpoint would create a new_entities={ ... } table, when dying load up the new table?

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.