npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@dada78641/bwtoolsdata

v1.4.1

Published

A collection of StarCraft data used to help interpret replay and map files

Downloads

79

Readme

MIT license npm version

@dada78641/bwtoolsdata

A collection of StarCraft internal data used to help process replay and map files.

Usage

This library is available via npm:

npm i --save @dada78641/bwtoolsdata

Aside from raw data, this library contains a number of utilities for people working with StarCraft replay and map files.

Reference

Function:

framesToMs(frames[, speed])

Parameters:

  • frames number
    number of in-game frames per second
  • speed string (default: "fastest")
    game speed (virtually always "fastest")

Returns:

  • number
    the number of milliseconds representing the duration of the game frames

Used to get timestamps of game events for a given game speed. For example, this can be used to display a timestamp for a chat message, or to show the duration of a game.


Function:

sortRaces(raceA, raceB)

Parameters:

  • raceA string
    a Brood War race string ("T", "Z", "P")
  • raceB string
    a Brood War race string ("T", "Z", "P")

Returns:

  • number
    -1, 0, or 1 (use as sort() compare function)

Sorts races according to which is the "active" race in the matchup.

Other than mirror matchups, this produces either ['Z', 'P'], ['P', 'T'] or ['T', 'Z']. Any letter other than {Z, P, T}, e.g. 'R' for random, is placed at the end of the list.

This should generally only be used either for sorting teams, or for 1v1 matchups. It can be used as a stable matchup indicator, so that e.g. ZvP and PvZ matchups are all sorted under the same label rather than under two different labels.


Function:

parseMapName(mapName)

Parameters:

  • mapName string
    a raw map name (from a map or replay file)

Returns:

  • object
    map name information and metadata

Parses a map name and returns a cleaned map name and an object of metadata. This is designed to produce a more "presentable" name for a given map, without things like version numbers, starting location counts or clan tags.

The metadata returned includes a version, a list of tags, and an object of miscellaneous tags, depending on what is found.


Function:

getSwatchFromSlotID(id)

Parameters:

  • id number
    slot ID to return the color for

Returns:

  • string
    swatch name for the color associated with that player slot ID

Every player ID has a default color; for example, player 1 is red, player 2 is blue, etc. This function is used to return the color swatch name associated with a given ID.


Function:

stripEscapeCodes(string)

Parameters:

  • string number
    input string

Returns:

  • string
    the string, with Brood War escape codes stripped out

Brood War reuses several ASCII invisible escape sequences, e.g. for setting colors. This function strips them out.


Function:

getSwitchedSwatch(teamID, matchTypeID)

Parameters:

  • teamID number
    team ID of the player
  • matchTypeID number
    replay game type ID (e.g. 0x0f for Top vs Bottom)

Returns:

  • string
    swatch name of the color a player gets when swatches are swapped when viewing a replay

Normally, when watching a replay, you can see the player's original team color; when hitting Shift+Tab, this can be changed to a set of default colors with better visibility.

However, this only works correctly when the right match type is set (e.g. Top vs Bottom). This function tells you what the colors will be after enabling color swapping.


Function:

getColorFromSwatch(swatch[, returnType])

Parameters:

  • swatch string
    swatch name to return the color value for
  • returnType string<"hex" | "int"> (default: "hex")
    type of value to return; either a hex string or a number

Returns:

  • string | number
    the color value of the given swatch name

This function can be used to get the actual colors to be displayed for a given swatch (e.g. "paleBlue" will return "#b8b8e8").


Function:

getSwatchFromSlotID(slotID)

Parameters:

  • slotID string
    a number from 0-23

Returns:

  • string
    color swatch name of the given ID

Each player ID has a predetermined color; red, blue, teal, purple, and so on. This returns the swatch name of a given ID.


In-game colors

Colors work quite inconsistently in StarCraft. There are two sets of color codes: one for briefing messages (and map names), and one for in-game chat messages. These each have their quirks that are different between Brood War (v1.16.1 and below) and Remastered.

Here's a list of all colors:

†: In StarCraft, gray is buggy: when it's used in a map name in Brood War, the rest of the name becomes gray as well—this was fixed in Remastered. In in-game text messages, gray will take over the entire rest of the line, both in Brood War and Remastered. This buggy behavior is not completely implemented in this library, and more research is needed to determine every edge case.

‡: Slot IDs 11, 14, 15 and 20 are not selectable as player colors (the color for 11 is used for the neutral player, however). 11 and 15 are still usable as text color. 14 and 20 are duplicates of Pale Yellow and Cerulean.

Tilesets

The following are all available tileset types.

A few of the aforementioned player colors are not pickable on certain tilesets (due to bad contrast).

†: Also called "Arctic" in the community.

‡: The Installation tileset is only used in the campaign and does not support regular custom games.

The internal names are the names used by the game files themselves, whereas the proper names are taken from the original Brood War map editor.

Game speed

Number of milliseconds per game frame for each game speed.

E.g. for "Fastest", there are approximately 1000 / 42 = ~23.81 frames in a second. This is used to convert the number of game frames into real time.

| Name | ㎳/frame | Frames/second | % of "Fastest" | |:--------|:--------|:---------------|:---------------| | Fastest | 42 | 23.810 | 100.0% | | Faster | 48 | 20.833 | 87.5% | | Fast | 56 | 17.857 | 75.0% | | Normal | 67 | 14.925 | 62.7% | | Slow | 83 | 12.048 | 50.6% | | Slower | 111 | 9.009 | 37.8% | | Slowest | 167 | 5.988 | 25.1% |

By far most replays use "Fastest" as the speed, but this table can be used for the rare cases that aren't. In the very old days of StarCraft, the ladder speed setting was "Fast" by default, but this got changed to "Fastest" relatively early on.

Notes

This library includes code for converting in-game text with escape codes to other representations (terminal escape codes, HTML). It's currently undocumented due to how experimental it is. See lib/color for more information.

License

MIT license