Code Monkey home page Code Monkey 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

boxclip's Issues

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 'doorway' entity

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

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.

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.

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.

Fix camera scaling

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

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.

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.

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 '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

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.

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

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 '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.

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

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 'roamer' enemy type

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

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.

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.

Add 'hopper' enemy type

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

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.

Add platform 'clip type'

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

This could be used to create more interesting maps.

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)

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 '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 bouncing to pickups

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

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.