New Hype Game using Trigonometry Functions

Just finished a rough draft of a new Javascript retro game. Would love to have any usability feedback from people. It requires a keyboard, so you can’t play it on a touchscreen or smartphone.

The game is based off a VERY OLD Apple II game I used to play as a kid. While primitive compared to todays games, it was a little challenging since I had to brush up on trigonometry to make things work.

It’s still “Beta” so if you find any bugs/glitches, please let me know which Operating System and Browser you are using. Thanks!


Music is a bit loud :headphones: off the cuff! Maybe an option to turn down or reduce it behind the scenes?

1 Like

Thanks. Equalizing audio is something I’m still working on. Appreciate the feedback!

no worries! Made me jump at first :smiley: and then became a little annoying that I couldn’t turn it down but of course I could turn my comp volume down but that’s normally that’s quite high :wink:

Great old school game though. A leaderboard would be good :wink:

1 Like

Very fun! :video_game:

Sometimes slamming on control while moving the aim will result in a freeze but I think I was just jamming on the arcade controls a bit too hard :slight_smile:

1 Like

Nice! The hit detection was spot on and I felt it was easy to get a grasp on playing.

  • Control-left-arrow on Safari seems to be the back button, so I accidentally hit this and exited the game
  • It’d be nice if the initial screen animations were faster and/or there was a way to bypass them to get back into the game
  • I wish the turret angle was wider

I was also wondering about the color palette… are the colors restricted to the Apple II (or similar cga/ega/vga) palettes?

1 Like


I would have gone with spacebar to fire! For these reasons

Yeah. I felt this was too long and also having the instructions read back after playing I felt wasn’t needed.

missing a few kills there :smiley:

1 Like
  • It’d be nice if the initial screen animations were faster and/or there was a way to bypass them to get back into the game

For some of the functions, I had to use global variables. The only way I know how to do that in Hype is to use something like “window.gameOver = false;” in order for a value to go between scenes and functions. Because of that, I had the game jump from the shot summary scene to the splash scene and reset all of the global variables with window.whatever.

Is there a better way to handle global variables between different functions in Hype? If I could figure that out, I’d have it jump to the scene where the game actually begins.

On a different note, I picked the Ctrl key for firing due to old habits from playing Doom. Plus you don’t have to worry about keyboard repeat rates with the Ctrl key. Good to know about the issue with Ctrl+Left arrow in Safari. Thanks for the feedback!

What a hoot and fun to play… again & again!

I would echo many of the previous comments (but had no issue with the control key as the firing mechanism) & add one and a half…

If there is a counter of the amount of shots You have left I missed it - if there isn’t one it would be useful to include… and maybe two levels - beginner with unlimited ammo - expert with “x” amount.

1 Like

Hi Darren,

you could use the hypeDocument-Object to store data to share across the document.

for example:

hypeDocument['gameData'] =
any : 'thing',
you : funktion(){},
want : true
1 Like

Really nice :grin: but CTRL for fire key results not only in Safari browser back behavior but I’m here also scrolling through my desktops. :wink:

1 Like

That’s how I do it, since globals are part of the window object anyhow. The only other way I’ve seen that makes sense is @h_classen’s suggestion to put them on the hypeDocument object since that will work in the face of multiple hype documents on one page and also not conflict with any other global namespace. (Of course you may be at a rare risk of colliding with a future Hype API if you don’t name it distinctive enough!)

In this case perhaps storage that persists across page reloads would be better for determining if you’ve read the load screen? Cookies or localstorage?

1 Like

Thanks! I thought about adding something like that, similar to the “Percentage hit” and “Percentage Missed” messages you received at the end of Galaga. If I have time I will add it in. Thanks so much for the feedback!

1 Like


I’ve been looking for this type of solution for a long time. Thanks so much for pointing it out.

I’ve made some minor changes and just posted the updated results on my website. (Changed the cannon angle range and switched to spacebar instead of ctrl). I will have to allocate a little more time to change all my global variables into hypeDocument Objects but hopefully will get this done in the next week. (Assuming nothing major happens at my regular job in the next few days.)

Thanks again.

1 Like

Just fixed that. The new version now uses Space Bar instead of Ctrl. Thanks for the feedback!

1 Like

Cookies would be an interesting solution.

I just finished two minor changes based on feedback. The gun angle is about 20 degrees wider than before. Also, swapped the Ctrl input with Spacebar to fire. Going to try to re-write everything using the solution posed by @h_classen but that will take a little more time.

Thanks so much for the feedback!

1 Like

What about a visual indicator for the max angle? That way players would more intuitively know if they can rotate that far to make the shot or not.


Even though it’s been suggested I would avoid but only because there is a possibility that something might break down the line if say the Hype API added a property that had the same name BUT there is probably a small chance of this happening.

I’m wondering if there could be a particular property set aside for this? like “global” or “data”? agreed beforehand so that there wouldn’t be this conflict. = {


Other arguments for not using global scope is memory performance too which is apt as you are designing games but again this is all up for discussion and I would look at each as you build individual projects.

1 Like

I’d be fine having a name reserved. I’d probably say not global as it is semi inaccurate since it is inherently scoped to the hype document. data would be fine with me but is a bit generic so maybe there’s a better term?

1 Like

customNamespace, userNamespace, reservedNamespace, …