diff --git a/.gitignore b/.gitignore index 1e24a5da..842bafe4 100644 --- a/.gitignore +++ b/.gitignore @@ -1036,3 +1036,7 @@ bin/ # CLion .idea/** + +# sdk-static code-generated files +sdk-static/c/include/ +sdk-static/cpp/include/ diff --git a/CMakeLists.txt b/CMakeLists.txt index c083595e..a98474c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,7 +69,7 @@ endif() # Generating sdk-static find_package(Python3 REQUIRED COMPONENTS Interpreter) execute_process( - COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/generate_static.py + COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/generate_static.py --game ${SOURCE2GEN_GAME} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE SDK_STATIC_SCRIPT_RESULT OUTPUT_VARIABLE SDK_STATIC_SCRIPT_OUTPUT diff --git a/scripts/generate_static.py b/scripts/generate_static.py index 76a4ff28..d7ffa666 100644 --- a/scripts/generate_static.py +++ b/scripts/generate_static.py @@ -7,6 +7,7 @@ msg = "Please install tomli to read TOML files. You can do this by running 'pip install tomli'." raise ImportError(msg) from err +import argparse from pathlib import Path from typing import NotRequired, TypeAlias, TypedDict @@ -132,12 +133,27 @@ def dump_to(cwd: Path, language: str, filename: str, content: str) -> None: status(f'Wrote {len(content)} bytes to {language}/{filename}') +def apply_game_overrides(classes: ClassDefs, game: str) -> None: + for class_def in classes.values(): + if game_override := class_def.get(game): + if isinstance(game_override, dict): + class_def.update(game_override) + + def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument('--game', help='Game name to generate for') + args = parser.parse_args() + cwd = Path(__file__).parent.parent.resolve().absolute() toml_file: ClassDefs = tomllib.loads((cwd / 'sdk-static.toml').read_text(encoding='utf-8')) status(f'Read {len(toml_file)} types from sdk-static.toml') + if args.game: + apply_game_overrides(toml_file, args.game) + status(f'Applied overrides for game: {args.game}') + cpp = assemble_cpp(toml_file) dump_to(cwd, 'cpp', 'source2gen.hpp', cpp) diff --git a/sdk-static.toml b/sdk-static.toml index 9aebfdf1..d71e3a69 100644 --- a/sdk-static.toml +++ b/sdk-static.toml @@ -47,6 +47,9 @@ size = 0x04 [CPulseValueFullType] size = 0x10 + +[CPulseValueFullType.DEADLOCK] +size = 0x18 note = "size is 8 bytes bigger in Deadlock" [CResourceName] diff --git a/sdk-static/c/include/source2sdk/source2gen/source2gen.h b/sdk-static/c/include/source2sdk/source2gen/source2gen.h deleted file mode 100644 index 2eae659e..00000000 --- a/sdk-static/c/include/source2sdk/source2gen/source2gen.h +++ /dev/null @@ -1,103 +0,0 @@ -// Autogenerated! Do not edit. -#pragma once - -// skipped template CAnimGraphParamOptionalRef -// skipped template CAnimGraphParamRef -typedef char CAnimGraphTagOptionalRef[0x18]; -typedef char CAnimGraphTagRef[0x18]; -// skipped template CAnimScriptParam -// skipped template CAnimValue -typedef char CAnimVariant[0x11]; -typedef char CAttachmentNameSymbolWithStorage[0x20]; -// skipped template CBitVec -typedef char CBufferString[0x10]; -typedef char CColorGradient[0x18]; -// skipped template CCompressor -typedef char CEntityHandle[0x04]; -typedef char CEntityIndex[0x04]; -// skipped template CEntityOutputTemplate -typedef char CGlobalSymbol[0x08]; -typedef char CGlobalSymbolCaseSensitive[0x08]; -// skipped template CHandle -typedef char CKV3MemberNameSet[0x10]; -typedef char CKV3MemberNameWithStorage[0x38]; -// skipped template CNetworkUtlVectorBase -typedef char CNetworkedQuantizedFloat[0x08]; -typedef char CPanoramaImageName[0x10]; -typedef char CParticleNamedValueRef[0x40]; -typedef char CPiecewiseCurve[0x40]; -typedef char CPlayerSlot[0x04]; -// size is 8 bytes bigger in Deadlock -typedef char CPulseValueFullType[0x10]; -// skipped template CResourceArray -typedef char CResourceName[0xe0]; -// skipped template CResourceNameTyped -// skipped template CResourcePointer -// size unknown -typedef char CResourceString[0x08]; -typedef char CSmartPropAttributeAngles[0x40]; -typedef char CSmartPropAttributeBool[0x40]; -typedef char CSmartPropAttributeColor[0x40]; -typedef char CSmartPropAttributeFloat[0x40]; -typedef char CSmartPropAttributeInt[0x40]; -typedef char CSmartPropAttributeMaterialGroup[0x40]; -typedef char CSmartPropAttributeMaterialName[0x40]; -typedef char CSmartPropAttributeModelName[0x40]; -typedef char CSmartPropAttributeStateName[0x40]; -typedef char CSmartPropAttributeVariableValue[0x40]; -typedef char CSmartPropAttributeVector[0x40]; -typedef char CSmartPropAttributeVector2D[0x40]; -typedef char CSmartPropVariableComparison[0x20]; -// skipped template CSmartPtr -typedef char CSoundEventName[0x10]; -typedef char CSplitScreenSlot[0x04]; -// skipped template CStrongHandle -// skipped template CStrongHandleCopyable -// size doesn't matter. only used as a pointer -typedef char CStrongHandleVoid[0x08]; -typedef char CTransform[0x20]; -typedef char CUtlBinaryBlock[0x18]; -// skipped template CUtlHashtable -// skipped template CUtlLeanVector -// skipped template CUtlLeanVectorFixedGrowable -// skipped template CUtlOrderedMap -// skipped template CUtlPair -typedef char CUtlString[0x08]; -typedef char CUtlStringToken[0x04]; -typedef char CUtlStringTokenWithStorage[0x18]; -typedef char CUtlSymbol[0x02]; -typedef char CUtlSymbolLarge[0x08]; -// skipped template CUtlVector -// skipped template CUtlVectorEmbeddedNetworkVar -// skipped template CUtlVectorFixedGrowable -typedef char CUtlVectorSIMDPaddedVector[0x18]; -// skipped template CVariantBase -// skipped template CWeakHandle -// skipped template C_NetworkUtlVectorBase -// skipped template C_UtlVectorEmbeddedNetworkVar -typedef char Color[0x04]; -typedef char DegreeEuler[0x0c]; -typedef char FourVectors[0x30]; -typedef char HSCRIPT[0x08]; -// size doesn't matter. only used as a pointer -typedef char KeyValues[0x01]; -typedef char KeyValues3[0x10]; -typedef char PulseSymbol_t[0x10]; -typedef char QAngle[0x0c]; -typedef char Quaternion[0x10]; -typedef char QuaternionStorage[0x10]; -typedef char RadianEuler[0x0c]; -typedef char Range_t[0x08]; -typedef char RotationVector[0x0c]; -// skipped template SphereBase_t -typedef char V_uuid_t[0x10]; -typedef char Vector[0x0c]; -typedef char Vector2D[0x08]; -typedef char Vector4D[0x10]; -typedef char VectorAligned[0x10]; -typedef char WorldGroupId_t[0x04]; -typedef char float32[0x04]; -typedef char fltx4[0x10]; -typedef char matrix3x4_t[0x30]; -typedef char matrix3x4a_t[0x30]; -typedef char panorama_CPanelPtr[0x08]; diff --git a/sdk-static/cpp/include/source2sdk/source2gen/source2gen.hpp b/sdk-static/cpp/include/source2sdk/source2gen/source2gen.hpp deleted file mode 100644 index c132011c..00000000 --- a/sdk-static/cpp/include/source2sdk/source2gen/source2gen.hpp +++ /dev/null @@ -1,157 +0,0 @@ -// Autogenerated! Do not edit. -#pragma once -#include - -template -using CAnimGraphParamOptionalRef = char[0x20]; -template -using CAnimGraphParamRef = char[0x20]; -using CAnimGraphTagOptionalRef = char[0x18]; -using CAnimGraphTagRef = char[0x18]; -template -// size is a guess -using CAnimScriptParam = char[0x08]; -template -using CAnimValue = char[0x08]; -using CAnimVariant = char[0x11]; -using CAttachmentNameSymbolWithStorage = char[0x20]; -template -using CBitVec = char[(N + 7) / 8]; -using CBufferString = char[0x10]; -using CColorGradient = char[0x18]; -template -// size doesn't matter. only used as a pointer -using CCompressor = char[0x01]; -using CEntityHandle = char[0x04]; -using CEntityIndex = char[0x04]; -template -using CEntityOutputTemplate = char[0x28]; -using CGlobalSymbol = char[0x08]; -using CGlobalSymbolCaseSensitive = char[0x08]; -template -using CHandle = char[0x04]; -using CKV3MemberNameSet = char[0x10]; -using CKV3MemberNameWithStorage = char[0x38]; -template -using CNetworkUtlVectorBase = char[0x18]; -using CNetworkedQuantizedFloat = char[0x08]; -using CPanoramaImageName = char[0x10]; -using CParticleNamedValueRef = char[0x40]; -using CPiecewiseCurve = char[0x40]; -using CPlayerSlot = char[0x04]; -// size is 8 bytes bigger in Deadlock -using CPulseValueFullType = char[0x10]; -template -using CResourceArray = char[0x08]; -using CResourceName = char[0xe0]; -template -using CResourceNameTyped = char[0xe0]; -template -using CResourcePointer = char[0x08]; -// size unknown -using CResourceString = char[0x08]; -using CSmartPropAttributeAngles = char[0x40]; -using CSmartPropAttributeBool = char[0x40]; -using CSmartPropAttributeColor = char[0x40]; -using CSmartPropAttributeFloat = char[0x40]; -using CSmartPropAttributeInt = char[0x40]; -using CSmartPropAttributeMaterialGroup = char[0x40]; -using CSmartPropAttributeMaterialName = char[0x40]; -using CSmartPropAttributeModelName = char[0x40]; -using CSmartPropAttributeStateName = char[0x40]; -using CSmartPropAttributeVariableValue = char[0x40]; -using CSmartPropAttributeVector = char[0x40]; -using CSmartPropAttributeVector2D = char[0x40]; -using CSmartPropVariableComparison = char[0x20]; -template -using CSmartPtr = char[0x08]; -using CSoundEventName = char[0x10]; -using CSplitScreenSlot = char[0x04]; -template -using CStrongHandle = char[0x08]; -template -using CStrongHandleCopyable = char[0x08]; -// size doesn't matter. only used as a pointer -using CStrongHandleVoid = char[0x08]; -using CTransform = char[0x20]; -using CUtlBinaryBlock = char[0x18]; -template -using CUtlHashtable = char[0x20]; -template -using CUtlLeanVector = char[0x10]; -template -using CUtlLeanVectorFixedGrowable = char[0x10 + ((sizeof(Ty) < 4) ? 4 : sizeof(Ty))]; -template -using CUtlOrderedMap = char[0x28]; -template -// size doesn't matter. only used as a pointer -using CUtlPair = char[0x01]; -using CUtlString = char[0x08]; -using CUtlStringToken = char[0x04]; -using CUtlStringTokenWithStorage = char[0x18]; -using CUtlSymbol = char[0x02]; -using CUtlSymbolLarge = char[0x08]; -template -using CUtlVector = char[0x18]; -template -using CUtlVectorEmbeddedNetworkVar = char[0x50]; -template -// size is a guess that fits both occurrences of this type in CS2 -using CUtlVectorFixedGrowable = char[0x18 + ((sizeof(Ty) < 4) ? 4 : sizeof(Ty))]; -using CUtlVectorSIMDPaddedVector = char[0x18]; -template -using CVariantBase = char[0x10]; -template -using CWeakHandle = char[0x18]; -template -using C_NetworkUtlVectorBase = char[0x18]; -template -using C_UtlVectorEmbeddedNetworkVar = char[0x50]; -using Color = char[0x04]; -using DegreeEuler = char[0x0c]; -using FourVectors = char[0x30]; -using HSCRIPT = char[0x08]; -// size doesn't matter. only used as a pointer -using KeyValues = char[0x01]; -using KeyValues3 = char[0x10]; -using PulseSymbol_t = char[0x10]; -using QAngle = char[0x0c]; -using Quaternion = char[0x10]; -using QuaternionStorage = char[0x10]; -using RadianEuler = char[0x0c]; -using Range_t = char[0x08]; -using RotationVector = char[0x0c]; -template -using SphereBase_t = char[0x10]; -using V_uuid_t = char[0x10]; -using Vector = char[0x0c]; -using Vector2D = char[0x08]; -using Vector4D = char[0x10]; -using VectorAligned = char[0x10]; -using WorldGroupId_t = char[0x04]; -using float32 = char[0x04]; -using fltx4 = char[0x10]; -using matrix3x4_t = char[0x30]; -using matrix3x4a_t = char[0x30]; -using panorama_CPanelPtr = char[0x08]; - -// intentionally left undefined. if you want to access static fields, add your own sdk. -namespace interfaces { - struct SchemaStaticFieldData_t { - void* m_pInstance{}; - }; - - struct CSchemaClassInfo { - auto GetStaticFields() -> SchemaStaticFieldData_t**; - }; - - struct CSchemaSystemTypeScope { - auto FindDeclaredClass(std::string_view) -> CSchemaClassInfo*; - }; - - struct schema_t { - auto FindTypeScopeForModule(std::string_view) -> CSchemaSystemTypeScope*; - }; - - extern schema_t* g_schema; -} // namespace interfaces