Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
3fa8259
fix(build): build fix for msvc
heinermann Nov 15, 2024
5d832ea
feat(big): add SBigAnd
heinermann Nov 15, 2024
16e9434
feat(big): add SBigCopy
heinermann Nov 15, 2024
6060fe4
fix(big): endianness issue in ExtractLowPartSx
heinermann Nov 15, 2024
0a91e21
fix(big): remove assert in Sub to allow a retail bug
heinermann Nov 15, 2024
038c388
feat(big): add SBigDec
heinermann Nov 15, 2024
422ff3e
feat(big): add SBigFromStr
heinermann Nov 15, 2024
5e231cd
feat(big): add SBigInc
heinermann Nov 15, 2024
fb7c85f
feat(big): add SBigDiv
heinermann Nov 15, 2024
a3c5095
feat(big) add SBigIsEven
heinermann Nov 15, 2024
bc5a665
feat(big): add SBigIsOdd
heinermann Nov 15, 2024
4b9709e
feat(big): add SBigIsOne
heinermann Nov 15, 2024
fb12ba7
feat(big): add SBigIsZero
heinermann Nov 15, 2024
335a7b9
feat(big): add SBigNot
heinermann Nov 15, 2024
40d565a
feat(big): add SBigOr
heinermann Nov 15, 2024
abcc96a
chore(big): simplify SBig tests
heinermann Nov 15, 2024
579ea06
chore(big): style and warning fixes
heinermann Nov 17, 2024
619317c
feat(big): implement ToStream and EncodeDataBytes ops
heinermann Nov 17, 2024
208dd8a
feat(big): add SBigXor
heinermann Nov 17, 2024
aaa44dd
feat(big): add SBigToUnsigned
heinermann Nov 17, 2024
0854138
chore(str): kill gotos in SStrTokenize (#42)
heinermann Apr 20, 2025
6397c2f
chore(error): add error codes and fix macro accuracy
heinermann Jan 11, 2025
b840426
fix(thread): pthread attributes didn't mirror windows
heinermann Aug 28, 2025
104f18a
chore(build): add coverage target
heinermann Aug 28, 2025
330ff64
feat(err): implement SErrSuppressError (#28)
natrist Aug 29, 2025
3af2b47
chore(build): fix compatibility with CMake 4.x
fallenoak Aug 31, 2025
222e3ec
chore(build): update system
fallenoak Aug 31, 2025
62121be
chore(build): add WOW and SC1 flavors
fallenoak Aug 31, 2025
f6d4a93
chore(region): add region constants
heinermann Apr 20, 2025
e1587a9
feat(region): add SRgnGetRectsf
heinermann Apr 21, 2025
c5ee72a
chore(region): simplify region tests with fixture and matcher
heinermann Apr 21, 2025
4dcb438
feat(region): add SRgnClear
heinermann Apr 21, 2025
335962e
feat(region): add SRgnDuplicate
heinermann Apr 21, 2025
83f22d5
chore(region): test for SRgnDelete
heinermann Apr 21, 2025
ff85d91
chore(region): short circuit redundant unlock calls
heinermann Apr 20, 2025
a5c55bc
feat(region): add SRgnGetRectParamsf
heinermann Apr 21, 2025
d322f57
feat(region): add SRgnIsPointInRegionf
heinermann Apr 22, 2025
c143493
feat(region): add SRgnIsRectInRegionf
heinermann Apr 22, 2025
27c08f7
feat(region): add SRgnOffsetf
heinermann Apr 22, 2025
e7d8124
chore(region): const correctness for SRgn calls
heinermann Apr 22, 2025
8d86943
feat(region): write several tests and finish SRgn functionality
heinermann Apr 23, 2025
415e8fa
chore(region): invert test diagrams to match WoW RECTF ordering
heinermann Aug 31, 2025
6c4f7e9
chore(region): add several more edge case tests
heinermann Aug 31, 2025
ae1bd8f
fix(region): add compile time check to avoid SRgnDuplicate deadlock
heinermann Sep 1, 2025
c0dd803
chore: update README
fallenoak Sep 1, 2025
8ba9a76
fix(hash): add missing initializers to HASHKEY classes
fallenoak Sep 2, 2025
048dab1
feat(thread): add missing ctor/dtor to CSRWLock
fallenoak Sep 2, 2025
ee6e381
chore(hash): tidy up TSHashTable::Initialize implementation
fallenoak Sep 2, 2025
884d9d5
chore(str): simplify and add more tests
heinermann Aug 31, 2025
e19e394
chore(str): add missing non-const test cases
heinermann Aug 31, 2025
2408166
feat(str): add SStrToUnsigned
heinermann Aug 31, 2025
75dc4e5
feat(str): add SStrToDouble
heinermann Aug 31, 2025
4b1904a
feat(str): add SStrVPrintf
heinermann Sep 1, 2025
59ce7f6
feat(str): add non-const SStrStr
heinermann Sep 1, 2025
a2959ef
feat(str): add SStrStrI
heinermann Sep 1, 2025
0f453bd
feat(str): add SStrHash
heinermann Sep 1, 2025
0b2c075
chore(str): fix improper use of char* in tests
heinermann Sep 1, 2025
61907fd
chore(str): make SStrToDouble/Float share the same function
heinermann Sep 1, 2025
39dc8e5
fix(queue): add missing initializers to CSBasePriority
fallenoak Sep 2, 2025
cb37f52
feat(hash): add additional HASHKEY_PTR ctor
fallenoak Sep 3, 2025
adc8cb6
feat(hash): preserve HASHKEY_PTR's default ctor
fallenoak Sep 3, 2025
2e04468
chore(hash): line up HASHKEY_PTR and HASHKEY_STR ctor with verified b…
fallenoak Sep 3, 2025
8e9fb74
chore(memory): add additional tests and flag
heinermann Sep 1, 2025
2efa533
feat(memory): add SMemFill
heinermann Sep 2, 2025
60523c3
feat(memory): add SMemZero
heinermann Sep 2, 2025
73e0097
feat(memory): add SMemCopy and SMemMove
heinermann Sep 2, 2025
195e031
chore(hash): ensure correct const declarations in HASHKEY classes
fallenoak Sep 3, 2025
473a2cb
feat(hash): finish implementation of HASHKEY classes
fallenoak Sep 4, 2025
5121638
chore(style): fix style nits
fallenoak Sep 4, 2025
595e431
feat(handle): improve handle macros
fallenoak Sep 4, 2025
20457f7
feat(memory): add STORM_ALLOC and STORM_NEW macros
fallenoak Sep 4, 2025
f75d9ca
feat(memory): replace global new and delete operators
fallenoak Sep 6, 2025
ff0b43c
chore(build): set CCritSect recursive define on Windows systems
fallenoak Sep 9, 2025
7c72c25
feat(event): implement all SEvt functions
heinermann Sep 3, 2025
05f8a7e
feat(error): rework error macros
fallenoak Sep 9, 2025
547fc6d
feat(memory): add STORM_FREE macro
heinermann Sep 13, 2025
a96d127
feat(region): add integer versions of SRgn functions
heinermann Sep 13, 2025
953b426
feat(region): add classic games flavor rect ordering
heinermann Sep 22, 2025
b8032a3
chore(region): refactor tests with helpers and uniformity
heinermann Oct 3, 2025
dc9f9c1
feat(list): add link type defines
fallenoak Oct 4, 2025
4fa6599
chore(build): mark all API functions with calling convention (#69)
heinermann Oct 6, 2025
02287ba
fix(event): fix SEvtPushState incorrectly cloning the state
heinermann Oct 3, 2025
df14314
fix(region): fix incorrect ordering in SC flavor of SRgnGetRectsf
heinermann Oct 3, 2025
92b0c47
chore(build): resolve MSVC warnings
heinermann Sep 23, 2025
51b200d
chore(event): fix header extension
heinermann Sep 23, 2025
47d903f
chore(memory): remove single arg SMemFree
heinermann Oct 7, 2025
982a89b
feat(test): add support for testing against storm.dll
heinermann Sep 24, 2025
02f5e26
feat(core): add StormDestroy stub
heinermann Oct 3, 2025
4720859
chore(test): fix 2 incorrectly documented storm names
heinermann Oct 10, 2025
737728b
feat(memory): add SMemCmp
heinermann Oct 16, 2025
5190c49
feat(test): add options for other versions of storm.dll
heinermann Oct 16, 2025
8c24392
feat(hash): add HASHKEY_CONSTSTR and HASHKEY_CONSTSTRI
heinermann Oct 16, 2025
32a1b30
feat(array): add TSFixedArray copy ctor
fallenoak Oct 19, 2025
7c9cda1
chore(array): clean up code style
fallenoak Oct 19, 2025
d590e2e
fix(array): correct implementation of TSFixedArray::ReallocAndClearData
fallenoak Oct 19, 2025
b52736a
feat(list): add TSList::IsEmpty
heinermann Oct 24, 2025
f0b31fb
feat(hash): finish TSHashTable implementation
heinermann Oct 16, 2025
0609408
chore(big): rewrite SBig tests to be black box tests
heinermann Oct 24, 2025
263f7e9
chore(big): hide the definition of BigData
heinermann Oct 24, 2025
4472ac2
chore(big): run SBig tests against storm.dll
heinermann Oct 24, 2025
a36aded
chore(test): fix ordinal naming accuracy for storm.dll tests
heinermann Nov 10, 2025
0250f27
feat(string): add SStrHash64
heinermann Nov 15, 2025
5ec28d3
feat(string): add SStrChrBidir
heinermann Nov 15, 2025
48a2315
feat(test): support more storm.dll versions
heinermann Nov 15, 2025
f46c0c2
feat(list): implement copy constructor
fallenoak Nov 16, 2025
768a535
feat(memory): add additional operator overloads
fallenoak Nov 16, 2025
29d99a2
chore(test): fix a few minor memory leaks in test suite
fallenoak Nov 16, 2025
efc52d4
chore(event): clean up SEvtDispatch implementation
heinermann Nov 16, 2025
fe35b03
chore(hash): clean up TSHashTable functions
heinermann Nov 16, 2025
931096b
feat(unicode): add 8 SUni functions
heinermann Nov 15, 2025
d98b5dc
chore(test): remove incomplete thread test (#97)
fallenoak Nov 21, 2025
8559019
chore(style): clean up line endings in event tests
fallenoak Nov 21, 2025
8fe642e
chore(style): clean up line endings in big tests
fallenoak Nov 21, 2025
aae54be
chore(style): clean up line endings in core tests
fallenoak Nov 21, 2025
4c8fc4e
chore(style): clean up line endings in core
fallenoak Nov 21, 2025
be1ab67
chore(style): clean up line endings in event
fallenoak Nov 21, 2025
d971058
chore(style): clean up line endings in CONTRIBUTING.md
fallenoak Nov 21, 2025
2c7c444
chore(build): use debug builds for PRs
fallenoak Nov 16, 2025
aadb85d
chore(build): enable ASan for gcc debug builds
fallenoak Nov 16, 2025
cf433ff
chore(test): clean up breaks in SEvtDispatch test
fallenoak Nov 21, 2025
5cdbd74
feat(array): add const qualified TSBaseArray::operator[]
fallenoak Dec 24, 2025
5157c41
chore(build): only build tests when standalone
fallenoak Dec 26, 2025
a5c589f
chore(build): use target-specific directives when enabling ASan
fallenoak Dec 26, 2025
e16ccdb
chore(build): add stormlib v9.31 source to vendor (#99)
tairasu Dec 27, 2025
511c40a
chore(build): clean up debug build options
fallenoak Dec 27, 2025
35f9956
chore(build): improve workflows
fallenoak Dec 27, 2025
60afd3a
chore(misc): exclude conventional clion cmake build dirs in .gitignore
fallenoak Dec 27, 2025
ca6dd93
chore(build): wire up vendored StormLib as stormlib-9.31 (#104)
tairasu Dec 28, 2025
cac1cf7
chore(file): add initial file headers (#107)
tairasu Dec 28, 2025
fb141ff
chore(file): improve accuracy of file function signatures
fallenoak Dec 28, 2025
a4dec30
chore(file): add sfile/sfilenative backend selection
tairasu Dec 29, 2025
ac556fb
feat(file): implement basic SFile class functions (#110)
tairasu Dec 30, 2025
65a6fc7
feat(file): implement native sfile backend
tairasu Dec 31, 2025
9c2fc0a
fix(error): correct SErrSuppressErrors prototype
heinermann Jan 3, 2026
b69feac
feat(error): implement error suppression behavior
heinermann Jan 3, 2026
b292aab
chore(error): support different era args for SErrDisplayError
heinermann Jan 4, 2026
5472065
feat(error): add SErrIsDisplayingError
heinermann Jan 5, 2026
b4e950a
feat(file): implement stormlib sfile backend (#113)
tairasu Jan 16, 2026
50872df
feat(trans): add STrans functions
heinermann Sep 23, 2025
1e1f2f8
feat(string): add SStrDestroy
heinermann Jan 26, 2026
1e86f98
feat(region): add SRgnDestroy
heinermann Jan 26, 2026
40d5897
chore(file): add tests for SFile functions
heinermann Jan 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
45 changes: 29 additions & 16 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,47 +4,60 @@ on: pull_request

jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
name: ${{ matrix.flavor.name }} / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }}
runs-on: ${{ matrix.build.os }}

strategy:
fail-fast: false
matrix:
config:
- name: Ubuntu Latest (GCC)
os: ubuntu-latest
build_type: Release
flavor:
- name: WoW
define: WOW
- name: SC1
define: SC1

build:
- system_name: Linux
build_type: Debug
compiler_name: GCC
test_path: StormTest
os: ubuntu-latest
cc: gcc
cxx: g++

- name: macOS Latest (Clang)
os: macos-latest
build_type: Release
- system_name: macOS
build_type: Debug
compiler_name: Clang
test_path: StormTest
os: macos-latest
cc: clang
cxx: clang++

- name: Windows Latest (MSVC)
- system_name: Windows
build_type: Debug
compiler_name: MSVC
test_path: Debug/StormTest
os: windows-latest
build_type: Release
test_path: Release/StormTest
cc: cl
cxx: cl

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v6
with:
submodules: true

- name: Install Dependencies (${{ matrix.build.os }})
run: sudo apt install -y lcov
if: matrix.build.os == 'ubuntu-latest'

- name: Prepare
run: mkdir build

- name: Configure
run: cd build && cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }}
run: cd build && cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.build.build_type }} -DWHOA_STORM_FLAVOR=${{ matrix.flavor.define}}

- name: Build
run: cmake --build build --config ${{ matrix.config.build_type }}
run: cmake --build build --config ${{ matrix.build.build_type }}

- name: Test
run: ./build/test/${{ matrix.config.test_path }}
run: ./build/test/${{ matrix.build.test_path }}
35 changes: 22 additions & 13 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,47 +7,56 @@ on:

jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
name: ${{ matrix.flavor.name }} / ${{ matrix.build.system_name }} / ${{ matrix.build.build_type }} / ${{ matrix.build.compiler_name }}
runs-on: ${{ matrix.build.os }}

strategy:
fail-fast: false
matrix:
config:
- name: Ubuntu Latest (GCC)
os: ubuntu-latest
flavor:
- name: WoW
define: WOW
- name: SC1
define: SC1

build:
- system_name: Linux
build_type: Release
compiler_name: GCC
test_path: StormTest
os: ubuntu-latest
cc: gcc
cxx: g++

- name: macOS Latest (Clang)
os: macos-latest
- system_name: macOS
build_type: Release
compiler_name: Clang
test_path: StormTest
os: macos-latest
cc: clang
cxx: clang++

- name: Windows Latest (MSVC)
os: windows-latest
- system_name: Windows
build_type: Release
compiler_name: MSVC
test_path: Release/StormTest
os: windows-latest
cc: cl
cxx: cl

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v6
with:
submodules: true

- name: Prepare
run: mkdir build

- name: Configure
run: cd build && cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }}
run: cd build && cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.build.build_type }} -DWHOA_STORM_FLAVOR=${{ matrix.flavor.define}}

