Game engine behind Sea Dogs, Pirates of the Caribbean and Age of Pirates games.

Overview

Storm-Engine

Game engine behind Sea Dogs, Pirates of the Caribbean and Age of Pirates games.

Join the chat at https://discord.gg/jmwETPGFRe GitHub Actions Build Status

Supported games

Building the project

You need to install Conan and add it to the %PATH% environment variable. Also, make sure you have the following Visual Studio components installed:

  • C++ CMake Tools for Windows
  • C++ Clang Compiler for Windows
  • C++ MFC for latest v142 build tools (x86 & x64)

Open the repo root as a CMake project in Visual Studio 2019 and select engine.exe as a startup item.

For running engine.exe you need to have DirectX 9 runtime libraries installed.

Roadmap

Since our development team is small, we want to reduce the amount of code we have to maintain. For this reason, we decided to rely on the C++ standard library or third-party libraries if possible.

Some things that we are going to do:

  • Replace a custom math library with a third-party one, e.g. glm.
  • Replace custom rendering code with a bgfx library.
  • Replace custom input handling code with a third-party library, e.g. gainput.
  • Replace custom data structures with C++ standard types.
  • Replace a custom scripting language with Lua.
  • Replace ini config files with JSON.
  • Replace custom binary asset formats with standard ones.

Contributing

If you'd like to get involved, don't hesitate to contact us. Pull requests and any other kind of help are more than welcome as well.

If you want to start with small contributions, updating the code to the modern C++ and fixing compiler warnings are very much appeciated.

License

GPL-3.0 License

