Coder Social home page Coder Social logo

therealcatherine / stagemechanic Goto Github PK

View Code? Open in Web Editor NEW
14.0 5.0 2.0 3.15 GB

Mirror of the official GitLab hosted project

License: BSD 3-Clause "New" or "Revised" License

C# 94.21% ShaderLab 4.41% HTML 0.56% HLSL 0.41% GLSL 0.41%
catherine unity robo5 pushmo csharp cross-platform bsd-license creative-commons public-domain level-editor

stagemechanic's Introduction

StageMechanic

About / Downloads

We are creating a game engine that allows one to play, create, and share 3D-tile/block based games.

StageMechanic is currently in Early Access and is available for PC and web through GameJolt.

StageMechanic for Android is available in the Google Play Store

Target audences

Education and Makers Movement

We include a built-in level editor that acts as the star of the show.

This project is being developed as a teaching aid for beginning game development students - ages 5 and up including adults. A primary goal of the project is to fill a gap between game creation tools like Bloxels and more advanced tools like Game Maker Studio.

With StageMechanic you are not just playing a game someone else made - you have the opportunity to create your own game and to learn from and build on games that others create.

For the casual aspiring creator, we offer a range of pre-made blocks and characters with different mechanics and creator-defined properties.

Intermediate level creators can use the built-in Lua interpreter and code editor to modify all of the built in blocks, items, and characters and even create their own original mechanics. In the future users will also be able to easily import their own 3D models create in tools like MagicaVoxel and Tinkercad as well as create their own music, sound effects, etc.

Advanced users have full acess to the project's C# source code, allowing for infinite custamizability. As a professionally engineered and developed non-trivial project, StageMechanic offers a unique chance for students to move beyond tutorials and get hands on experience in a complex real-world game.

AI Researchers

Future versions of StageMechanic will include both the Encog neural network library and TensorFlow accessable via the built-in Lua interpreter and code editor, allowing real-time AI experimentation.

Block-pushing game fans

Fans of games such as Sokoban, Catherine, Robo5, and Pushmo will find pre-made blocks and items with mechanics inspired by these games - all fully customizable and reprogrammable.

2D tile-based game-creation tool users

Users of game-creation tools like Super Mario Maker and Bloxels will find many of the same concepts in StageMechanic. You can create your own levels using the built-in level editor, play your own levels, share your levels, and play levels created by others.

Unlike these games, StageMechanic is in 3D space and includes the possibility to script custom game mechanics - allowing for much more complex games. The built-in block and item types helps keep things simple for those just getting started.

Game Developers

StageMechanic is BSD licensed allowing anyone to create their own open-source or commercial games based on our engine. See below for more information on licensing.

Licensing

This project is being developed as an open-source project entirely by volunteers. The resulting application is made freely available to users and all source code made freely available to developers/artists/etc.

We are using the BSD 3-clause license. This allows maximum freedom while protecting contributors. Essentially anyone is allowed to do whatever they want to with anything published as part of this project.

Please note that some individual assets may be under other, compatible licenses inclyding CC0, CC-BY, or the Unity Store license. Please see in-game credits, asset filenames, in-folder license files, and the LICENSE-EXCEPTIONS file for additional information.

Contribting

This project is being developed entirely by volunteers. If there is anything you would like to work on please join our Discord chat and let us know. Pretty much no matter what it is we can find a way to fit it in. Our project manager often says "do what you want, when you want, for as long as you want" and applies this not only to life but to project management.

Tools/technologies used

  • Game Engine: Unity (Latest Version)
  • Primary Scripting Language: C# 7.0
  • 3D Modeling: Blender
  • 2D Painting: Photoshop, Affinity Designer, Clip Studio Paint, Filter Forge, Substance Designer/Painter, etc.

Note: Contributors may use other tools that work with the common formats so long as they have appropriate licenses to use those tools for creating contributions to a BSD+CC0 licensed project. For example the Student version of Z-Brush is not compatible because it only allows educational use.

Getting Started

Step 1: Play at least one of the following games

Step 2: Join our Discord Chat: https://discord.gg/w7y8u5g

Step 3: Download and install the latest version on Unity Hub: https://unity3d.com/

Step 4: Install Github Desktop (or other Git client)

stagemechanic's People

Contributors

crispyhanako avatar deluze avatar frazerh avatar lavkib avatar mesamerunayami avatar therealcatherine avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

stagemechanic's Issues

Serialization not working on Android

Currently anything involving serialization does not work on Android. This includes undo/redo, loading, and saving. Its quite possible this is because right now all builds have been done using IL2CPP and this might be different in a Mono build... but so far no one has gotten a Mono build of this project to actually run. We may need to look into other serialization options on android.

Blocks Falling