- name: Build
run: cmake --build build --config ${{ matrix.config.build_type }}
run: cmake --build build --config ${{ matrix.build.build_type }}

- name: Test
run: ./build/test/${{ matrix.config.test_path }}
run: ./build/test/${{ matrix.build.test_path }}
9 changes: 7 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
.DS_Store
.idea
.vscode
CMakeSettings.json
.idea/
.vscode/
.vs/

/build
/build_*
/cmake-build-*
/dist
/out
92 changes: 88 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.1...3.5)

if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
message(FATAL_ERROR
Expand All @@ -18,10 +18,50 @@ project(storm)

set(CMAKE_CXX_STANDARD 11)

include(lib/system/cmake/system.cmake)
set(WHOA_SFILE_MODE "NATIVE" CACHE STRING "SFile backend (NATIVE or STORMLIB)")
set_property(CACHE WHOA_SFILE_MODE PROPERTY STRINGS NATIVE STORMLIB)

list(APPEND CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/lib/system/cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/vendor/cmake-modules"
)

include(system)

# Standalone builds
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
set(WHOA_STANDALONE 1)
message(STATUS "Building Storm as a standalone project")
endif()

if(WHOA_ASSERTIONS_ENABLED)
add_definitions(-DWHOA_ASSERTIONS_ENABLED)
endif()

# Storm flavors
if(WHOA_STORM_FLAVOR STREQUAL "SC1")
message(STATUS "Building Storm with StarCraft flavoring")

if (WHOA_SYSTEM_MAC OR WHOA_SYSTEM_LINUX)
add_definitions(-DWHOA_STORM_C_CRIT_SECT_RECURSIVE)
endif()

add_definitions(-DWHOA_RECT_USES_SCREEN_COORDINATES)
add_definitions(-DWHOA_SSTRHASH64_SUBTRACTS)
add_definitions(-DWHOA_SUPPORTS_KOREAN_CODEPAGE)
elseif(WHOA_STORM_FLAVOR STREQUAL "WOW")
message(STATUS "Building Storm with World of Warcraft flavoring")
add_definitions(-DWHOA_DISPLAY_ERR_EXTRA_ARG)
else()
message(STATUS "Building Storm with default flavoring")
add_definitions(-DWHOA_DISPLAY_ERR_EXTRA_ARG)
endif()

# OS defines
if(WHOA_SYSTEM_WIN)
# Implicit behavior of CriticalSection
add_definitions(-DWHOA_STORM_C_CRIT_SECT_RECURSIVE)

# Avoid win32 header hell
add_compile_definitions(
NOMINMAX
Expand All @@ -30,5 +70,49 @@ if(WHOA_SYSTEM_WIN)
endif()

add_subdirectory(lib)
add_subdirectory(storm)
add_subdirectory(test)
add_subdirectory(vendor)

# Code coverage reporting
if(WHOA_STANDALONE AND CMAKE_BUILD_TYPE STREQUAL "Debug")
# GCC coverage configuration
if(CMAKE_COMPILER_IS_GNUCXX)
# Running coverage on linux+gcc:
#
# sudo apt install lcov
# cmake -DCMAKE_BUILD_TYPE=Debug ..
# make
# make StormCoverage
#
# Results in `StormCoverage/index.html`
include(CodeCoverage)

setup_target_for_coverage_lcov(
NAME StormCoverage
EXECUTABLE StormTest
DEPENDENCIES StormTest storm
BASE_DIRECTORY "${PROJECT_SOURCE_DIR}/storm"
LCOV_ARGS --rc branch_coverage=1
GENHTML_ARGS --rc genhtml_branch_coverage=1
)

message(STATUS "Code coverage reporting enabled")
endif()
endif()

if(WHOA_TEST_STORMDLL)
# Doesn't build squall, but still builds the tests to run against a real Storm.dll
add_definitions(-DWHOA_TEST_STORMDLL)
if(WHOA_STORMDLL_VERSION)
add_definitions(-DWHOA_STORMDLL_VERSION=${WHOA_STORMDLL_VERSION})
else()
add_definitions(-DWHOA_STORMDLL_VERSION=2016)
endif()
add_subdirectory(test/stormdll)
else()
add_subdirectory(storm)
endif()

if(WHOA_STANDALONE)
# Add tests when standalone
add_subdirectory(test)
endif()
34 changes: 34 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
## Running Tests

### Coverage
Only runnable with GCC.

1. `sudo apt install lcov`
2. `mkdir build`
3. `cd build`
4. `cmake -DCMAKE_BUILD_TYPE=Debug ..`
5. `make StormCoverage`

Open the resulting `html` file for the report.


### Against an original copy of Storm.dll
Only runnable on Windows. Allows running tests against the original `storm.dll` rather than against the recreated code, to test accuracy.

1. `mkdir build`
2. `cd build`
2. `cmake -DWHOA_TEST_STORMDLL=1 -DWHOA_STORM_FLAVOR=SC1 -A Win32 ..`.
3. `cmake --build .`
4. Copy `storm.dll` from your Starcraft 1.17 installation folder to the same directory as `StormTest.exe`.
5. Run `StormTest.exe` from the command line.

To use a different version of Storm.dll, use the following arguments in the cmake command:

| Arguments | Games |
|-----------|-------|
|`-DWHOA_STORMDLL_VERSION=2016`| Starcraft 1.17 |
|`-DWHOA_STORMDLL_VERSION=2007`| Starcraft 1.15.0 ~ 1.16.1 |
|`-DWHOA_STORMDLL_VERSION=2004`| Starcraft 1.11b ~ 1.14 |
|`-DWHOA_STORMDLL_VERSION=2003`| Starcraft 1.10 ~ 1.11, Diablo II 1.10 ~ 1.13d |
|`-DWHOA_STORMDLL_VERSION=2000`| Diablo 1.09, Starcraft 1.08 ~ Starcraft 1.09b, Diablo II 1.06 ~ Diablo II 1.09d, Warcraft II: BNE 2.02.1 |
|`-DWHOA_STORMDLL_VERSION=1999`| Diablo 1.08, Diablo II 1.0 ~ Diablo II 1.05b |
41 changes: 32 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Squall

Squall is an unofficial open source implementation of the Storm standard
library circa 2010.
library.

The Storm standard library is a collection of data structures and functions
created by the talented folks at Blizzard Entertainment for use in their
Expand All @@ -11,37 +11,60 @@ This project attempts to provide a version of Storm compatible with the
version used in the final release build of World of Warcraft: Wrath of the
Lich King in 2010: 3.3.5a (12340).

Squall also attempts to provide versions of Storm that work with other
projects centered around classic Blizzard games, like
[Starsurgical](https://github.com/Starsurgical). Note that Squall does not
natively support being built as a dynamic library, although it may support
such scenarios in the future.

In the spirit of documenting what is presumed to have existed at the time,
this project makes every attempt to maintain the canonical names, layouts, and
side effects of the original implementation of Storm. At the same time, it
attempts to ensure portability and compatibility with modern 64-bit systems.

## Storm Flavors

Squall supports different flavors depending on the type of project consuming
it. These flavors can be configured by setting a CMake variable called
`WHOA_STORM_FLAVOR`:

- `WOW`: Ensures the resulting build is compatible with World of Warcraft
3.3.5a (12340)
- `SC1`: Ensures the resulting build is compatible with StarCraft 1.16/1.17

Flavors control groups of behavior-related defines. These defines can be used
on their own if the groups defined by the flavors are not desired.

## FAQ

**Why?**

It's fascinating to explore the development practices used to build a modern
major video game.

**Why 3.3.5a?**
**Why does Squall focus on specific game versions?**

The game and its libraries have become significantly more complex in the
intervening 10+ years. By picking 3.3.5a, it's possible to imagine this
Storm changed a lot over the years it was used. By focusing on specific
versions of the games that used Storm, it's possible to imagine this
implementation will eventually be complete.

**Will this let me cheat in the game?**
**Will this let me cheat in a game?**

No. Storm is a standard library, and none of its routines are particularly
relevant to the anti-cheat measures found in the game.
relevant to the anti-cheat measures found in the games that used it.

**Can I use this in my own development projects?**

It's probably a bad idea. The original library remains closed source, and this
project is in no way official.
Maybe. Keep in mind the original library remains closed source and this
project is in no way sanctioned or official. Also keep in mind that C++, its
standard library, and OS-provided capabilities like memory management,
networking stacks, and rendering frameworks have substantially improved since
the 1990s-2010.

## Legal

This project is released into the public domain.
This project is released into the public domain. No claim is made to any
intellectual property contained in this project.

World of Warcraft: Wrath of the Lich King ©2008 Blizzard Entertainment, Inc.
All rights reserved. Wrath of the Lich King is a trademark, and World of
Expand Down
2 changes: 1 addition & 1 deletion lib/system
Submodule system updated 1 files
+1 −1 CMakeLists.txt
Loading