chore: initial commit

This commit is contained in:
fallenoak 2023-02-26 17:51:03 -06:00
commit d5300e4723
No known key found for this signature in database
GPG key ID: 7628F8E61AEA070D
19 changed files with 18365 additions and 0 deletions

54
.clang-format Normal file
View file

@ -0,0 +1,54 @@
---
AccessModifierOffset: 0
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: Never
AlwaysBreakTemplateDeclarations: Yes
BreakBeforeBraces: Attach
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeComma
ColumnLimit: 0
CompactNamespaces: false
ContinuationIndentWidth: 4
Cpp11BracedListStyle: false
DeriveLineEnding: false
DerivePointerAlignment: false
IncludeBlocks: Merge
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: "<[[:alnum:].]+>"
Priority: 4
- Regex: ".*"
Priority: 1
SortPriority: 0
IndentGotoLabels: false
IndentWidth: 4
MaxEmptyLinesToKeep: 1
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: false
PointerAlignment: Left
SortIncludes: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInConditionalStatement: false
Standard: c++11
TabWidth: 4
UseCRLF: false
UseTab: Never

1
.clang-format-ignore Normal file
View file

@ -0,0 +1 @@
/vendor

15
.editorconfig Normal file
View file

@ -0,0 +1,15 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[bc/**/*]
indent_size = 4
indent_style = space
[test/**/*]
indent_size = 4
indent_style = space

50
.github/workflows/pr.yml vendored Normal file
View file

@ -0,0 +1,50 @@
name: PR
on: pull_request
jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- name: Ubuntu Latest (GCC)
os: ubuntu-latest
build_type: Release
test_path: BcTest
cc: gcc
cxx: g++
- name: macOS Latest (Clang)
os: macos-latest
build_type: Release
test_path: BcTest
cc: clang
cxx: clang++
- name: Windows Latest (MSVC)
os: windows-latest
build_type: Release
test_path: Release/BcTest
cc: cl
cxx: cl
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Prepare
run: mkdir build
- name: Configure
run: cd build && cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }}
- name: Build
run: cmake --build build --config ${{ matrix.config.build_type }}
- name: Test
run: ./build/test/${{ matrix.config.test_path }}

53
.github/workflows/push.yml vendored Normal file
View file

@ -0,0 +1,53 @@
name: Push
on:
push:
branches:
- master
jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- name: Ubuntu Latest (GCC)
os: ubuntu-latest
build_type: Release
test_path: BcTest
cc: gcc
cxx: g++
- name: macOS Latest (Clang)
os: macos-latest
build_type: Release
test_path: BcTest
cc: clang
cxx: clang++
- name: Windows Latest (MSVC)
os: windows-latest
build_type: Release
test_path: Release/BcTest
cc: cl
cxx: cl
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Prepare
run: mkdir build
- name: Configure
run: cd build && cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }}
- name: Build
run: cmake --build build --config ${{ matrix.config.build_type }}
- name: Test
run: ./build/test/${{ matrix.config.test_path }}

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
.DS_Store
.idea
.vscode
/build
/cmake-build-*

26
CMakeLists.txt Normal file
View file

@ -0,0 +1,26 @@
cmake_minimum_required(VERSION 3.1)
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
message(FATAL_ERROR
"In-source builds not allowed.
Please make a new directory (called a build directory) and run CMake from there.
You may need to remove CMakeCache.txt."
)
endif()
if(TARGET bc)
# Guard for use as transitive dependency
return()
endif()
# Project
project(bc)
set(CMAKE_CXX_STANDARD 11)
include(lib/system/cmake/system.cmake)
add_subdirectory(lib)
add_subdirectory(bc)
add_subdirectory(test)
add_subdirectory(vendor)

24
LICENSE Normal file
View file

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>

52
README.md Normal file
View file

