Giter VIP home page Giter VIP logo

xanadu's Introduction

XANADU

A game of precarious alliances and breaking fast on honeydew.

Xanadu is a text-based MUD set in 1910's East Asia. The Xanadu game client runs in your everyday web browser.

Please see the Wiki for more information.

Contributions welcome!

Build Status Build Status David Codacy Badge Codacy grade License

To run

... in development mode

Make sure you have

Then, run the following commands in the terminal:

$ npm install
$ npm run now

Debug page

First, make sure the --debug flag is passed when starting the server:

$ npm run launch -- --debug
# or
$ npm run launch:debug

To access the debug page (in the browser), visit localhost:<port>/debug.html.

It shows useful information about the game and player states.

xanadu's People

Contributors

abdulajet avatar ankitjain28may avatar cmelone avatar leondinh avatar lozord avatar oishikatta avatar rkakkar7 avatar zenbhang avatar zthomae avatar

Stargazers

 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

xanadu's Issues

Add Beasts

These are animals that are (pseudo-randomly) distributed throughout the map. They attack players (and maybe even each other). It would be cool to have different types/levels (with different AI's!).

Line-of-sight?

Related to vision in #24, should we an ability-based line-of-sight bonus (i.e. you can see into neighboring rooms)? I think this might be cool, but also possibly unfair and may be difficult to implement properly.

Better handling of sockets

It seems that we have open connections, even when all the sockets in a Server's this.sockets are disconnected (i.e. socket.disconnect(true)). This is likely causing the hang in #30 .

Types?

So, I tried VSCode this morning. It's pretty decent, and I noticed that there's a lot of support for TypeScript and other JS-related infrastructure stuff. @zthomae if you want to move to TS or whatever, I am definitely open to it.

In-Game Store

Add a Counter Strike (and Spelunky?)-type store/merchant to the starting room if people want to buy additional supplies with their in-game gold. For example, even if your character class doesn't start with a gun, you could buy one.

Style Echo Messages

Echo messages displayed in the client should have a styling (color? background-color? border?) to hint at the communication that was sent (e.g. a shout message might have a red outline on the sender's screen).

Organize CSS

main.css is quickly becoming a monolith. It would be nice to break it up into smaller files. Since we have to build the TS code to JS, we might want to move to Sass and then compile that to CSS, as well.

Add JSCS

Preferably the Google spec of JSCS ๐Ÿ˜„

Lobby should remove messaging prefixes

The lobby behavior should resemble the game's behavior of stripping messaging prefixes (like /t) if they are the start of the message.

Maybe there should be no default talk behavior for the lobby (i.e. maybe it should behave exactly the same as the game, just without the character-based restrictions on communication). Feel free to discuss...

Add jshint

  • jshint (dev dependency?)
  • jshint dotfile
  • npm run lint task

Add Lobby/Game Flip-flopping

After a game is finished, the currentContext should be set back to Lobby, which then proceeds to a Game and so on. I think a lot of this infrastructure is in place, but it should be throughly tested an make sense and work smoothly from a client/UI/UX perspective.

Implement Character Effects

These are things like poisoned, addicted, on fire, and more. When this issue is actively being worked on, I will update the Wiki to discuss Effects.

Concept of dark, light, torches, matches, etc?

I was thinking of something along the lines of Minecraft -- needing to carry torches and matches, etc to be able to get better room descriptions (especially if there is a look command). I could see this adding extra challenge ... or cruft. What do you think?

Create index.ts using client.ts as library

Instead of having a combination of helper function and executed code all in client.ts, I think it might be nice to create index.ts, which would only contain the executed code (i.e. call onDocumentReady). This leaves client.ts as an easily-testable function library!

Add a logger

We need to replace console.* with a logger that is better for testing, collecting data, etc.

Add continuous integration

My vote is for something like Travis since it is free for open source projects.

This might raise the question of deployment, but we can address that as necessary.

Decide where Character creation happens

Currently, character creation (where a character object is assigned to a player's character property) is done on Game construction, which is OK, but not great. I was thinking that when a player says they are ready, they can pass arguments for their character class (maybe allegiance and modifiers too?). If no additional information is given, then it should be pseudo-randomly generated, but the option to choose should exist.

Add contract/side-missions (?)

Another way to suggest that players act a certain way. Main importance is to keep players from leaving the cave early (e.g. "Chef must set up camp within a five room radius of the treasure room before he can leave."

Add Immutable

One of the goals of this project is to make the Game and all associated objects (like Characters, Items, Actions, etc.) immutable. To accomplish this, we will use the Immutable library. I've already started to "hit my head" on mutation errors with things like CharacterClasses (i.e. corrupting data by mutating pointers instead of "separate" objects). By using Immutable and its types, we can hopefully avoid these errors by having immutable "blueprints" that create separate objects (with unshared pointers), and avoid the overhead of classes. What do you think @zthomae ?

Allegiance bonuses

We need to hammer out allegiance bonuses to make sure they are fair (and also worthwhile to have in the game).

Add testing

Testings should be ran as npm run test. I'm enforcing (:sunglasses:) that we use Mocha, Chai, and Sinon for testing (as devDependencies). The testing directory test/ structure should mimic exactly the structure of dist/ (which mimics src/ via Babel).

Remove Player States

I think it would be better to compute proxies for these states off of certain available on the Player interface instead of having these pseudo-enum variables.

Style Scrollbars

I've done most of my development on OSX using Chrome, but I recently ran the client in Firefox on Ubuntu and the blatant white scrollbars weren't too sexy. It might be nice to have some sort of coherent, cross-browser styling using this jQuery library. It might even be cool to put a "Page Map" scroller over the client map.

Add roster to client

This should be some sort of tabular view component so players can see others' information (e.g. name, character class, allegiance, etc.). This would also be used for communication (e.g. clicking on another player's name instantly creates a chat/talk command for the player to fill out).

React on the client

Is this something we would want? I'm fine either way, as I don't know too much about React.

Create Favicon

I like the whole Fraktur style. Maybe a simple Fraktur "X"?

Decide client styling

What colors/color scheme should we use? (See main.css for some options.)
What fonts should we use? DEFINITELY needs to be monospace, so I was thinking one of these.

Singleplayer

By implementing a special character class and tinkering with how messages are handled, singleplayer could be a viable feature.

Even better would be to package an in-browser Server+Game for an easy-to-launch singleplayer experience.

Design general "Interaction" Model

In addition to dueling and general combat, we need some way to frame general interaction between players (this does not include :to chatting/whispering, shouting, etc. which are "global" to the game state). For example, an interaction might be the doctor/medic healing (or poisoning) another player, or two players trading items.

Create a Grid interface

This would be a generic interface (Grid<T>) that would be used instead of T[][]. It would allow for better abstraction and code de-specialization/clumping/copying.

Add debug/admin page

Should cleanly display game state information for debugging (and possibly spectating later on)

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.