Blocks fall into different positions when the same block is pushed. The first screenshot is before doing anything, the other three are after pushing the block in front of player in before, undoing, then pushing again. Each time they fall into different positions.

before
after ex3
after ex1
after ex2

Write backstory

What is the mythology behind our creation? While something like a story mode is outside the scope of our application, part of our ecosystem is compelling stories, and it would be swell if our application has one that can be told with the flair of at least a cheap romance novel.

Player climb animation

Players should have a climb or jump animation associated with climbing blocks.

Currently the player goes through several states when climbing. First the player is Idle, then they move to Approach while moving toward the block they are climbing, then Climbing, and then Centering as they move toward the center of the new block and then back to Idle. For moving from Sidle, players start from Sidle then go to Climbing then Centering

These states could be changed if there is compelling reason anmation wise to do so but note that currently some blocks check these states in a wat that they probably shouldn't

Cathy1 3-1 Easy collapsing

Crispy Hanako: Im going through the levels and so far 3-1 isn't right
when you go into play mode everything after the starting staircase falls

Player push/pull animations

The player character should have some kind of animation associated with pushing and pulling blocks, right now there is none. This could be the same or different animations for both actions.

UI for switching between play mode and edit mode

Right now the touchscreen controls have a button for switching between play and edit mode (but its not labeled as such) but desktop has no visible way of doing this. I'm not sure if this should be on the Main Menu or a separate button.

Player sidle pose/animation

Currently the player is in the same pose as the Idle position when sidling (handing on the side of a block), instead they should be obviously holding onto the block.

Support Rapunzel-style goal blocks

In Rapunzel when goal blocks are not supported the player dies. This might also be the case in Robo5

For now this can be added as a property of the Cathy1 goal block but later we should have it as part of a separate palette. If Robo5 works the same then it should be in that palette along with the other new blocks from that game.

Use Natural Sorting in the file dialogs

Right now you get things like:

1-SomeLevel.json
10-SomeOtherLevel.json
2-Level2.json
3-Level3.json
...

because the filenames are alphabetically instead of naturally sorted. There is lots of old advice on how to do this floating around using P/Invoke and a Windows XP-era DLL. This is not how we should do it - we need to find a cross-platform and modern solution.

Add destructive play mode option

Currently play mode is non-destructive but it might be nice to allow the player the option of destructive play mode - that is one that changes the definition of the level. This can be useful for playing and dropping into edit mode to make a small change then going back to play mode. An alternative implementation is a temporary edit mode that only effects the current play mode state

Cursor Movement On Save

After saving the name of a new level, the cursor moves towards the screen one grid space.

Design main character

Obviously we cannot use Vinny or the Prince models, and it would be nice if we have something more than a red dot indicating where the player position is while working solves.

Determine "Tricky parts" of Catherine levels

Make a list of the tricky parts of the Story Mode, Babel, and Colosseum puzzles perhaps using stage maps as found on the WIkia site: http://catherine.wikia.com/wiki/Walkthrough:Underground_Cemetery_1-1

As the initial development will focus on relatively small sections rather than entire levels, being able to isolate commonly encountered difficult sections should also help training players to think within the local patterns rather than getting lost in the global ones. Later in development full stages should be supported, but the desire for isolated "hard parts" will likely remain.

Visual indicator in edit mode for player start positions

Right now there is some legacy code that places a sheep or duck when pressing home or end but no indicator for player start positions. It should probably show the player avatar. Considering the sizes its probably easiest just to spawn the avatar but not allow input and just have them in idle state. If we want to get fancy a "sleeping" animation where they have little z's coming out would be super cute.

Player to Player collision detection

Right now players can occupy the same space but players attempting to move into the same spot should be prevented. We can also add a "pillowfighting" option to allow players to attack one another but this isn't strictly necessary for the first release.

Player button mapping UI improvements

Right now only spawned players have a button mapping UI (though this may be fixable by having players spawned in edit mode) and only Player1 is supported in the (ugly) button mapping dialog. Additionally there is currently no way other than pressing F1 to open this dialog.

Really player character classes should also return different default buttons based on the player number and should save button mapping information between sessions in the registry, but this can be opened as a separate issue.

Determine frame data

Number-of-frame-per-movement data has been pretty well documented. It may need to be determined if there is variation between modes (babel/story mode/etc) and what difference things like alcohol level make in this regard. This data will be used for optimal-time calculations in the AI solver later on in development.

Turn+move keypresses

Right now tuning and moving one space requires 2 keypresses, this should be one keypress except in certain cases.

Horizontal Pull bug

You can grab onto a block and then walk perpendicular to the direction the player is facing to pull blocks horizontally.

Create block skins

