GithubHelp home page GithubHelp logo

ktah's Introduction

Imgur

K'tah! is a browser based, cooperative, class-oriented zombie survival game designed for true team play. Players not only work in synergy with, but also depend upon, one another in order to reach the highest levels of achievement. Unlike most titles in the genre, K'tah!'s gameplay requires players to route, outrun, and outsmart the zombie horde, rather than follow the usual hack, slash, and obliterate paradigm. Player accounts undergo progressive development, enriching class-play with added abilities and features. Few can survive the challenge of K'tah!; are you amongst them?

This project was developed as part of the LMU course CMSI 401. See the associated Prezi.

K'tah is in no way, shape, or form associated with katah (Գաթա). Please do not mistake this game for the Armenian bread.

ktah's People

Contributors

anyamairead avatar blinkstale avatar forns avatar hodavidhara avatar rowedonalde avatar rtoal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ktah's Issues

Integrate soundtracks

Two soundtrack files have been committed but they are orphaned, as in, not played.

Time to get them live.

Jade Cleanup

The jade templates should be cleaned up before we do any work on professional styling.

  1. In the HTML5 <script> tag, the type attribute defaults to "text/javascript" so type attributes should be removed.
  2. In the HTML5 <link> tag, when rel is stylesheet, the type attribute defaults to "text/css" so type attributes should be removed.
  3. I see css ids and classnames like button-upper-right and topLeftMargin. Those are SOOO not class names! Do not ever hint at something positional in a class name. Give then semantic names.
  4. Note also in item 3 above, am I to assume you went with dashes in names for ids and camel case for classes? Is there a reason for that choice or did you not notice the inconsistency?
  5. zombieTest.jade is obsolete and should be removed.

Monster id's in the model not being updated

The ajax post response is not successfully updating each monsters ID assigned by the server. When checked in the success function, the id shows up fine. But anything outside the success function is returning null for the id.

Game-setup flow requires various additions

Presently, a rudimentary flow exists for users to log in, join a game, and then begin playing:

Login / Register -> Main Menu -> Lobby -> Create / Join game (and enter a game room) -> Signal ready (wait for others if in a multiplayer lobby) -> Enter K'tah!

That said, there are various tweaks and additions that are ultimately required, including:

  1. [RESOLVED] Class selection must take place during the game room phase
  2. "Host" capabilities (like kicking other players) must be implemented for game rooms
  3. [RESOLVED] Class icon and reporting must be visible from both the lobby and game rooms
  4. [RESOLVED] Once in a game, clients need to make ajax calls to update their time stamp (lest the game close from no players pinging)
  5. [RESOLVED] Game creation criteria need to be enforced, like legal characters, character limits, and limiting the number of games a person can create in a given time frame.
  6. [RESOLVED] Players should not be able to send a URL request for a room or game--checks must be enforced to make sure that they follow the proper channels.

Monster synchronization

if a non-host computer loads before the host, all the things break, due to the fact that the monsters don't yet exist in the gamestate.

Implement joining and parting on chat

The server needs to send messages to chatters to notify them when another user joins or leaves. Presently, joining is handled by the client making a request to /chatjoin on page load, and parting is handled on unload. The former seems to have no inherent issues, but this method of parting poses the following problem: the unload event may not always fire. Perhaps I can handle this issue by creating a timeout for the server's responses to the clients' requests--if the server responds to a client's request but does not get a successive request (or the server's response get the equivalent of a 404 or whatever), the server parts the user automatically.

Collision and movement issues

  • Environmental collision via CopperCube defaults somehow break when there are n >= 2 players in a room, but work fine when it is only 1 player; that said, gravity works in both scenarios, evidenced by the unintentional awesomeness when you fall off the revised map (try it out, I dare you)
  • Zombie-on-Zombie collision sometimes breaks when the mouse controls are used, but not with standard keyboard movement
  • Movement speed seriously handicapped on machines with inferior hardware; Mouse controls are WAY faster than the keyboard ones

Players being able to join / rejoin a game in progress begets several issues

  • It allows for an exploit whereby the player's position will be reset and they will be immune for the duration of their having left
  • It causes graphical issues for players currently in the game
  • It could, even if everything was working as intended, allow for an exploit to reach high game levels

We should consider removing the ability to join a game that is in progress, it opens quite a few cans of worms.

When herders collide...