@ -0,0 +1,52 @@
# BC
[![Push](https://github.com/whoahq/bc/workflows/Push/badge.svg)](https://github.com/whoahq/bc/actions/workflows/push.yml)
BC is an unofficial open source implementation of the Blizzard Core standard
library circa 2010.
The Blizzard Core standard library is a collection of data structures and
functions created by the talented folks at Blizzard Entertainment for use in
their games.
This project attempts to provide a version of Blizzard Core 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).
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 Blizzard Core. At the same
time, it attempts to ensure portability and compatibility with modern 64-bit
systems.
## FAQ
**Why?**
It's fascinating to explore the development practices used to build a modern
major video game.
**Why 3.3.5a?**
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
implementation will eventually be complete.
**Will this let me cheat in the game?**
No. BC is a standard library, and none of its routines are particularly
relevant to the anti-cheat measures found in the game.
**Can I use this in my own development projects?**
It's probably a bad idea. The original utility classes and routines remain
closed source, and this project is in no way official.
## Legal
This project is released into the public domain.
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
Warcraft, Warcraft and Blizzard Entertainment are trademarks or registered
trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.

17
bc/CMakeLists.txt Normal file
View file

@ -0,0 +1,17 @@
file(GLOB BC_SOURCES
"*.cpp"
)
add_library(bc STATIC
${BC_SOURCES}
)
target_include_directories(bc
PUBLIC
${PROJECT_SOURCE_DIR}
)
target_link_libraries(bc
PUBLIC
storm
)

18
bc/Memory.cpp Normal file
View file

@ -0,0 +1,18 @@
#include "bc/Memory.hpp"
#include <storm/Memory.hpp>
void* Blizzard::Memory::Allocate(uint32_t bytes) {
return SMemAlloc(bytes, __FILE__, __LINE__, 0x0);
}
void* Blizzard::Memory::Allocate(uint32_t bytes, uint32_t flags, const char* filename, uint32_t linenumber, const char* a5) {
// TODO
// - determine purpose of a5
// - flags manipulation
return SMemAlloc(bytes, filename, linenumber, flags);
}
void Blizzard::Memory::Free(void* ptr) {
SMemFree(ptr);
}

17
bc/Memory.hpp Normal file
View file

@ -0,0 +1,17 @@
#ifndef BC_MEMORY_HPP
#define BC_MEMORY_HPP
#include <cstdint>
namespace Blizzard {
namespace Memory {
// Functions
void* Allocate(uint32_t bytes);
void* Allocate(uint32_t bytes, uint32_t flags, const char* filename, uint32_t linenumber, const char* a5);
void Free(void* ptr);
} // namespace Memory
} // namespace Blizzard
#endif

2
lib/CMakeLists.txt Normal file
View file

@ -0,0 +1,2 @@
add_subdirectory(squall)
add_subdirectory(system)

31
test/CMakeLists.txt Normal file
View file

@ -0,0 +1,31 @@
file(GLOB_RECURSE TEST_SOURCES "*.cpp")
if(WHOA_SYSTEM_MAC)
set_source_files_properties(${TEST_SOURCES}
PROPERTIES COMPILE_FLAGS "-x objective-c++"
)
add_executable(BcTest ${TEST_SOURCES})
target_link_libraries(BcTest
PRIVATE
bc
"-framework AppKit"
)
endif()
if(WHOA_SYSTEM_LINUX OR WHOA_SYSTEM_WIN)
add_executable(BcTest ${TEST_SOURCES})
target_link_libraries(BcTest
PRIVATE
bc
)
endif()
target_include_directories(BcTest
PRIVATE
${PROJECT_SOURCE_DIR}
)
install(TARGETS BcTest DESTINATION "bin")

20
test/Memory.cpp Normal file
View file

@ -0,0 +1,20 @@
#include "bc/Memory.hpp"
#include "test/Test.hpp"
TEST_CASE("Blizzard::Memory::Allocate", "[memory]") {
SECTION("allocates memory and returns pointer") {
auto ptr = Blizzard::Memory::Allocate(100);
REQUIRE(ptr);
Blizzard::Memory::Free(ptr);
}
SECTION("allocates memory and returns pointer using overload with flags") {
auto ptr = Blizzard::Memory::Allocate(100, 0x0, __FILE__, __LINE__, nullptr);
REQUIRE(ptr);
Blizzard::Memory::Free(ptr);
}
}

2
test/Test.cpp Normal file
View file

@ -0,0 +1,2 @@
#define CATCH_CONFIG_MAIN
#include "test/Test.hpp"

1
test/Test.hpp Normal file
View file

@ -0,0 +1 @@
#include "vendor/catch-2.13.10/catch.hpp"

0
vendor/CMakeLists.txt vendored Normal file
View file

17976
vendor/catch-2.13.10/catch.hpp vendored Normal file

File diff suppressed because it is too large Load diff