Giter Site home page Giter Site logo

keyteki's Introduction

Keyteki

Web based implementation of Keyforge: the Unique Deck Game

FAQ

What is it?

This is the respository for the code internally known as keyteki which is running on thecrucible.online allowing people to play KeyForge online using only their browser

Does't this look a lot like Jinteki/Throneteki? The Android netrunner/AGOT online experience?

Glad you noticed! Yes, jinteki was a huge inspiration for this project, as the interface is clean and user friendly, so I've tried to make this similar in a lot of ways

Keyteki is a fork of the ringteki sourcecode

Can I contribute?

Sure! The code is written in node.js(server) and react.js(client). Feel free to make suggestions, implement new cards, refactor bits of the code that are a bit clunky(there's a few of those atm), raise pull requests or submit bug reports

If you are going to contribute code, try and follow the style of the existing code as much as possible and talk to me before engaging in any big refactors. Also bear in mind there is an .eslintrc file in the project so try to follow those rules.

Documentation for implementing cards

There is also a list of events raised by the code here. If you're writing abilities which listen for these events, it tells you what parameters the event has and whether it has a handler. If you're writing code which calls any of these events, please make sure you pass the same parameters.

The biggest help at the moment would be in terms of CSS, as that's a bit of a weakness of mine, feel free to pick up any of the issues tagged 'CSS' in the issue list.

If you're not coding inclined, then just playing games on the site, and reporting bugs and issues that you find is a big help

X Y Z doesn't work

That's not a question, but that still sucks, sorry :( First, bear in mind the site is in its infancy so a lot of things aren't implemented yet, but you should be able to do most things with a bit of manual input. If there's anything you can't do that you need to be able to do, let me know by raising an issue.

See this document for features I have planned and a link to the currently implemented cards:

How do I do X Y Z?

Check out the About page of Keyteki live deployment.

Development

Docker

If you have docker installed, you can use the containerised version of the site.

Clone the repository
git submodule init
git submodule update
npm install
docker-compose up

(in another terminal)
docker-compose exec lobby node server/scripts/fetchdata

Non Docker

Required Software

  • Git
  • Node.js 8
  • MongoDB
  • ZeroMQ Libraries
Clone the repository
git submodule init
git submodule update
npm install # See https://github.com/JustinTulloss/zeromq.node/issues/283 for zmq errors on OS X
mkdir server/logs

Create config/local.json and put the following in it:

{
    dbPath: 'mongodb://localhost:27017/keyforge',
    mqHost: 'localhost',

    lobby: {
        port: 4000
    },

    gameNode: {
        hostname: 'localhost'
    }
}
node server/scripts/fetchdata.js
node .
node server/gamenode

There are two exectuable components and you'll need to configure/run both to run a local server. First is the lobby server and then there are game nodes. The default configurations assume you are running mongo locally on the default port. If you need to change any configurations, edit config/default.json5 or create a config/local.json5 configuration that overrides any desired settings.

For production:

npm run build-vendor
npm run build
NODE_ENV=production PORT=4000 node .

Then for each game node (typically one per CPU/core):

PORT={port} SERVER={node-name} node server/gamenode

Running and Testing

The game server should be accessible by browsing to localhost:4000.

You can register 2 or more users, to play against yourself. They can have fake email addresses. You can login as both users either from 2 different browsers, or by using an incognito window.

These users will be normal (non-admin) users. To escalate a user to the admin role requires manual edits to the Mongo database, but that is not required for testing in-game functionality.

If you implement or make changes to a card, you can use manual mode to add it to a deck from within a game. Use manual mode, and the command:

/add-card <card name>

Before you run the unit tests, be sure all the necessary dependencies are installed

npm install

Then, to run the tests:

npm test

Coding Guidelines

All JavaScript code included in Ringteki should pass (no errors, no warnings) linting by ESLint, according to the rules defined in .eslintrc at the root of this repo. To manually check that that is indeed the case install ESLint and run

npm run lint

from repository's root.

All tests should also pass. To run these manually do:

npm test

If you are making any game engine changes, these will not be accepted without unit tests to cover them.

Discord Discusson

Keyteki Discord Server

keyteki's People

Contributors

jeremylarner avatar gryffon avatar cryogen avatar ystros avatar duketax avatar snarkattack avatar zacchiro avatar cdmayberry avatar devofdisaster avatar cody1024d avatar achocholacek avatar cavnak avatar kwaice avatar markjbyrne81 avatar alex-whitney avatar artemmikhalitsin avatar noahtheduke avatar zacharyp avatar syrail avatar peterh139 avatar saelvarath avatar pizzamarinara avatar admanb avatar johnwaltz avatar xworkerbeex avatar tgreaves avatar bwootten avatar dahrasz avatar perley avatar codebaboon avatar

Watchers

James Cloos avatar

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.