All Projects → JohanLi → uncharted-waters-2

JohanLi / uncharted-waters-2

Licence: MIT license
Browser-based remake of Uncharted Waters: New Horizons (大航海時代II)

Programming Languages

typescript
32286 projects
HTML
75241 projects

Projects that are alternatives of or similar to uncharted-waters-2

Sulis
Turn based tactical RPG with several campaigns, written in Rust
Stars: ✭ 338 (+503.57%)
Mutual labels:  rpg, game-2d
flare
A Simple Browser Based Game.
Stars: ✭ 85 (+51.79%)
Mutual labels:  rpg, browser-game
AsLib
🎨: RPG map maker (paint tool)
Stars: ✭ 82 (+46.43%)
Mutual labels:  rpg, game-2d
Magicallife
A 2d game that aspires to be similar to Rimworld, with more depth, magic, and RPG concepts.
Stars: ✭ 145 (+158.93%)
Mutual labels:  rpg, game-2d
Zilon Roguelike
Survival roguelike game with huge world generation.
Stars: ✭ 18 (-67.86%)
Mutual labels:  game-2d
carpg
Combination of action rpg with roguelike.
Stars: ✭ 14 (-75%)
Mutual labels:  rpg
dungeonz
Everything for the game Rogueworld.
Stars: ✭ 88 (+57.14%)
Mutual labels:  rpg
ncursesPac
ncurses pacman written in C++
Stars: ✭ 23 (-58.93%)
Mutual labels:  game-2d
snake-game-2D
The famous 2D snake game in which your goal is to eat until you get huge and accumulate many points.
Stars: ✭ 18 (-67.86%)
Mutual labels:  game-2d
vigilante
🦇 2D pixel-art side-scrolling single-player ARPG
Stars: ✭ 63 (+12.5%)
Mutual labels:  rpg
Squid
C# Realtime GUI System
Stars: ✭ 80 (+42.86%)
Mutual labels:  game-2d
MenheraBot
A brazilian multi-language Discord Bot foccused in Fun and RPG!
Stars: ✭ 123 (+119.64%)
Mutual labels:  rpg
quakejs
Fork of inolen/quakejs with additonal content server, local play page, and start-stop script
Stars: ✭ 79 (+41.07%)
Mutual labels:  browser-game
coloniae
Economic strategy game in web broswer
Stars: ✭ 34 (-39.29%)
Mutual labels:  game-2d
TTTTRPG
Timeline Tree of Tabletop Role-Playing Games, celebrating more than 40 years game design innovations
Stars: ✭ 34 (-39.29%)
Mutual labels:  rpg
IronWriter
IronWriter is an open-source writing tool for solo playthroughs of the free tabletop RPG Ironsworn. Focus on writing your story and let IronWriter automatically manage your character sheet.
Stars: ✭ 50 (-10.71%)
Mutual labels:  rpg
newbark-unity
🌳 A proof-of-concept Pokémon-style Retro RPG game framework created with Unity 🔥🌿💧⚡️
Stars: ✭ 139 (+148.21%)
Mutual labels:  rpg
tic-tac-toe
🕹 iOS game - classic Tic Tac Toe with AI and state machines [Swift + SpriteKit + GameplayKit].
Stars: ✭ 60 (+7.14%)
Mutual labels:  game-2d
defender-game
A super basic 2D game written in Rust
Stars: ✭ 22 (-60.71%)
Mutual labels:  game-2d
fgmkJsEngine
Js JRPG Engine for FGMK
Stars: ✭ 20 (-64.29%)
Mutual labels:  rpg

Uncharted Waters: New Horizons

build status

Uncharted Waters: New Horizons (大航海時代II) is an open world RPG and simulation game from 1994, set during the Age of Exploration. Being the favorite game of my childhood, I’m remaking it using web technologies.

This is not meant to be even close to a full remake. I’m a web developer transitioning to doing consulting work — this side project lets prospective employers see my code.

Uncharted Waters: New Horizons Screenshots of the original game

Features

  • Walking around in any of the 130 ports and entering their buildings.
  • Sailing around the world map, where your speed takes into account all the factors of the original game.

This game can be played at https://johan.li/uncharted-waters-2/.

Next up on the roadmap

  • Markets
    • Trade goods, taking into account price indices.
  • Shipyards
    • Buy and remodel used ships.
  • Pubs
    • Recruit crew.

Architecture

The game is made up of two parts:

  • The game itself, a canvas element
  • An interface/GUI, handled by React

The game loop reads State and Input, and updates the canvas element.

During gameplay, actions are called to update State. Actions themselves can call updateInterface, which wraps React’s useState hooks.

Assets makes sure the images and game data is loaded before the game starts.

Architecture

The two parts maintain their own local state, e.g., keeping track of the active menu item or where the NPCs are in a port. Input can also be handled locally, particularly when it comes to the interface.

Game loop

Uses requestAnimationFrame().

State changes, such as reading Input and translating it to movement, don’t occur every frame — a check is performed to see if enough time has passed. Each frame does, however, interpolate movement for smoother graphics.

Why isn’t a state management library used?

In contrast to most web apps, the game code is imperative. It doesn’t need to react to changes because it’s looped non-stop. While using a single Redux store for both the game and the interface seems to be a clean approach, it’s too slow if we want to maintain 60 fps.

The interface alone is too simple to warrant using Redux.

Future considerations

  • Players need the ability to save and resume: State, and some local state, needs to be serialized and stored in localStorage, on a server, or both.
  • Using a service worker so the game can be played offline.
  • Pathfinding for NPC fleets.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].