Code Monkey home page Code Monkey logo

titan-reactor's Introduction


Titan Reactor

An OpenBW 2.5D map and replay viewer.

Written in TypeScript with Three.JS.
Visit www.blacksheepwall.tv for more

Chat on Twitter Chat on Twitter

YouTube Channel Subscribers



About

This is Titan Reactor the WebGL renderer + plugin system. It consists of three primary parts in order to function:

  • Titan Reactor - main app that loads replays & maps and creates sessions for viewing. Can be served statically.
  • Cascbridge - an asset server that reads from your Starcraft install and serves it to Titan Reactor locally
  • UI Runtime - the part of the application the runs in the iframe for UI plugins. Can be served statically.
  • Plugins - the plugins that can be served statically.

Requirements

  • A purchased copy of Starcraft Remastered.

Developing Plugins

Development Installation / Quick Start

Using node 18+, yarn 1.x

Clone this repo. The development branch is dev and main is used for releases.

In this repo:

git lfs install

git lfs fetch

yarn install

Now we want to run Titan Reactor, the ui runtime, the plugins, and cascbridge:

In your terminal run yarn web , in another terminal run yarn runtime, in the plugins repo npm run serve and run cascbridge.

The OpenBW wasm files are included (via git lfs). If you wish to build them yourself visit the openbw fork repository.

Code Architecture WIKI

Legal

The documentation and functionality provided by Titan Reactor may only be utilized with assets provided by ownership of Starcraft. Starcraft® - Copyright © 1998 Blizzard Entertainment, Inc. All rights reserved. Starcraft and Blizzard Entertainment are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries. Titan Reactor and any of its maintainers are in no way associated with or endorsed by Blizzard Entertainment®

titan-reactor's People

Contributors

alexpineda avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

titan-reactor's Issues

Normal map algorithm

A strong algorithm for normal maps can go a long way with visual quality of the map. Let's see what we can do?

Hotkey system

Customizable hotkey configuration for manipulating the game state

Convert Remastered Replays to 1.16

Convert melee replays with multiple players to 2 players only

Some replays have observers in melee slots that lift their command centers because all the observer slots were taken. This is mostly in 1.16 replays but can occur in remastered as well. Do a clean up of the replay removing all non playing players so BWAPI can handle it as it only handles 1v1.

Fog of war

https://medium.com/@travnick/fog-of-war-282c8335a355
https://blog.gemserk.com/2018/11/20/implementing-fog-of-war-for-rts-games-in-unity-2-2/
https://3denginehowto.blogspot.com/2012/04/starcraft-2-technolgy-secrets-part-1.html

virtual bool isVisible(int tileX, int tileY)
virtual bool isExplored(int tileX, int tileY) const = 0;

bool isScannerVisible(BW::Position position)
{
int left = (position.x - 64) / 32;
int top = (position.y - 64) / 32;
int right = (position.x + 64) / 32;
int bottom = (position.y + 64) / 32;
for (int x = left; x <= right; ++x)
{
for (int y = top; y <= bottom; ++y)
{
if (BroodwarImpl.isVisible(x, y))
return true;
}
}
return false;
}

Improve texture maps for each tileset

Currently a catch all solution for eg. roughness maps, are utilized. Improve this by using the Sandbox and making changes for each map on a per tileset basis.

Replay position controls

Including auto speed option

///   - Fastest: 42ms/frame
///   - Faster: 48ms/frame
///   - Fast: 56ms/frame
///   - Normal: 67ms/frame
///   - Slow: 83ms/frame
///   - Slower: 111ms/frame
///   - Slowest: 167ms/frame

  auto now = clock.now();
  auto speed = std::chrono::milliseconds(speed_override ? speed_override_value : vars.game_speeds_frame_times.back());
  if (speed > std::chrono::milliseconds(0)) {
    last_frame += speed;
    auto frame_t = now - last_frame;
    if (frame_t > speed * 8) {
      last_frame = now - speed * 8;
      frame_t = speed * 8;
    }
    if (frame_t < speed) {
      std::this_thread::sleep_for(speed - frame_t);
    }
  }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.