Issues
  • Overhauling of build system

    Overhauling of build system

    This is a quite major update ( not in terms of size though :) ) that almost does not affect the code but IMO this is a necessary step for further refactoring and cleanup. It mostly consists of three parts:

    1. implement "autocmake" system called "StormSetup" similar to one that @Hammie added, but considering SE-specific things. It is 'globbing' based but with enabled CONFIGURE_DEPENDS
    2. bring back Thunderstom classes registry to get rid of "vmainit". Since we are on static-libs now this is kind of a workaround too. but it is lesser of two evils and also conforms the original architecture
    3. move externals to artifactory

    It is far from a finished state but I need reviews and comments on that so I can fix and finish the stuff.

    Known issues ATM are: resources are not compiled - to be automated via StormSetup tests are not compiled - to be automated via StormSetup clang build is likely not working (I did not test that) - I think StormSetup needs tweaking to support it

    Please, take a look and do not hesitate to leave a comment

    enhancement 
    opened by espkk 9
  • CI: disable to build fix/* and feature/* branches

    CI: disable to build fix/* and feature/* branches

    It looks like CI is running too often. If we make it as rule to create small branches as a fix/* or feature/*, then these changes will help reduce/speed up the build.

    Here is docs about CI branches: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-including-branches-and-tags

    opened by q4a 7
  • Restore default behaviour for script function SendMessage

    Restore default behaviour for script function SendMessage

    SendMessage's default behavior when first argument was not a valid entity was to return 0, according to this line. This was changed in thunderstorm. Some code in TEHO stopped functioning because of that, for example F2 interface wouldn't open on worldmap. While this is something that can and should be fixed in scripts, I'm pretty sure COAS relied on SendMessage returning 0 too, so this behavior should be reverted for compatibility reasons.

    opened by mitrokosta 6
  • fix crash on Ship_HullDamage call (event_name

    fix crash on Ship_HullDamage call (event_name "ShpHullDamage")

    How to reproduce crash: Load attached save and fight with enemy in sea. Open_sea-SAVE.zip Crash sometimes happens when cannonballs hit your ship.

    How it looks like in debugger: unknown

    opened by q4a 5
  • Linux related changes part 1

    Linux related changes part 1

    The Linux version is ready and works well enough in my opinion, so it's time to merge. I decided to split the changes into several parts. In this (first) part there will be small changes and additional functions that are needed for building and correct working engine on Linux.

    opened by q4a 5
  • Overhaul logging and crash handling

    Overhaul logging and crash handling

    What is done:

    • Enable logging by default
    • Flush in a separate thread every 5 seconds (configurable in code so far) after core iteration run
    • Fixup sentry/crashpad, attach archived logging folder

    There is still some related things to tweak. Mostly to make options configurable without rebuilding. But this is good to merge asap and eventually do the rest.

    bug enhancement 
    opened by espkk 5
  • Programming style guide

    Programming style guide

    Add initial style guide, based on https://github.com/lefticus/cppbestpractices

    It is quite outline, so we should add more сlarifications (strings, smart pointers, etc.) later.

    opened by ObKo 5
  • Use SDL for window and event handling.

    Use SDL for window and event handling.

    This PR Introduces window and OS event handling abstraction - WindowManager class. And its implementation using SDL.

    WindowManager defines OS-agnostic event struct (WMEvent), keyboard keys, etc. It handle OS events and can forward it to clients (Core, PCS_Control) using callbacks. Also, it provides methods to request current input state, replacing WinAPI's GetAsyncKeyState()

    Currently, it uses WinAPI's virtual key (VK_*) for keycodes for compatibility and converts them from/to SDL scancodes (aka "USB scancodes"). This conversion can be eliminated if we replace keycodes everywhere in code, including scripts which is work for future.

    pcs_controller and Core updated to use this new class. Core initialization code is messed, so WM is initialized outside of it for now.

    Tested for some time on TEHO - seems everything (sailing, walk, battle, gui) works same as before,

    Feel free to criticize this new approach.

    P.S.: There is https://github.com/storm-devs/storm-engine/pull/40 which also adds SDL, I wil rebase this PR when we will decide what to do with SDL.

    opened by ObKo 5
  • ini: fix reading ini files with LF endings

    ini: fix reading ini files with LF endings

    I will show the error on the example of reading the file loclighter.ini Option 1 CRLF:

    ; Loading Location lighter/r/n
    loading = 1/r/n
    ; Enable automatic trace auto preparing data/r/n
    

    End of the first pass of the loop before executing the code n += offset; we have: n = 0 and offset = 25

    After adding n += offset; and n++ from the loop we got: n = 26 and this indicates / n (which became/ 0). It turns out that we do not fall into the condition: if (file_data [n]! = 0)

    Option 2 LF:

    ; Loading Location lighter/n
    loading = 1/n
    ; Enable automatic trace auto preparing data/n
    

    End of the first pass through the loop before executing the code n + = offset; we have: n = 0 and offset = 25

    After adding n += offset; and n++ from the loop we got: n = 26 and this points to l (first character from 2nd line) and and it turns out that we get into this condition: if (file_data [n]! = 0) and execute it until we get to the end of the line / 0.

    Thus, we always lose the second line from the ini file.

    As a check, you can take a close look at the code before the changes:

        for (n = 0; n < file_size; n++)
        {
            if (n == 0)
            {
                data_PTR = file_data;
            }
            else
            {
                if (file_data[n] != 0)
                    continue;
                if ((n + 1) >= file_size)
                    break; // end of file
                if (file_data[n + 1] == 0)
                    continue; // separator zero
                data_PTR = file_data + n + 1;
    

    And the code after the changes:

        for (n = -1; n < file_size; n++)
        {
            if (n == -1)
            {
                data_PTR = file_data + n + 1; // is the same as data_PTR = file_data;
            }
            else
            {
                if (file_data[n] != 0)
                    continue;
                if ((n + 1) >= file_size)
                    break; // end of file
                if (file_data[n + 1] == 0)
                    continue; // separator zero
                data_PTR = file_data + n + 1;
    

    And then data_PTR = file_data + n + 1; could be used in 2 places.

    Russian version:

    Покажу ошибку на примере чтения файла loclighter.ini Вариант 1 CRLF:

    ;Loading Location lighter/r/n
    loading = 1/r/n
    ;Enable automatic trace auto preparing data/r/n
    

    Конец первого прохода цикла до выполнения кода n += offset; мы имеем: n = 0 и offset = 25

    После сложения n += offset; и n++ от цикла получаем: n = 26 и это указывает на /n (который превратился в /0). Получается, что мы не попадаем в условие: if (file_data[n] != 0)

    Вариант 2 LF:

    ;Loading Location lighter/n
    loading = 1/n
    ;Enable automatic trace auto preparing data/n
    

    Конец первого прохода цикла до выполнения кода n += offset; n = 0 и offset = 25

    После сложения n += offset; и n++ от цикла получаем: n = 26 и это указывает на l (первый символ из 2ой строки) и и получается, что мы попадаем в это условие: if (file_data[n] != 0) и выполняем его до тех пор, пока не встанем на конец строки /0.

    Таким образом мы всегда теряем вторую строку из ini файла.

    В качестве проверки можно внимательно посмотреть на код до изменени:

        for (n = 0; n < file_size; n++)
        {
            if (n == 0)
            {
                data_PTR = file_data;
            }
            else
            {
                if (file_data[n] != 0)
                    continue;
                if ((n + 1) >= file_size)
                    break; // end of file
                if (file_data[n + 1] == 0)
                    continue; // separator zero
                data_PTR = file_data + n + 1;
    

    И код после изменений:

        for (n = -1; n < file_size; n++)
        {
            if (n == -1)
            {
                data_PTR = file_data + n + 1; // is the same as data_PTR = file_data;
            }
            else
            {
                if (file_data[n] != 0)
                    continue;
                if ((n + 1) >= file_size)
                    break; // end of file
                if (file_data[n + 1] == 0)
                    continue; // separator zero
                data_PTR = file_data + n + 1;
    

    И тогда data_PTR = file_data + n + 1; можно было бы использовать в 2 местах.

    opened by q4a 5
  • Fix capitalization of filenames in CMake configuration

    Fix capitalization of filenames in CMake configuration

    Fixes the capitalization of filenames in the CMake configuration.

    Also adds missing includes for OSWindow when compiling with gcc, and disables the windows-specific options for unit tests.

    opened by Hammie 4
  • Fix crash when playing bow splash sound effect

    Fix crash when playing bow splash sound effect

    The bow splash sound effect that is supposed to play during storms, was begin played as a PCM_3D sound, but without passing a position. This fixes that by passing the position directly during play start.

    I've also added a check to just use a zero position instead of crashing should this ever happens again.

    opened by Hammie 0
  • Fix crash when creating AIGroup during SituationCheck

    Fix crash when creating AIGroup during SituationCheck

    New Horizons has a feature where ships can surrender during battle. This check happens during the SHIP_CHECK_SITUATION event. This creates a new "surrendered" group, potentially resizing the static AIGroup::AIGroups vector, which then invalidates the iterators in SEA_AI::Execute it is called from, crashing the game.

    This is a workaround by simply using the index instead of an iterator in the loop.

    opened by Hammie 0
  • Issue with head rendering in LegacyDialog

    Issue with head rendering in LegacyDialog

    for a second after dialog opening head is broken

    image

    https://user-images.githubusercontent.com/25062433/181077688-7c99152c-12da-4fd2-abf9-fd07004f08a0.mp4

    PR with LegacyDialog implementation https://github.com/storm-devs/storm-engine/pull/385

    bug 
    opened by Artess999 0
  • Need to case-convert non-ascii text

    Need to case-convert non-ascii text

    LegacyDialog needs to convert the character name to uppercase.

    Currently it is using std::toupper but this does not work correctly with non-ascii (i.e. Russian) characters.

    bug help wanted 
    opened by Hammie 0
  • Add new LegacyDialog entity

    Add new LegacyDialog entity

    Adds a LegacyDialog entity that implements the old Seadogs 2 dialog system for use in New Horizons.

    Does not yet include pagination or mood settings for the head animation.

    Also includes https://github.com/storm-devs/storm-engine/pull/383

    opened by Hammie 3
Releases(beta4)
  • beta4(Jul 14, 2022)

    69f6e41f [linux] fix XI_FindFolders in Linux 7d395a7b conan: fix missed mimalloc-redirect.dll e8c86611 anotther fix for dynamic ships lights a9e3785b Revert "another ships ligths fix, revert some changes" 21081d67 another ships ligths fix, revert some changes 055f5076 [linux] fix LifecycleDiagnosticsService initialization ecd12523 conan: split Windows/Linux parts and __intall_lib->__install_lib 33fe9f26 CTechnique: fix reading SlopeScaleDepthBias from memory ee489815 [sailors] sailor_waypoints: fix reading on linux e3082529 [sailors] fix the rest of rand() 48260012 CTechnique: fix flickering shadows on Linux d7fe2841 [linux] fix loading textures with relative paths a940cfd6 [linux] ScanResourcePaths now checks current path and executable path 68128601 [linux] fix sounds/music in Linux fde7e320 [linux] fix TextureLoad with double path separators cbbc64d3 file_system: improve ConvertPathResource feature for created save files 8d742049 [linux] fix loading data from save folder 3c6f41de [linux] first version for resource paths handling on Linux e27d13e1 [particles] workaround crash pt2 812ce85a [sailors] more cleanup and refactoring + fixes 01eee6f9 [conan] remove openssl dependency, remove crashpad option, sdl2=>sdl e76dec5b [sailors] refactor shipMan usage and destructors 82456af6 [sailors] cleanup 06da13da [sailors] add sanity checks 1d9b15d3 [particles] particle_manager: segfault workaround bce742da sailors: cleanup d3438efa [linux] add pre_job requirement for Linux CI 85c52801 PCS_CONTROLS: allow to use numpad arrows if regular arrows are specified in the options 09aac3a1 sailors: add customizable sailors models 4395da2c [linux] move debug-trap.h and winuser.rh to libs/common/include 5bd27b15 [linux] fix linking storm modules to executable 42e5b03e [linux] put implementations of convert_path_sep and _s into cpp ee6a5209 [conan] remove Windows default option: transport = "winhttp" c3d1dcb6 [linux] use unique_ptr for CTechnique in s_device. 1d4a168c [linux] add TODO: check and replace __except 8c5dbde6 [linux] put whole if-block with CreateEventA under #ifdef/#endif 72a3e392 [linux]: remove unnecessary tbb flag b7e25c1b [linux] fix #include f36faa07 [linux] add Linux build status to readme 9346b85b [linux] simplify linking engine 4ed6e263 [linux] fix building sea.cpp in Linux a11346f8 [linux] FIX_LINUX GetWindowRect 92b6b5b9 [linux] disable check for duplicate instances (CreateEventA) 6a41ee9c [linux] FIX_LINUX ddraw.h and amstream.h b643d7de [linux] add window flag and fix OSHandle for DXVK-Native ca10d627 [linux] disable Beep on Linux 24f75c81 [linux] add D3DXLoadSurfaceFromSurface implementation from Wine 46e5d94b [linux] fix compilation for sailors_editor.cpp in Linux 36c5b577 [linux] disable TextureLoadUsingD3DX - used only for loading raw Targa 3f7e4158 [linux] disable bSafeRendering in Linux 686a7968 [linux] add #ifdef _WIN32 // Screenshot a7f2f685 [linux] FIX_LINUX DirectXMath - use native storm math in Linux c8c6b2ea [linux] FIX_LINUX _flushall a43faad9 [linux] wrap #include <corecrt_io.h> and <DxErr.h> 9ab36edc [linux] FIX_LINUX Cursor fbb48b56 replace GetLocalTime with std::localtime ea40e434 [linux] use catch (...) in Linux instead of __except 9effa01c [linux] add #ifdef _WIN32 // HINSTANCE 63aaa21b [linux] fix build with move core/src/ifs.h->core/include/ifs.h ab36cfde [linux] FIX_LINUX 7za.exe 37b3f6f9 [linux] FIX_LINUX sentry_options eeeebe9b CTechnique: add grass_main.vso - compiled asm grass shader from 70c53722 CTechnique: add vso and pso files - compiled asm shaders (without grass) 6018ab67 [linux] use SDL_GetPrefPath in Linux instead of SHGetKnownFolderPath 288abeca file_system: add "recursive" param to GetPathsOrFilenamesByMask 5e107dcf [linux] add grass shader for Linux with SetVertexShaderConstantF 4bfb7dba [linux] add usage for CTechnique instead of ID3DXEffect 5984717e [linux] fix build CTechnique ba661300 CTechnique: reformat technique.cpp and technique.h b1177945 CTechnique: add technique.h and technique.cpp from 6b1cce45 [linux] fix dependencies for input and fix linking on Linux c647ced6 [linux] add #ifdef WIN32 // S_DEBUG 68396edf [linux] fix includes for Linux 4804efa5 [linux] add winuser.rh from Wine 7.9 for VK* defines. Copied from: 44d3090c [linux] add convert_path_sep, defines for MAX* and MAKELONG add platform includes aa63dd6f [linux] use inline wrapper for strcat_s, strcpy_s, strncpy_s 2b9cba62 remove useless variable FileNameW 24d1820f [linux] replace __debugbreak() with psnip_trap() 82ed9831 [linux] add debug-trap for __debugbreak wrapping. Copied from: 587fb6a0 [linux] fix headers for Linux, including <d3dx9.h> 3515646a [linux] fix for conan CI on Linux 43ac9a81 [conan] set explicit dependency from openssl on Linux 53b415ce [linux] add CI for Linux, dxvk_native, safeclib and 1st version for storm_platform.h df7f85a1 Make sure all fields of the battle navigator are initialized c3faa435 [core] entity_manager: cleanup 8e4696fc [core] entity_manager: attempt to fix some rare crashes 06ce4dfe [location] random typo fix 5569a762 [core] rework entity_manager pt.3 - rewrite entity container to vector - rewrite support containers to stack af7e2764 [core] rework entity_manager pt.2 - refactor - add entity view cache - fix entity iterators e7ff927f [core] rework entity_manager pt.1 6b5a7274 [core, common] refactor entity_manager and move it to core fdfe9269 [battle_interface] battle_ship_command: fix dynamic ordering 37fed63d [location] supervisor: push models in same point 55f1d3fe [battle_interface] battle_ship_command: fix dynamic ordering 569f5e2b fix for has_resource_prefix and has_tx_postfix c232d880 [linux] replace GetTickCount with SDL_GetTicks d7a0d048 [linux] replace QueryPerformanceCounter with SDL_GetPerformanceCounter 2e8849fb fix crash on Ship_HullDamage call (event_name "ShpHullDamage") 533e0bce remove unused commented out file zap_super_generator.cpp 4494b48c [linux] fix VK_NUMLOCK checking 2ae39660 [linux] it makes no sense to make WinAPI calls from virtual functions 784c70a3 [linux] replace GetKeyState and GetAsyncKeyState with core functions caacbf5b [linux] use brace (aggregate) initialization inside emplace_back for clang c135c0ab remove unused CXI_UTILS::GetKeyInput ae0f6f97 [linux] replace MSVC _strupr and _strlwr with custom toupr and tolwr 87cdb7de [linux] add starts_with+ends_with and use it when textures loading 4a73cd1c SaveGames: use same type (uLongf) when compressing and uncompressing save file with zlib v2 5512a3b3 remove unused struct tSoundDriverDescriptor, FILETIME ft_old 97c171b3 [linux] replace MessageBoxA with SDL_ShowSimpleMessageBox d378f2a1 replace _splitpath with std::filesystem::path 066cfc90 replace _strdup with strdup bd510e90 [linux] replace WinMain with regular main 119daa3c [location] supervisor: push models in same point d4197714 [core] token: fix incorrect debug source line - in files with '\n' ending (not '\r\n') this caused linefeed token to be omitted 73712688 [mimalloc] disable statistics writing after exiting WinMain f397bd7e Fixed code review comments f59cad94 Removed duplicates from target link list ff1cc4fb [renderer] adjust TextureLoad path 32733552 Fix bug that caused some children to be lost when copying attributes 655a6fa7 [meta,cmake] rework modules approach for cmake 66ab7de4 [common] attributes: legacy proxy 5254c7bf Fix crash due to string conversion from nullptr 74da0719 [core] core elicitation into static lib 9bce64ff [common] attributes: cleanup 69058b5f [core] internal_functions: sort (attributes) 2376065f Store attribute value as std::string 046a1e9b Simplify ATTRIBUTES construction Reduces the number of unneeded Convert("root") calls d5ff44c2 [xinterface] fix multisampled info_handler - support multisampled rt - small refactoring and cleanup e6070f9e [sea_ai] ai_group configurability - individual ship position in group can be manipulated through event - removed non-vanilla behavior (in any case it was broken) 6f1aea88 [core] Fix script cache crash 6d936478 [battle_interface] Dynamic commands 7615706b [location] apply camera perspective immediately 5d3a2df4 [sea_cameras] ship_camera slight cleanup f5840a0d [sea_cameras] Better ship camera parameters calculation - Immersion considered - Base camera centration clamped by hull height proportion - Bottom view uses real height and applied after clamping 900a9a0f [sea_cameras] Add debug draw for camera 58fcb292 remove unused screenshot.cpp bVideoCapture will never become true and functions in screenshot.cpp can be called if bVideoCapture == true 4f6cbd58 remove unused CreateTextureFromFileInMemory 42b6e587 blender-plugins: fix for blender 3.1 74786e39 Fix va_list compile error on linux a0d53dbd Fix issue with converting uint32_t to int32_t in message params e5f83926 Fix '#' prefix in scroll-image text 560b1344 Add message for setting text alignment from scrips 5580b445 [linux] replace D3DXQUATERNION and D3DXMATRIX with internal functions from math3d/(quaternion.h and matrix.h) 0f8c4369 [core] fast_float: parse scientific input 82eee79d [sea_cameras] free_camera: keep last pos and ang b71ffc7c battle_ship_sign: fix for custom sized texture 18980fdf [rigging] Debug mast destruction 61f8e2b3 [sailors] fix rare crash when Ship.Masts absent abcf5778 [xinterface] xi_formt_text: correctly use scaling for width calculation 90740756 [xinterface] xi_formt_text: fix utf8 crash 3f47daf9 [core] fix memory leaks 2ff1e754 [location] query NPC_Event_ShotEnemyTest before each shot 539089f1 [linux] replace _access wirh std::filesystem::exists 318ad5c9 [core] fix mimalloc fun deinit order dependency 09e6afcd replace CreateFile, WriteFile, CloseHandle in compiler.cpp and remove unnecessary CreateDirectory from str_service.cpp f05a30c1 type of parentclock should match with getDSPClock param from fmod.hpp f4ef2662 [linux] fix error: non-const lvalue reference to type 'va_list' (aka '__builtin_va_list') cannot bind to a value of unrelated type '_va_list_tag ' b4747465 [linux] add #include by jjdredd f7402331 Remove Files_list manipulations (needed only at compile time) d7d41c2c Move use_cache parameter 40daf9ad Add whole file crc verification 11d30eba Change std::memcpy to std::copy d30f5a8b Check for fs error 0b5af638 Remove space 5e08dfd2 Refactor variable value assignment aceebc5f Replace map with unordered_map 3644c03a Fix compile error b6b79edc Release files list (needed for recompile) 672423f9 Add CRC verification, fix bug with defines 290ca25b Add defines to cache 65646ecb Fix pass by reference efb96a86 Fix cache initialization 1541d985 Add cached information 2dbeee90 Rename method 766eeaf6 Add cache writing methods fd22a430 Actually load from cache first 37f0069a Add loading scripts from cache 09f62100 Add script data reading function 7d3d9c6d Add cache classes 437f385a Add script cache setting 95cdf45f [core] crossplatform link mimalloc 65d969fa [core] fix passing raw std::string 13e006ba [sea_ai] Remove boolean that cause link.exe to crash f7002340 [linux] replace _isnan wirh isnan 04bcc8d9 [linux] replace _MAX_PATH with MAX_PATH cea05df8 replace ptrdiff_t with std::ptrdiff_t 9abb752e replace MSVC-only _ltoa with sprintf 5d1c29e5 [core] fallback to 0 if from_chars failed ab7bf426 CI: add skip-duplicate-actions 5fe3cd5f [core] Don't forward SDL events until core initialized c20bd9c4 [meta] Fix build d0eb31a1 [core] Integrate mimalloc override allocators 88a4aaec [location] location_camera: configurable perspective - introduced msg MSG_CAMERA_SET_PERSPECTIVE 122d3ae3 Remove old commented out code 02d966eb [xinterface] CXI_CHECKBUTTONS: fix crash when no matching string found 7d74247a [battle_interface] Fix gun recharge bar 1e9e701e [battle_interface] Fix gun recharge bar e5d2a0cb Apply suggestions from code review ee15b412 [sea_ai] Drastically improve ballistics prediction 0ffa9121 replace _strnicmp with storm::iEquals b7487272 [sea_ai] AIShipCannonController debug draw + some refactoring f67c3500 replace MSVC-only _countof with std::size 8b1969cf use va_list instead of (char ) in vsnprintf 05302e49 fix indentation, rename bTmpOff variable 39d46bb8 Correct sleep_for time ad4c1b84 fix ship lights on/off during day/night cycle w/o location reloading 32316f56 Update battle_man_sign.cpp 9a9634d4 Return GetTickCount() for ticks counter query + replace srand(std::time(nullptr)) with srand(duration_cast(system_clock::now().time_since_epoch()).count()) 9d6b5706 replace MSVC-only Sleep, GetTickCount 57cb8d04 remove unused intel.h and "DColor::operator uint32_t()" 571b9db0 Update battle_man_sign.cpp ac658161 Names Update af62fe6f CI: enable building for all branches 844806ba Add Texture To Customise 5d8e8e9c replace MSVC-only vsnprintf_s, _snprintf _ultoa_s, _ltoa_s 534f9089 Gun reload bar 93562e1d [location] impact one more FindGunTarget 211ff213 [location] Get rid of compatibility layer for stun chance c0cdb7d2 [location] Configure NPC/player shot enemy test fa935ee8 fix for include "storm/string_compare.hpp" 7f499e97 replace _stricmp with storm::iEquals same for _strcmpi c05d102d [sea_cameras] tweak ShipCamera ede657f3 [worldmap] Add flag customizability 9ae280bc [sound_service] Fix sound fader volume 77a17043 [renderer, location] Fix location fade-in - implement multisampled gmem->gmem copy - rewrite and optimize fader code b98bfd74 replace GetLong functions to GetInt 59a6b1f8 return atoll in compiler.cpp cb30555b remove unnecessary static_cast<int32_t> 49c97b74 replace: long => int32_t add struct IPOINT{int32_t x, y;} replace POINT with IPOINT, when it was necessary 1f7ffbbd replace: unsigned long => uint32_t unsigned long int => uint32_t unsigned long long => uint64_t d2c2cba0 [meta] Update sentry-native to 0.4.13 Fixed crashpad_exception_info_windows.patch. Added Linux support 7c7ded87 [window] Disable border when windowed f57b6696 [meta, sound_service] Update FMOD to 2.02.05 b49b2dfa [meta,core] Reorganize include structure - Segregate interface from Core API again - Reduce includes' depth - Reduce 'Windows.h' impact ec33414f [renderer] add fov multiplier 51a2c63e [renderer] Improve screenshot feature - Introduce configurable (from engine.ini) screenshot format - Change naming to reflect date/time + collisions - Move screenshots into ${Stash}/Screenshots folder 591b9e82 [core] fix rand again aed135a8 [input, pcs_controls] workaround mouse axis on windows 8641b016 [meta] Update SDL to 2.0.18 f06450ca [SoundService] add alt-tab sound fader 29890482 remove .user and add it to .gitignore ba0cb47d fix filenames in #include 1d5885eb renames for files according to coding style: all leftover files ee094418 renames without editing on case sensitive FS 4132a0cf renames for files according to coding style: src/libs/sea 715c2359 renames for files according to coding style: src/libs/sea ead0fdde renames for files according to coding style: src/libs/location/ f5a3b573 renames for files according to coding style: src/libs/particles/ ce4b6646 renames for files according to coding style: wdm* mostly f73c9fdc [location] fix fader PICTURE0 draw 2f0bd8e5 [renderer] Use 0 adapter by default 70bc17cc [SoundService] Changes to sounds slots - increase max slots to 4095 - improve performance e61f3e2d [ship] fix CalcRealBoxsize 9f62a7f8 Fix issues with partial iEquals 2ed0c421 Fix comparing strings with raw string literals and count parameter for partial comparisons 6c56e86e [core] cleanup compiler 0961a555 [core] rewrite rand (???) bfd6d4b2 [core] compiler functions profiling ec32d6c1 [input,window] set correct calling conv for handlers 22699e66 [meta,core] fast float c9b4c224 [grass] no lag in sea anymore 1bafaf18 remove duplicated file ptc.h from libs/worldmap/src/ libs/location/src/ptc.h moved to libs/Common/include 8fb3bc45 delete unused header for class CXPICTURES without implementation 28b52087 Allow MODELR to be animated 7b4b9edf Fix crashpad initialization when built without crash reports fb692e96 Refactor CORE::Event into a variadic template function 9126d188 SoundService: Audio Pitch Controller 9cf1812a Procedural head look: code quality 777c1993 [renderer] fix DrawRects draw size 17b39f44 Refactor options parsing to remove hard-coded character limit 56618c79 Add required VS component to README.md 8538a39d Procedural head look: update docs/ani.txt c5e6419c Procedural head look: added an option in .ani file to change head bone index a1170b50 Procedural head look d724d80f Add notification when sound stops 86e12a0e [meta, diagnostics] enable exception elicitation a70ffa5b [xinterface] add loop flag for video - MSG_SET_VIDEO_FLAGS for aviplayer - flags ini field for VIDEORECT e02c0d84 Revert interface scaling changes when dynamic scaling is set to 1 82d0b7f9 Update CODEOWNERS 89e09f70 Do size checking when looking at save's metadata ff74e8e0 bsp-patcher: readme 556bab9a bsp-patcher: add sources 16b0ad03 blender-gm-export: add triangulation 762fc0ec blender-gm-export: remove BSP

    Source code(tar.gz)
    Source code(zip)
    storm-engine.msvc-debug-steam-false.zip(47.53 MB)
    storm-engine.msvc-release-steam-false.zip(14.91 MB)
    storm-engine.msvc-release-steam-true.zip(15.11 MB)
  • beta3(Nov 21, 2021)

Owner
Storm Devs
Storm Devs
An SDL-1.2 compatibility layer that uses SDL 2.0 behind the scenes.

Simple DirectMedia Layer (SDL) sdl12-compat --- https://www.libsdl.org/ This is t

Simple Directmedia Layer 97 Jul 24, 2022
Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World.

OpenXRay OpenXRay is an improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. S

null 2k Jul 30, 2022
CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine

CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine. This engine has been designed with a cross-platform design in mind. Thanks to Vulkan API it delivers a next-gen experience with ray tracing to both Linux and Windows platforms

Jakub Biliński 33 Jul 28, 2022
This is a list of different open-source video games and commercial video games open-source remakes.

This is a list of different open-source video games and commercial video games open-source remakes.

Ivan Bobev 94 Jul 31, 2022
Ground Engine is an easy to use Game Engine for 3D Game Development written in C++

Ground Engine is an easy to use Game Engine Framework for 3D Game Development written in C++. It's currently under development and its creation will b

 PardCode 52 Jul 31, 2022
Open-source, cross-platform, C++ game engine for creating 2D/3D games.

GamePlay v3.0.0 GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games. Website Wiki API De

gameplay3d 3.7k Jul 31, 2022
The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

null 2.7k Aug 6, 2022
OGRE is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.

OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.

null 2.9k Aug 2, 2022
Godot Engine – Multi-platform 2D and 3D game engine

Godot Engine 2D and 3D cross-platform game engine Godot Engine is a feature-packed, cross-platform game engine to create 2D and 3D games from a unifie

Godot Engine 51.6k Aug 3, 2022
Project DELTA - An open-source trainer built on the Void Engine for Toby Fox's games and their spin-offs.

Project DELTA v3 Project DELTA - An open-source, modular mod menu for Toby Fox's games and their spin-offs. Important note to Grossley: Yes, it is out

Archie 7 Apr 20, 2022
An Unreal Engine 4 silent aim method, not usable on all games. Tested on Fortnite, Rogue Company, Bloodhunt, and Splitgate.

UE4-Silent-Aim An Unreal Engine 4 silent aim method, not usable on all games. Only tested on Fortnite, Rogue Company, Bloodhunt, and Splitgate. Done t

null 38 Aug 7, 2022
This is netvars, interfaces and class ids dump from Valve's Source2 Engine games

About this This is netvars, interfaces and class ids dump from Valve's Source2 Engine games: Artifact Classic Artifact Foundry Dota 2 Dota Underlords

Dmitry 9 May 24, 2022
Flax Engine – multi-platform 3D game engine

Flax Engine – multi-platform 3D game engine

Flax Engine 3.4k Jul 31, 2022
MAZE (My AmaZing Engine) - 🎮 Personal open-source cross-platform game engine

MAZE (My AmaZing Engine) is the self-written open-source cross-platform game engine in the active development stage. At the moment it is my main pet project, developed for the purpose of learning and preserving different game dev technologies.

Dmitriy Nosov 11 Jan 9, 2022
Rogy-Engine- - My 3D game engine source code.

Rogy-Engine Development My 3D game engine. (NOT THE FINAL VERSION- Windows only) Features: PBR shading and reflection probes with parallax correction.

AlaX 92 Jun 18, 2022
Hyperion Engine is a 3D game engine written in C++

Hyperion Engine About Hyperion Engine is a 3D game engine written in C++. We aim to make Hyperion be easy to understand and use, while still enabling

null 163 Aug 9, 2022
Minetest is an open source voxel game engine with easy modding and game creation

Minetest is an open source voxel game engine with easy modding and game creation

Minetest 7.7k Aug 3, 2022
Bounce is a 3D physics engine for games.

Bounce Welcome! Bounce is a 3D physics engine for games. Features Common Efficient data structures with no use of STL Fast memory allocators Built-in

Irlan Robson 70 Jul 26, 2022
Speedrun plugin for Source engine games.

Features Automatic demo recording Accurate session timing Speedrun timer with complex custom rule system Tools for segmented and tool-assisted speedru

Portal 2 Speedrunning 48 Jul 25, 2022