SuperCool a simple FPS game


TL;DR - This is an FPS game inspired on SuperHot made in an academic class in 2017 and now available on

Do you want to read the full story OK then, :)… I spotted on a list of older projects this one that was made on a tight window (3/4 weeks that must be scheduler with other classes). After finding that it still works, I decided to try to use the GitHub-pages to statically serve this project and to my surprise it was pretty straightforward.

So, here I am to share this project. To be honest, it has a lot of bugs and incomplete features. However I think it can be helpful to someone that was a similar project. The code/logic and custom resources that we used/made are available here:

Unfortunately, since the project is from November 2017 we are using a three.js version from that time, which is certainly outdated.

In the end, we were able to implement the following features:

  • Basic game engine with basic physics
  • Game mechanics (inspired on SuperHot)
  • Collisions, majorly based in raycast (at that time I didn’t like to use the bounding box system)
  • Custom models
  • Audio clips that we found online
  • Enemy pools for performance and other tricks for performance
  • Simple GUI

As a final note, this project was made by me (Tiago Almeida) and my classmate (Yuriy Muryn), with an equal distribution of work. Also, it runs smoothly on google chrome


This is cool alright! Good job! PLEASE keep up the GREAT work! Can you switch the collision to bounding box & allow for terrain sloping? ( AKA, you try to climb up a very steep part of a mountain & you slowly stop & slide down )

1 Like

Thanks a lot for the kind words :). I appreciate the feedback and indeed I agree that the bounding box would be the correct implementation and I never thought of the terrain sloping… it would be a simple detail that offers more engagement, but currently, I do not have time to speend in a 3 years old project xD so maybe as a hobby in the future, I try to finish this :slight_smile:

And we had also a lot of ideas that at the time were not possible, like:

Us: Let’s make the only source of light been the bullets that are traveling the map!!
Three.js: Nop, no can do… Or I will literally fry your computer, noobs!!

Awesome work! Really smooth too :smiley:
I have two questions Im a little curious about:

  • How am I getting 100+ fps in Stats when I never go above 60? (I never set any additional browser settings)
  • Why do the enemies move only when the player moves? Pretty unique game design.
1 Like

Inspired by this :slight_smile:


Very much appreciated :slight_smile:

I am not sure if I understood and since this project is quite old the behavior of the stats.js may also be outdated. So what I can add to this, it is that the stats are always updated at the end of the engine main loop so at least this number corresponds to the iterations performer by the main loop (it should correlate with the number of renderers?? but not sure), but its only a speculation I can be wrong tho… take it with a grain of salt

It was like @prisoner849 said

Cool project! In my opinion, it will be better to use OBB’s for handling collision. Maps like these can be easily broken down into OBB’s. You can also approximate the enemies into boxes.

Or if you plan to have everything aligned to the world axes (ie not rotated), you can go for AABB’s. AABB’s just need 3 overlap checks. OBB will need 15 overlap checks.

1 Like

Thanks for the feedback :slight_smile: … yeah, although I did not use BB, I share that opinion to and appreciated the additional info on this subject.

1 Like