---
title: "Untitled Submarine Game"
description: "Early tech demo game written in TypeScript, Svelte, and Three.js, featuring procedurally generated terrain using Perlin noise and Marching Cubes."
tags:
  - "Game Development"
  - "Three.js"
  - "TypeScript"
canonical: "https://portfolio.rospo.dev/projects/untitled-submarine-game"
html: "https://portfolio.rospo.dev/projects/untitled-submarine-game"
---

# Untitled Submarine Game

Untitled Submarine Game was a tech demo "game" that I wrote from May to October 2023. For a long time, this was my largest project. It's written in Typescript, Svelte, and Three.js. The terrain is entirely procedurally generated using Perlin noise and Marching Cubes.

It was a fun project to work on, and I learned a lot about Three.js, Svelte, and TypeScript. The game is not complete, but it is a neat demo. This is included here mostly for an archive of my work, and to show off some of the things I learned while working on it. The game is not particularly fun to play, but it was a great learning experience.

#### Controls

- W - move forward relative to view
- A - move left relative to view
- S - move back relative to view
- D - move right relative to view
- R - move up relative to view
- F - move down relative to view

- I - pitch up
- K - pitch down
- J - yaw left
- L - yaw right
- U - roll clockwise
- O - roll counterclockwise

- P - pause

In short, **WASD is normal movement, RF is up/down. IJKL is rotation, UO is roll clockwise/counterclockwise. P for pause.**

[Open the interactive demo](https://marchingcubesjs.pages.dev/)