Each type of block will need 2D texture artwork identifying its type. These should be different than the copyrighted artwork found in Catherine but similar enough to not disrupt gross pattern recognition by the player

Sidle on cracked blocks

When player sidles with a cracked block under them, the block still breaks, on the other side, if player pulls a block while on a cracked blocked and goes into sidle the block does not break further.

Block neighbor detection improvements

At least with the current physics system blocks need to know not only what blocks support them but also what blocks they support. This involves running 10 separate overlap spheres, 1 for each possible position, any time a block needs to update its cache. This can almost certainly be reduced to 2 carefully places spheres that only overlap with the self, above/below, left, right, back, and forward - probably by locating it around (-/+)0.7 with a size of 0.6

This may or mat not even be beneficial, it would take measuring to determine.

Editor

After having saved a file, played it and reset with F5, the blocks that where saved in the file do not allow for being deleted. New blocks can be created and deleted, but those saved before the reset are unable to be tampered with.

Grab 360 Controller Upwarp

I press "A" on the 360 controller beneath a block and it teleports me on top of it. The 360 controller seems to cycle the Player1 State starting from idle, to approach then climb, finally back to idle. holding shift on keyboard doesn't seem to do that.

https://youtu.be/cS-ehl0nv2s

Create UI for loading stages from web URLs

We already support loading stage data from remote URL's but there is no UI for inputting these. Eventually we will probably have a special server that hosts user-made content, but for now simply inputting a remote URL string is sufficient.

Probably we could add a button right under the other load button on the main menu for doing a remote load - or even better would be adding like a globe icon to the file browser that will switch it to url mode (but of course our file browser is 3rd party but we have already deviated from the source slightly with it anyway)

In InputManager right now there are lines like the following:

else if(Input.GetKeyDown(KeyCode.Keypad1) && ctrlDown)
{
            Serializer.LoadFileUsingHTTP(new Uri("http://raw.githubusercontent.com/TheRealCatherine/StageMechanic/master/StageMechanic/Stages/Testing/Cathy1/Easy/1-1.json"));
}

These load various Cathy1 levels from the git repository for easy testing purposes. The same formula can be applied to user-inputted URL's. As of right now there is no way to determine if the operation was successful (other than perhaps checking if BlockManager has any blocks) but most likely Serializer.LoadFileUsingHTTP will either return a bool or Serializer will have some flag that can be checked (or perhaps there may be some option for callbacks or something)

UI for placing player start positions

We need to add a UI for placing player start positions. It should be similar to the block-placing UI and probably just to the left of it (maybe block UI on the far right, then Item UI and then player UI or include the Player placing UI in the Item UI.

It should have three icons representing players 1-3, like with the block icons these can be easily made using the green-screen skybox and snipping tool.

Determine Qt5 suitability

Qt3D as found in the latest Qt5 seems to be a good candidate for development in lieu of a full game engine. This will need to be investigated.

File Naming

While attempting to name files within the editor, it continues to accept the keystrokes in editior and interprets the keystroke inputs as naming.

Fix/improve EDGE particle effect

Currently the EDGE particle effect only plays when blocks go from Falling to EDGE, not from any other state. Additionally it only plays on the left and right bottom sides and not the front and back. The positioning is probably wrong and the effect just a placeholder.

We need to create a new particle effect and have it play on all affected edges whenever the block moves into edge state.

Basic block normals

Basic block shadow is not solid. Inside edge of front where it connects light shines through when the shadow is cast. Uploaded screenshot so example can be seen.
shadow glitch

Player sidle-to animation

Depends on Issue #39

When the player is currently sidling (hanging on the edge of a block) and moving left or right there is no animation at the moment. They should be moving their outstretched arms or something to show they are moving to another block. Currently there is the Sidle state to indicate idle while hanging on the side and SidleTo to indicate moving while hanging on the side.

Design block palette

The block palette in design mode will need to be designed. should this be an overlay in 3d space? something within the 2d main window?

Create solver AI

This is a longer-term project goal.

Ideally there would be a mode that shows all possible next moves that lead to a solve and best/worst/average number of moves (and/or amount of time for those moves) for each possible move.

This should have several possible options such as being able to just use it to get a hint.

Detect if UI element is above a block when clicking in the block list

In Edit Mode on the right hand side there is a list of block types that can be placed ,but if a block is behind where the user clicks it will select the block (and maybe also place the new one too) due to a click handler in AbstractBlock. The click handler is so the user can easily select blocks using the mouse but it doesn't take into account UI elements.

Push Sidle bug

Turns out if you sidle to a block then push it without unsidling, it still thinks the block is there. Whenever you press the grab button in Catherine it makes you unsidle, seems like a reasonable fix.

https://youtu.be/8Vxzps57yFw

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.