Copyright © 2021 Michael Allen C. Isaac. Tel: +1 (971) 208-7901.
Work in Progress
- Lobbies (3 - 4 max players)
- We should instantiate a server.js process and load balance it somehow, https://vectorz.io/9100 would to an instance (or some other silly magic)
- Probably with Node clustering.
- Modify size and position of mobile controls to improve egonomics
- When a Rock is broken the fragments should continue the same general direction, +/- the force of the bullet.
- If we shoot it from behind, fragments will be faster.
- If we shoot it from the front, fragments will be slower and perhaps with a wider angle of divergence.
- Tilt phone to steer ship?
- Prevent the screen from rotating on mobile, so mobile users can play natively in Portrait mode.
- Landing page with quick explainer about controls, name input, and play button (ala slither.io & hexar.io)
- Accounts/Reserved display names
- A prototype of this has been implemented but development of this is paused, for now we use an arcade style leaderboard with the top 10 scores
- Reserve the name associated with your score
- Ability to track statistics, shots fired/hit, score, etc
DESIGN NOTES (FUTURE STATE)
- Better graphics
- Better color, visual effects, etc. think Radiant by Hexage
- PixiJS for rendering
- When Rocks break, chance they generate a power-up tokens:
- Laser (instant, no travel time. Maybe a continuous mode)
- Spread Fire
- Extra re-spawn/life (will there be limit of re-spawns?)
- Speed boost
- Hyperspace/FTL (Battlestar Galactica style, jump randomly to a safe place)
- Missiles (heat seeking, target is selectable (press T to rotate or something)
- Ammo clip size
- Fly over to retrieve, or shoot to retrieve?
- PvP Scores
- PvE Scores
- Smaller/Faster Rocks are worth more
- Difficulty: the highest scoring player will affect the speed of newly spawned Rocks
- If you completely breakdown a Rock with 100% accuracy, it’s worth 52 points
RPG Features (what we’ll call Freespace Mode):
- Map is enormous and ships fly unrestricted throughout space
- When the ship reaches the edge of the screen, the viewable area will be pushed the direction of flight
- Mini-map will show the player’s relative position on the greater playing/space grid
- Show other players, concentration of Rocks, events, etc.
- Popup event-mode
- Rewards for completion
- Incentivizes PvP interaction by encouraging players to come in contact with each other
- Battle Royal event mode
- Player Statistics
- Kills to Death ratio
- Inventory of Power-ups. May be un/equipped as needed
- Credit system to buy power-up. Earn credit by mining Rocks?
Note: Changes prior to 2021 have been truncated from display. Not a ton of value there.
- First attempt at clustering complete, and seems to be functional. However, I am not 100% commited to it’s reliability 😂
- Improved generateShipExplosion() by passing a copy of a ship to it, this is how generateRockExplosion() works.
- Decreased the number of explosion particles for Rocks.
- Cleaned up particle generation on the client side when the window is not in focus, this prevents a mass of explosions when the window focus returns.
- Changed markdown rendering library from markedjs to markdown-it.
- Removed warning message when navigating away, or reloading the page.
- Revised on-screen logo and header text, moved name/help menu to settings icon.
- Added new text on the settings pop-up, and a link to the README.
- Renamed several internal variables to provide continuity.
- Cleaned up directory structure and moved files to more appropriate locations. Very clean.
- Limited the number of loose bullets per player to 3. Added visual indicator to bullets available to shoot.
- Updated ship renderShips() to use Path2D() objects with stroke().
- Created new 8 new Ship designs, you may cycle through them with the comma and period keys.
- Fixed and issue with placement of Name badges under the ships.
- Dramatically improved ping reporting.
- Added a message to rotate the phone when it is in Portirate mode (however this broke iOS, so idk what to do. Make it an app?).
- Moved toast notifications for death to the bottom of the screen.
- Pivoting on the mobile controls. I have restored the client that uses HTML for controls rather than the touchscreen/canvas method.
- Implemented a new imageResource object which contains base64 encoded images, which are loaded in to Image() objects and then drawn directly on the Canvas
- New Glyph() class, which basically just wraps Image() with an x, y, properties: usage:
let sprite = new Glyph(); sprite.image.src = imageResource['attack-white'];
- Removed all HTML objects from the client.html, the only thing contained in the body is now the Canvas. All other UX is created programmatically