With multiple herders in play, the taunt ability can get funky. If a taunt happens in the middle of an already ongoing taunt, the target will be the most recent taunter (which I assume to be correct) but all taunting effects will end when the first taunt ends.

Some Chat users get duplicate messages

When using chat, some users see multiple copies of messages. This does not happen for all users at the same time. Also, the amount of duplication increases over time--for example, a user may not experience any duplication at first, but then later in the chat, duplication will start to happen.

Handle incoming messages for users in between requests

Because there needs to be a live request from a client for the server to route new messages to that client, if the client is in between requests (i.e., the client is still processing the response from the last request and hasn't sent out another), the client won't receive new messages. There needs to be functionality where the server recognizes that a logged-in client is in between requests and temporarily stores messages to send to the client when the client makes the next request.

Zombie Collision Detection

Currently not yet implemented, need to have discussion first between people who work on AI and people who work on collision detection.

Use Jade includes

There is a chunk of Jade code that is repeated several times in different templates.

#chat
  #connect
    Chat failed to connect! Infinite Sadness :(
  #loading
    loading
  #log
#toolbar
  span(class="chat-label") [Enter Message]
  input#entry(tabindex="1", type="text", size="75")

This should be factored out and included.

Information on jade includes is at: http://tjholowaychuk.com/post/7590787973/jade-mixins-includes

Security concern for miscreants using "posters" to modify gamestate

Dondi and I were discussing this issue and are concerned that anyone with ill intent may use a poster, like the Firefox poster, as a means of messing with the K'tah gamestate. This gives cheaters the capacity to return their player to full health, give themselves massive scores, or manipulate anything that functions from our Ajax calls.

One solution providing a sufficient amount of security would be to use an MD5 hash-key sent to, then expected from, a client with each get-post cycle; the key would be different each time, and would thwart almost all attempts to mess with the game.

Perhaps David could comment more on this with his experience in the MVC world, but a simple implementation may not be out of the question, nor would there be a whole lot of resultant overhead.

Scripts loading asynchronously leading to missing dependencies

Requirements:

  • Javascript imports that load in a predefined, linear, synchronous order to support base2 inheritance
  • Javascript imports that are debuggable via browser consoles

Issue:

  • No prepackaged resource that seems to accomplish this (or at least both requirements)

Attempts at resolution:

  • jQuery: Attempted to use the $.getScript() function, but scripts imported this way are not debuggable via browser consoles. In fact, errors that occur in scripts imported this way do not even show up, even though they are loaded correctly and synchronously.
  • RequireJS: Attempted to use the requirejs require() function to load an array of script locations, but they are not done so synchronously.
  • Browsed some Stack Overflow and Reddit forums attempting solutions proposed by members; none of them supported synchronous import

Collision Detection needs implementation

So far, known techniques are getCollisionPointWithLine and animator AnimatorCollisionResponse. Both require use with scene.getCollisionGeometry(), but neither has proven successful so far. Possible reasons may include too small a collision box on the ZombieSceneNode or too narrow of corridors in scene.

Fallback for parting from chat

Presently, a client notifies the chat server that they are leaving on the unload event. If the unload event doesn't fire (for example, if the client's browser crashes or loses network connection), then the server does not know that the client has left. There should be a fallback to detect whether a client is no longer there--perhaps kicking them if they haven't sent a request in the last 30 seconds.

CSS Styling

Per discussion in class, let's get some CSS going.

Move route definitions from app.js

Currently, app.js has a handful of route definitions, including {{/game/:gameId}}, {{/lobby}}, and a couple of tests. The former should be moved to the game controller and the latter to a new lobby controller.

The test routes should be removed if they are no longer relevant.

Automatic chat room creation

If a user requests to join by URI a chat room that does not exist yet, chat-controller should create that room. I've inserted the preliminary code to do this. For some reason, though, this block of code in GET chat is broken:

    if (typeof inbox[room] === undefined)
    {
      res.send( JSON.stringify({success: false}) );
    }
    else if (typeof inbox[room][nick] === undefined) //for some reason it still passes to here even if the room doesn't exist
    {
      res.send( JSON.stringify({success: false}) );
    }
    else
    {
      res.send( JSON.stringify({messages: inbox[room][nick].messages, success: true}) );
      inbox[room][nick].messages = [];
      inbox[room][nick].lastPing = time;
    }

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.