Limitless is a lovingly faithful recreation of the Halo Infinite menu in Next.js.
Most, but not all, menu screens are included.
A live demo is available here.
This app can be controlled with pretty much any input method, including:
- Xbox controllers (other controllers untested)
- Tabbed keyboard navigation + enter key
- Keyboard arrow keys etc. (QWERTY only, sorry Dvorak users!)
- Mouse
- Touch
Controller to keyboard mappings:
- D-Pad = Arrow Keys
- Start =
Space
- Select =
Escape
- Guide =
g
- A / B / X / Y =
a
/b
/x
/y
- Left and Right Triggers = Left and Right
Shift
- Left and Right Bumpers =
[
and]
- L3 and R3 =
,
and.
The original objectives where:
- To learn new tools and frameworks, such as threejs, emotion css, gamecontroller.js, and framer motion.
- To experiment with building a relatively complex app that is obsessively fluid and responsive. It can be used on any device, orientation, and screen size.
- To make something of a portfolio piece that is clean, well structured, and accessible.
- To satisfy a lifelong desire to make video game menus, as silly as that sounds.
- To generally get weird and solve unexpected challenges I haven't encountered before.
Cool but unplanned things that happened along the way:
- A decent set of hooks for using gamecontroller.js in React, which I would like to improve and open source as
react-portal-gun
. It can be used to instrument an existing React app simply by setting a fewtabIndex
s and defining "portals". Portals enable controller focus toteleport()
to other components as needed. - Everything is defined primarily with
vh
units, some%
units, and the occasionalvw
units. The couple of instances ofpx
units are for enforcingmin-*
properties that can otherwise fail to render sanely at certain viewpoint sizes (due to being <0.05px when rendered viavh
orvw
units). - Despite all the animation, the simultaneous input methods "just work" because everything is a link. Most transitions are handled via everyday
:focus
css. Even screen readers should find this a very easy app to navigate. - A slightly clever method of wrapping emotion css'
css
template tag with my own, that handles converting allvh
andvw
units to pixels when the "Force 4k" option is toggled. This option is necessary to ensure that everything matches up with the real menu, despite being fluid. Meanwhile wrapping emotion css was necessary due to the inherit conflict betweentransform: scale(...)
andvw
andvh
units, as the app can be scaled, but not necessarily the viewport. - The only media queries for responsiveness are
orientation
rules. There are no breakpoints. - Lots of fun and weird CSS tricks. Other than the obvious jpegs and some svgs for the buttons, everything is pure CSS.
- 343 for making an awesome Halo game and getting multiplayer into a really great spot before ceasing development. ❤️
- McCarthy3D (Spartan) and Glitch5970 (AR, BR, Sniper) for their 3D Halo models.
@emotion/css
@material-design-icons/svg
@react-three
+drei
+fiber
framer-motion
gamecontroller.js
react-swipeable
3D models are CC BY 4.0 DEED (see above), everything else is MIT.