From a024866fd3c21929d5b488fe098a8a7cde255f78 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 16 Nov 2017 18:43:45 +0100 Subject: [PATCH 01/44] Builder bots base implementation --- src/CPackConfig.cmake | 93 +++++++++++++++++++++++++ src/CPackSourceConfig.cmake | 100 +++++++++++++++++++++++++++ src/common/restext.cpp | 4 ++ src/desktop/colobot.rc | 25 +++++++ src/graphics/engine/pyro.cpp | 23 ++++++ src/graphics/engine/water.cpp | 4 ++ src/level/parser/parserparam.cpp | 8 +++ src/level/robotmain.cpp | 8 +++ src/object/auto/autofactory.cpp | 4 ++ src/object/auto/automush.cpp | 4 ++ src/object/auto/autonuclearplant.cpp | 4 ++ src/object/auto/autopowerplant.cpp | 4 ++ src/object/auto/autopowerstation.cpp | 4 ++ src/object/drive_type.cpp | 4 ++ src/object/motion/motiontoto.cpp | 4 ++ src/object/motion/motionvehicle.cpp | 34 +++++++++ src/object/object_factory.cpp | 4 ++ src/object/object_type.h | 4 ++ src/object/old_object.cpp | 25 +++++++ src/object/task/taskbuild.cpp | 8 +-- src/object/task/taskgoto.cpp | 16 +++++ src/object/task/tasktake.cpp | 4 ++ src/object/tool_type.cpp | 6 ++ src/object/tool_type.h | 1 + src/physics/physics.cpp | 21 ++++++ src/script/cbottoken.cpp | 4 ++ src/script/scriptfunc.cpp | 8 +-- src/src/common/config.h | 22 ++++++ src/src/common/version.h | 7 ++ src/ui/controls/map.cpp | 8 +++ src/ui/mainshort.cpp | 4 ++ src/ui/object_interface.cpp | 8 +++ 32 files changed, 469 insertions(+), 8 deletions(-) create mode 100644 src/CPackConfig.cmake create mode 100644 src/CPackSourceConfig.cmake create mode 100644 src/desktop/colobot.rc create mode 100644 src/src/common/config.h create mode 100644 src/src/common/version.h diff --git a/src/CPackConfig.cmake b/src/CPackConfig.cmake new file mode 100644 index 00000000..fbcd118a --- /dev/null +++ b/src/CPackConfig.cmake @@ -0,0 +1,93 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +SET(CPACK_BINARY_7Z "OFF") +SET(CPACK_BINARY_BUNDLE "") +SET(CPACK_BINARY_CYGWIN "") +SET(CPACK_BINARY_DEB "") +SET(CPACK_BINARY_DRAGNDROP "") +SET(CPACK_BINARY_IFW "OFF") +SET(CPACK_BINARY_NSIS "ON") +SET(CPACK_BINARY_OSXX11 "") +SET(CPACK_BINARY_PACKAGEMAKER "") +SET(CPACK_BINARY_PRODUCTBUILD "") +SET(CPACK_BINARY_RPM "") +SET(CPACK_BINARY_STGZ "") +SET(CPACK_BINARY_TBZ2 "") +SET(CPACK_BINARY_TGZ "") +SET(CPACK_BINARY_TXZ "") +SET(CPACK_BINARY_TZ "") +SET(CPACK_BINARY_WIX "OFF") +SET(CPACK_BINARY_ZIP "OFF") +SET(CPACK_BUILD_SOURCE_DIRS "C:/Users/Fiftytwo/Repos/colobot;C:/Users/Fiftytwo/Repos/colobot/src") +SET(CPACK_BUNDLE_NAME "Colobot: Gold Edition") +SET(CPACK_CMAKE_GENERATOR "MSYS Makefiles") +SET(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +SET(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +SET(CPACK_GENERATOR "NSIS") +SET(CPACK_INSTALL_CMAKE_PROJECTS "C:/Users/Fiftytwo/Repos/colobot/src;colobot;ALL;/") +SET(CPACK_INSTALL_PREFIX "C:/Program Files (x86)/colobot") +SET(CPACK_MODULE_PATH "C:/Users/Fiftytwo/Repos/colobot/cmake") +SET(CPACK_NSIS_DEFINES "SetOverwrite on +BrandingText \"Colobot: Gold Edition (0.1.11+alpha-git-dev~radda8281)\"") +SET(CPACK_NSIS_DISPLAY_NAME "Colobot") +SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") +SET(CPACK_NSIS_INSTALLER_ICON_CODE "!define MUI_HEADERIMAGE_BITMAP \"C:/Users/Fiftytwo/Repos/colobot/desktop/colobot_nsis.bmp\" + !define MUI_WELCOMEFINISHPAGE_BITMAP \"C:/Users/Fiftytwo/Repos/colobot/desktop/colobot_nsis_left.bmp\"") +SET(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") +SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "colobot.exe") +SET(CPACK_NSIS_MUI_ICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico") +SET(CPACK_NSIS_MUI_UNIICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico") +SET(CPACK_NSIS_PACKAGE_NAME "Colobot") +SET(CPACK_OUTPUT_CONFIG_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackConfig.cmake") +SET(CPACK_PACKAGE_DEFAULT_LOCATION "/") +SET(CPACK_PACKAGE_DESCRIPTION_FILE "C:/Users/Fiftytwo/Repos/colobot/desktop/../README.md") +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Colobot: Gold Edition") +SET(CPACK_PACKAGE_EXECUTABLES "colobot;Colobot: Gold Edition") +SET(CPACK_PACKAGE_FILE_NAME "colobot-0.1.11+alpha-git-dev~radda8281") +SET(CPACK_PACKAGE_ICON "") +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Colobot") +SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "Colobot") +SET(CPACK_PACKAGE_NAME "colobot") +SET(CPACK_PACKAGE_RELOCATABLE "true") +SET(CPACK_PACKAGE_VENDOR "TerranovaTeam") +SET(CPACK_PACKAGE_VERSION "0.1.11") +SET(CPACK_PACKAGE_VERSION_MAJOR "0") +SET(CPACK_PACKAGE_VERSION_MINOR "1") +SET(CPACK_PACKAGE_VERSION_PATCH "11") +SET(CPACK_RESOURCE_FILE_LICENSE "C:/Users/Fiftytwo/Repos/colobot/desktop/../LICENSE.txt") +SET(CPACK_RESOURCE_FILE_README "C:/msys64/mingw64/share/cmake-3.9/Templates/CPack.GenericDescription.txt") +SET(CPACK_RESOURCE_FILE_WELCOME "C:/msys64/mingw64/share/cmake-3.9/Templates/CPack.GenericWelcome.txt") +SET(CPACK_SET_DESTDIR "OFF") +SET(CPACK_SOURCE_7Z "ON") +SET(CPACK_SOURCE_CYGWIN "") +SET(CPACK_SOURCE_GENERATOR "7Z;ZIP") +SET(CPACK_SOURCE_OUTPUT_CONFIG_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackSourceConfig.cmake") +SET(CPACK_SOURCE_RPM "") +SET(CPACK_SOURCE_TBZ2 "") +SET(CPACK_SOURCE_TGZ "") +SET(CPACK_SOURCE_TXZ "") +SET(CPACK_SOURCE_TZ "") +SET(CPACK_SOURCE_ZIP "ON") +SET(CPACK_STRIP_FILES "TRUE") +SET(CPACK_SYSTEM_NAME "win64") +SET(CPACK_TOPLEVEL_TAG "win64") +SET(CPACK_WIX_SIZEOF_VOID_P "8") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/src/CPackSourceConfig.cmake b/src/CPackSourceConfig.cmake new file mode 100644 index 00000000..d6dddd85 --- /dev/null +++ b/src/CPackSourceConfig.cmake @@ -0,0 +1,100 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +SET(CPACK_BINARY_7Z "OFF") +SET(CPACK_BINARY_BUNDLE "") +SET(CPACK_BINARY_CYGWIN "") +SET(CPACK_BINARY_DEB "") +SET(CPACK_BINARY_DRAGNDROP "") +SET(CPACK_BINARY_IFW "OFF") +SET(CPACK_BINARY_NSIS "ON") +SET(CPACK_BINARY_OSXX11 "") +SET(CPACK_BINARY_PACKAGEMAKER "") +SET(CPACK_BINARY_PRODUCTBUILD "") +SET(CPACK_BINARY_RPM "") +SET(CPACK_BINARY_STGZ "") +SET(CPACK_BINARY_TBZ2 "") +SET(CPACK_BINARY_TGZ "") +SET(CPACK_BINARY_TXZ "") +SET(CPACK_BINARY_TZ "") +SET(CPACK_BINARY_WIX "OFF") +SET(CPACK_BINARY_ZIP "OFF") +SET(CPACK_BUILD_SOURCE_DIRS "C:/Users/Fiftytwo/Repos/colobot;C:/Users/Fiftytwo/Repos/colobot/src") +SET(CPACK_BUNDLE_NAME "Colobot: Gold Edition") +SET(CPACK_CMAKE_GENERATOR "MSYS Makefiles") +SET(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +SET(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +SET(CPACK_GENERATOR "7Z;ZIP") +SET(CPACK_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +SET(CPACK_INSTALLED_DIRECTORIES "C:/Users/Fiftytwo/Repos/colobot;/") +SET(CPACK_INSTALL_CMAKE_PROJECTS "") +SET(CPACK_INSTALL_PREFIX "C:/Program Files (x86)/colobot") +SET(CPACK_MODULE_PATH "C:/Users/Fiftytwo/Repos/colobot/cmake") +SET(CPACK_NSIS_DEFINES "SetOverwrite on +BrandingText \"Colobot: Gold Edition (0.1.11+alpha-git-dev~radda8281)\"") +SET(CPACK_NSIS_DISPLAY_NAME "Colobot") +SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") +SET(CPACK_NSIS_INSTALLER_ICON_CODE "!define MUI_HEADERIMAGE_BITMAP \"C:/Users/Fiftytwo/Repos/colobot/desktop/colobot_nsis.bmp\" + !define MUI_WELCOMEFINISHPAGE_BITMAP \"C:/Users/Fiftytwo/Repos/colobot/desktop/colobot_nsis_left.bmp\"") +SET(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") +SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "colobot.exe") +SET(CPACK_NSIS_MUI_ICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico") +SET(CPACK_NSIS_MUI_UNIICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico") +SET(CPACK_NSIS_PACKAGE_NAME "Colobot") +SET(CPACK_OUTPUT_CONFIG_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackConfig.cmake") +SET(CPACK_PACKAGE_DEFAULT_LOCATION "/") +SET(CPACK_PACKAGE_DESCRIPTION_FILE "C:/Users/Fiftytwo/Repos/colobot/desktop/../README.md") +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Colobot: Gold Edition") +SET(CPACK_PACKAGE_EXECUTABLES "colobot;Colobot: Gold Edition") +SET(CPACK_PACKAGE_FILE_NAME "colobot-0.1.11-Source") +SET(CPACK_PACKAGE_ICON "") +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Colobot") +SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "Colobot") +SET(CPACK_PACKAGE_NAME "colobot") +SET(CPACK_PACKAGE_RELOCATABLE "true") +SET(CPACK_PACKAGE_VENDOR "TerranovaTeam") +SET(CPACK_PACKAGE_VERSION "0.1.11") +SET(CPACK_PACKAGE_VERSION_MAJOR "0") +SET(CPACK_PACKAGE_VERSION_MINOR "1") +SET(CPACK_PACKAGE_VERSION_PATCH "11") +SET(CPACK_RESOURCE_FILE_LICENSE "C:/Users/Fiftytwo/Repos/colobot/desktop/../LICENSE.txt") +SET(CPACK_RESOURCE_FILE_README "C:/msys64/mingw64/share/cmake-3.9/Templates/CPack.GenericDescription.txt") +SET(CPACK_RESOURCE_FILE_WELCOME "C:/msys64/mingw64/share/cmake-3.9/Templates/CPack.GenericWelcome.txt") +SET(CPACK_RPM_PACKAGE_SOURCES "ON") +SET(CPACK_SET_DESTDIR "OFF") +SET(CPACK_SOURCE_7Z "ON") +SET(CPACK_SOURCE_CYGWIN "") +SET(CPACK_SOURCE_GENERATOR "7Z;ZIP") +SET(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +SET(CPACK_SOURCE_INSTALLED_DIRECTORIES "C:/Users/Fiftytwo/Repos/colobot;/") +SET(CPACK_SOURCE_OUTPUT_CONFIG_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackSourceConfig.cmake") +SET(CPACK_SOURCE_PACKAGE_FILE_NAME "colobot-0.1.11-Source") +SET(CPACK_SOURCE_RPM "") +SET(CPACK_SOURCE_TBZ2 "") +SET(CPACK_SOURCE_TGZ "") +SET(CPACK_SOURCE_TOPLEVEL_TAG "win64-Source") +SET(CPACK_SOURCE_TXZ "") +SET(CPACK_SOURCE_TZ "") +SET(CPACK_SOURCE_ZIP "ON") +SET(CPACK_STRIP_FILES "") +SET(CPACK_SYSTEM_NAME "win64") +SET(CPACK_TOPLEVEL_TAG "win64-Source") +SET(CPACK_WIX_SIZEOF_VOID_P "8") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/src/common/restext.cpp b/src/common/restext.cpp index ac526af8..760e74c8 100644 --- a/src/common/restext.cpp +++ b/src/common/restext.cpp @@ -517,6 +517,10 @@ void InitializeRestext() stringsObject[OBJECT_MOBILEta] = TR("Tracked grabber"); stringsObject[OBJECT_MOBILEwa] = TR("Wheeled grabber"); stringsObject[OBJECT_MOBILEia] = TR("Legged grabber"); + stringsObject[OBJECT_MOBILEfb] = TR("Winged builder"); + stringsObject[OBJECT_MOBILEtb] = TR("Tracked builder"); + stringsObject[OBJECT_MOBILEwb] = TR("Wheeled builder"); + stringsObject[OBJECT_MOBILEib] = TR("Legged builder"); stringsObject[OBJECT_MOBILEfc] = TR("Winged shooter"); stringsObject[OBJECT_MOBILEtc] = TR("Tracked shooter"); stringsObject[OBJECT_MOBILEwc] = TR("Wheeled shooter"); diff --git a/src/desktop/colobot.rc b/src/desktop/colobot.rc new file mode 100644 index 00000000..5187a5af --- /dev/null +++ b/src/desktop/colobot.rc @@ -0,0 +1,25 @@ +id ICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico" + +1 VERSIONINFO +FILEVERSION 0,1,11,0 +PRODUCTVERSION 0,1,11,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "OriginalFilename", "colobot.exe\0" + VALUE "InternalName", "colobot\0" + VALUE "FileDescription", "Colobot: Gold Edition - Colonize with Bots\0" + VALUE "ProductName", "Colobot: Gold Edition\0" + VALUE "CompanyName", "TerranovaTeam\0" + VALUE "LegalCopyright", "Copyright (c) 2012-2014 TerranovaTeam\0" + VALUE "FileVersion", "0.1.11+alpha-git-dev~radda8281\0" + VALUE "ProductVersion", "0.1.11+alpha-git-dev~radda8281\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/src/graphics/engine/pyro.cpp b/src/graphics/engine/pyro.cpp index 5bc9f76d..5a0b9e2c 100644 --- a/src/graphics/engine/pyro.cpp +++ b/src/graphics/engine/pyro.cpp @@ -1260,6 +1260,10 @@ void CPyro::DisplayError(PyroType type, CObject* obj) oType == OBJECT_MOBILEta || oType == OBJECT_MOBILEfa || oType == OBJECT_MOBILEia || + oType == OBJECT_MOBILEwb || + oType == OBJECT_MOBILEtb || + oType == OBJECT_MOBILEfb || + oType == OBJECT_MOBILEib || oType == OBJECT_MOBILEwc || oType == OBJECT_MOBILEtc || oType == OBJECT_MOBILEfc || @@ -1717,6 +1721,7 @@ void CPyro::BurnStart() angle.z = (Math::Rand()-0.5f)*0.4f; } else if ( m_burnType == OBJECT_MOBILEwa || + m_burnType == OBJECT_MOBILEwb || m_burnType == OBJECT_MOBILEwc || m_burnType == OBJECT_MOBILEwi || m_burnType == OBJECT_MOBILEws || @@ -1920,6 +1925,20 @@ void CPyro::BurnStart() angle.z = -25.0f*Math::PI/180.0f; BurnAddPart(1, pos, angle); // down the insect-cannon } + + if ( m_burnType == OBJECT_MOBILEfb || + m_burnType == OBJECT_MOBILEtb || + m_burnType == OBJECT_MOBILEwb || + m_burnType == OBJECT_MOBILEib ) + { + pos.x = -1.5f; + pos.y = -5.0f; + pos.z = 0.0f; + angle.x = (Math::Rand()-0.5f)*0.2f; + angle.y = (Math::Rand()-0.5f)*0.2f; + angle.z = -25.0f*Math::PI/180.0f; + BurnAddPart(1, pos, angle); // down the neutron gun + } if ( m_burnType == OBJECT_MOBILErt || m_burnType == OBJECT_MOBILErc ) @@ -2007,6 +2026,7 @@ void CPyro::BurnStart() } if ( m_burnType == OBJECT_MOBILEwa || + m_burnType == OBJECT_MOBILEwb || m_burnType == OBJECT_MOBILEwc || m_burnType == OBJECT_MOBILEwi || m_burnType == OBJECT_MOBILEws || @@ -2029,6 +2049,7 @@ void CPyro::BurnStart() } if ( m_burnType == OBJECT_MOBILEta || + m_burnType == OBJECT_MOBILEtb || m_burnType == OBJECT_MOBILEtc || m_burnType == OBJECT_MOBILEti || m_burnType == OBJECT_MOBILEts || @@ -2057,6 +2078,7 @@ void CPyro::BurnStart() } if ( m_burnType == OBJECT_MOBILEfa || + m_burnType == OBJECT_MOBILEfb || m_burnType == OBJECT_MOBILEfc || m_burnType == OBJECT_MOBILEfi || m_burnType == OBJECT_MOBILEfs || @@ -2077,6 +2099,7 @@ void CPyro::BurnStart() } if ( m_burnType == OBJECT_MOBILEia || + m_burnType == OBJECT_MOBILEib || m_burnType == OBJECT_MOBILEic || m_burnType == OBJECT_MOBILEii || m_burnType == OBJECT_MOBILEis ) // legs? diff --git a/src/graphics/engine/water.cpp b/src/graphics/engine/water.cpp index 5adebb90..55f7465d 100644 --- a/src/graphics/engine/water.cpp +++ b/src/graphics/engine/water.cpp @@ -566,6 +566,10 @@ float CWater::GetLevel(CObject* object) type == OBJECT_MOBILEta || type == OBJECT_MOBILEwa || type == OBJECT_MOBILEia || + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEwc || diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp index 37773efa..8ddb22e9 100644 --- a/src/level/parser/parserparam.cpp +++ b/src/level/parser/parserparam.cpp @@ -355,6 +355,10 @@ ObjectType CLevelParserParam::ToObjectType(std::string value) if (value == "TrackedSniffer" ) return OBJECT_MOBILEts; if (value == "WheeledSniffer" ) return OBJECT_MOBILEws; if (value == "LeggedSniffer" ) return OBJECT_MOBILEis; + if (value == "WingedBuilder" ) return OBJECT_MOBILEfb; + if (value == "TrackedBuilder" ) return OBJECT_MOBILEtb; + if (value == "WheeledBuilder" ) return OBJECT_MOBILEwb; + if (value == "LeggedBuilder" ) return OBJECT_MOBILEib; if (value == "Thumper" ) return OBJECT_MOBILErt; if (value == "PhazerShooter" ) return OBJECT_MOBILErc; if (value == "Recycler" ) return OBJECT_MOBILErr; @@ -556,6 +560,10 @@ const std::string CLevelParserParam::FromObjectType(ObjectType value) if (value == OBJECT_MOBILEts ) return "TrackedSniffer"; if (value == OBJECT_MOBILEws ) return "WheeledSniffer"; if (value == OBJECT_MOBILEis ) return "LeggedSniffer"; + if (value == OBJECT_MOBILEfb ) return "WingedBuilder"; + if (value == OBJECT_MOBILEtb ) return "TrackedBuilder"; + if (value == OBJECT_MOBILEwb ) return "WheeledBuilder"; + if (value == OBJECT_MOBILEib ) return "LeggedBuilder"; if (value == OBJECT_MOBILErt ) return "Thumper"; if (value == OBJECT_MOBILErc ) return "PhazerShooter"; if (value == OBJECT_MOBILErr ) return "Recycler"; diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index 3df62fe5..f2d849f6 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -1814,6 +1814,10 @@ void CRobotMain::SelectOneObject(CObject* obj, bool displayError) type == OBJECT_MOBILEta || type == OBJECT_MOBILEwa || type == OBJECT_MOBILEia || + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEwc || @@ -2195,6 +2199,10 @@ void CRobotMain::ChangeCamera() oType != OBJECT_MOBILEta && oType != OBJECT_MOBILEwa && oType != OBJECT_MOBILEia && + oType != OBJECT_MOBILEfb && + oType != OBJECT_MOBILEtb && + oType != OBJECT_MOBILEwb && + oType != OBJECT_MOBILEib && oType != OBJECT_MOBILEfc && oType != OBJECT_MOBILEtc && oType != OBJECT_MOBILEwc && diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp index 45fd357c..5e998352 100644 --- a/src/object/auto/autofactory.cpp +++ b/src/object/auto/autofactory.cpp @@ -587,6 +587,10 @@ bool CAutoFactory::NearestVehicle() type != OBJECT_MOBILEta && type != OBJECT_MOBILEwa && type != OBJECT_MOBILEia && + type != OBJECT_MOBILEfb && + type != OBJECT_MOBILEtb && + type != OBJECT_MOBILEwb && + type != OBJECT_MOBILEib && type != OBJECT_MOBILEfc && type != OBJECT_MOBILEtc && type != OBJECT_MOBILEwc && diff --git a/src/object/auto/automush.cpp b/src/object/auto/automush.cpp index 679e0f73..a267322b 100644 --- a/src/object/auto/automush.cpp +++ b/src/object/auto/automush.cpp @@ -236,6 +236,10 @@ bool CAutoMush::SearchTarget() type != OBJECT_MOBILEta && type != OBJECT_MOBILEwa && type != OBJECT_MOBILEia && + type != OBJECT_MOBILEfb && + type != OBJECT_MOBILEtb && + type != OBJECT_MOBILEwb && + type != OBJECT_MOBILEib && type != OBJECT_MOBILEfc && type != OBJECT_MOBILEtc && type != OBJECT_MOBILEwc && diff --git a/src/object/auto/autonuclearplant.cpp b/src/object/auto/autonuclearplant.cpp index 947ac05b..7601b6cb 100644 --- a/src/object/auto/autonuclearplant.cpp +++ b/src/object/auto/autonuclearplant.cpp @@ -345,6 +345,10 @@ bool CAutoNuclearPlant::SearchVehicle() type != OBJECT_MOBILEta && type != OBJECT_MOBILEwa && type != OBJECT_MOBILEia && + type != OBJECT_MOBILEfb && + type != OBJECT_MOBILEtb && + type != OBJECT_MOBILEwb && + type != OBJECT_MOBILEib && type != OBJECT_MOBILEfc && type != OBJECT_MOBILEtc && type != OBJECT_MOBILEwc && diff --git a/src/object/auto/autopowerplant.cpp b/src/object/auto/autopowerplant.cpp index 2729c4fe..50504db1 100644 --- a/src/object/auto/autopowerplant.cpp +++ b/src/object/auto/autopowerplant.cpp @@ -408,6 +408,10 @@ bool CAutoPowerPlant::SearchVehicle() type != OBJECT_MOBILEta && type != OBJECT_MOBILEwa && type != OBJECT_MOBILEia && + type != OBJECT_MOBILEfb && + type != OBJECT_MOBILEtb && + type != OBJECT_MOBILEwb && + type != OBJECT_MOBILEib && type != OBJECT_MOBILEfc && type != OBJECT_MOBILEtc && type != OBJECT_MOBILEwc && diff --git a/src/object/auto/autopowerstation.cpp b/src/object/auto/autopowerstation.cpp index 17479906..3b245d7e 100644 --- a/src/object/auto/autopowerstation.cpp +++ b/src/object/auto/autopowerstation.cpp @@ -253,6 +253,10 @@ CObject* CAutoPowerStation::SearchVehicle() type != OBJECT_MOBILEta && type != OBJECT_MOBILEwa && type != OBJECT_MOBILEia && + type != OBJECT_MOBILEfb && + type != OBJECT_MOBILEtb && + type != OBJECT_MOBILEwb && + type != OBJECT_MOBILEib && type != OBJECT_MOBILEfc && type != OBJECT_MOBILEtc && type != OBJECT_MOBILEwc && diff --git a/src/object/drive_type.cpp b/src/object/drive_type.cpp index fafbddad..412e37bc 100644 --- a/src/object/drive_type.cpp +++ b/src/object/drive_type.cpp @@ -28,6 +28,7 @@ DriveType GetDriveFromObject(ObjectType type) case OBJECT_MOBILEwc: case OBJECT_MOBILEwi: case OBJECT_MOBILEws: + case OBJECT_MOBILEwb: return DriveType::Wheeled; case OBJECT_MOBILEtt: @@ -35,6 +36,7 @@ DriveType GetDriveFromObject(ObjectType type) case OBJECT_MOBILEtc: case OBJECT_MOBILEti: case OBJECT_MOBILEts: + case OBJECT_MOBILEtb: return DriveType::Tracked; case OBJECT_MOBILEft: @@ -42,6 +44,7 @@ DriveType GetDriveFromObject(ObjectType type) case OBJECT_MOBILEfc: case OBJECT_MOBILEfi: case OBJECT_MOBILEfs: + case OBJECT_MOBILEfb: return DriveType::Winged; case OBJECT_MOBILEit: @@ -49,6 +52,7 @@ DriveType GetDriveFromObject(ObjectType type) case OBJECT_MOBILEic: case OBJECT_MOBILEii: case OBJECT_MOBILEis: + case OBJECT_MOBILEib: return DriveType::Legged; case OBJECT_MOBILErt: diff --git a/src/object/motion/motiontoto.cpp b/src/object/motion/motiontoto.cpp index c0a2296a..8c22c2ea 100644 --- a/src/object/motion/motiontoto.cpp +++ b/src/object/motion/motiontoto.cpp @@ -335,6 +335,10 @@ bool CMotionToto::EventFrame(const Event &event) type == OBJECT_MOBILEta || type == OBJECT_MOBILEfa || type == OBJECT_MOBILEia || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEwc || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEfc || diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index 14d46dcd..a9cfa402 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -101,6 +101,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectRank(0, rank); if (type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEfi || type == OBJECT_MOBILEfs) @@ -108,6 +109,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, modelManager->AddModelReference("lem1f.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts) @@ -115,6 +117,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, modelManager->AddModelReference("lem1t.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEwb || type == OBJECT_MOBILEwc || type == OBJECT_MOBILEwi || type == OBJECT_MOBILEws) @@ -129,6 +132,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, } } else if (type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || type == OBJECT_MOBILEis) @@ -331,8 +335,25 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetPartPosition(2, Math::Vector(0.0f, 2.5f, 0.0f)); m_object->SetPartRotationZ(2, 0.0f); } + + if (type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib) + { + // Creates the neutron gun. + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(1, rank); + m_object->SetObjectParent(1, 0); + modelManager->AddModelReference("neutron.mod", false, rank, m_object->GetTeam()); +//? m_object->SetPartPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); + m_object->SetPartPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); + m_object->SetPartRotationZ(1, 0.0f); + } if (type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEwb || type == OBJECT_MOBILEwc || type == OBJECT_MOBILEws || type == OBJECT_MOBILEwi || @@ -411,6 +432,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, } if (type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts) // caterpillars? @@ -493,6 +515,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, } if (type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEfs || type == OBJECT_MOBILEfi || @@ -526,6 +549,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, } if (type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEis || type == OBJECT_MOBILEii) // insect legs? @@ -867,6 +891,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->CreateShadowCircle(6.0f, 1.0f); } else if (type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts || @@ -888,6 +913,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, } if (type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEfi || type == OBJECT_MOBILEfs || @@ -948,6 +974,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) character = m_object->GetCharacter(); if ( type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEwb || type == OBJECT_MOBILEwc || type == OBJECT_MOBILEwi || type == OBJECT_MOBILEws || @@ -1004,6 +1031,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) } if ( type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts ) // caterpillars? @@ -1033,6 +1061,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) } if ( type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || type == OBJECT_MOBILEis ) // legs? @@ -1063,6 +1092,7 @@ void CMotionVehicle::CreatePhysics(ObjectType type) } if ( type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEfi || type == OBJECT_MOBILEfs || @@ -1240,6 +1270,7 @@ bool CMotionVehicle::EventFrame(const Event &event) type = m_object->GetType(); if ( type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEwb || type == OBJECT_MOBILEwc || type == OBJECT_MOBILEwi || type == OBJECT_MOBILEws || @@ -1406,6 +1437,7 @@ bool CMotionVehicle::EventFrame(const Event &event) } if ( type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts || @@ -1524,6 +1556,7 @@ bool CMotionVehicle::EventFrame(const Event &event) } if ( type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEfi || type == OBJECT_MOBILEfs || @@ -1533,6 +1566,7 @@ bool CMotionVehicle::EventFrame(const Event &event) } if ( type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || type == OBJECT_MOBILEis ) // legs? diff --git a/src/object/object_factory.cpp b/src/object/object_factory.cpp index 0b16e171..539256be 100644 --- a/src/object/object_factory.cpp +++ b/src/object/object_factory.cpp @@ -284,6 +284,10 @@ CObjectUPtr CObjectFactory::CreateObject(const ObjectCreateParams& params) case OBJECT_MOBILEta: case OBJECT_MOBILEwa: case OBJECT_MOBILEia: + case OBJECT_MOBILEfb: + case OBJECT_MOBILEtb: + case OBJECT_MOBILEwb: + case OBJECT_MOBILEib: case OBJECT_MOBILEfc: case OBJECT_MOBILEtc: case OBJECT_MOBILEwc: diff --git a/src/object/object_type.h b/src/object/object_type.h index 88c9587c..6d1b7039 100644 --- a/src/object/object_type.h +++ b/src/object/object_type.h @@ -129,6 +129,10 @@ enum ObjectType OBJECT_MOBILEtg = 211, //!< TargetBot OBJECT_MOBILEdr = 212, //!< Scribbler OBJECT_CONTROLLER = 213, //!< MissionController + OBJECT_MOBILEwb = 220, //!< WheeledBuilder + OBJECT_MOBILEtb = 221, //!< TrackedBuilder + OBJECT_MOBILEfb = 222, //!< WingedBuilder + OBJECT_MOBILEib = 223, //!< LeggedBuilder OBJECT_WAYPOINT = 250, //!< WayPoint OBJECT_FLAGb = 260, //!< BlueFlag OBJECT_FLAGr = 261, //!< RedFlag diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index beaa7c3d..c2578199 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -678,6 +678,7 @@ void COldObject::SetType(ObjectType type) // TODO: Temporary hack if ( m_type == OBJECT_MOBILEfa || // WingedGrabber + m_type == OBJECT_MOBILEfb || // WingedBuilder m_type == OBJECT_MOBILEfs || // WingedSniffer m_type == OBJECT_MOBILEfc || // WingedShooter m_type == OBJECT_MOBILEfi || // WingedOrgaShooter @@ -705,6 +706,10 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEta || m_type == OBJECT_MOBILEwa || m_type == OBJECT_MOBILEia || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEib || m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEwc || @@ -767,6 +772,10 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEta || m_type == OBJECT_MOBILEwa || m_type == OBJECT_MOBILEia || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEib || m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEwc || @@ -856,6 +865,10 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEta || m_type == OBJECT_MOBILEwa || m_type == OBJECT_MOBILEia || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEib || m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEwc || @@ -2832,6 +2845,10 @@ void COldObject::CreateSelectParticle() m_type == OBJECT_MOBILEta || m_type == OBJECT_MOBILEwa || m_type == OBJECT_MOBILEia || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEib || m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEwc || @@ -2930,6 +2947,7 @@ void COldObject::UpdateSelectParticle() // Red back lens if ( m_type == OBJECT_MOBILEfa || + m_type == OBJECT_MOBILEfb || m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEfi || m_type == OBJECT_MOBILEfs || @@ -2941,6 +2959,7 @@ void COldObject::UpdateSelectParticle() dim[3].x = 0.6f; } if ( m_type == OBJECT_MOBILEwa || + m_type == OBJECT_MOBILEwb || m_type == OBJECT_MOBILEwc || m_type == OBJECT_MOBILEwi || m_type == OBJECT_MOBILEws ) // wheels? @@ -2954,6 +2973,7 @@ void COldObject::UpdateSelectParticle() pos[3] = Math::Vector(-4.0f, 2.5f, -2.2f); } if ( m_type == OBJECT_MOBILEia || + m_type == OBJECT_MOBILEib || m_type == OBJECT_MOBILEic || m_type == OBJECT_MOBILEii || m_type == OBJECT_MOBILEis || @@ -2963,6 +2983,7 @@ void COldObject::UpdateSelectParticle() pos[3] = Math::Vector(-4.5f, 2.7f, -2.8f); } if ( m_type == OBJECT_MOBILEta || + m_type == OBJECT_MOBILEtb || m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEti || m_type == OBJECT_MOBILEts || @@ -3198,6 +3219,10 @@ float COldObject::GetLightningHitProbability() m_type == OBJECT_MOBILEta || m_type == OBJECT_MOBILEwa || m_type == OBJECT_MOBILEia || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEib || m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEwc || diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index 3d39b20d..5104acfe 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -321,10 +321,10 @@ bool CTaskBuild::EventProcess(const Event &event) mat = m_object->GetWorldMatrix(14); break; - case OBJECT_MOBILEfa: - case OBJECT_MOBILEta: - case OBJECT_MOBILEwa: - case OBJECT_MOBILEia: + case OBJECT_MOBILEfb: + case OBJECT_MOBILEtb: + case OBJECT_MOBILEwb: + case OBJECT_MOBILEib: mat = m_object->GetWorldMatrix(3); break; diff --git a/src/object/task/taskgoto.cpp b/src/object/task/taskgoto.cpp index 6584465e..6a6b3afa 100644 --- a/src/object/task/taskgoto.cpp +++ b/src/object/task/taskgoto.cpp @@ -556,6 +556,10 @@ CObject* CTaskGoto::WormSearch(Math::Vector &impact) oType != OBJECT_MOBILEta && oType != OBJECT_MOBILEwa && oType != OBJECT_MOBILEia && + oType != OBJECT_MOBILEfb && + oType != OBJECT_MOBILEtb && + oType != OBJECT_MOBILEwb && + oType != OBJECT_MOBILEib && oType != OBJECT_MOBILEfc && oType != OBJECT_MOBILEtc && oType != OBJECT_MOBILEwc && @@ -1164,6 +1168,10 @@ bool CTaskGoto::AdjustTarget(CObject* pObj, Math::Vector &pos, float &distance) type == OBJECT_MOBILEta || type == OBJECT_MOBILEwa || type == OBJECT_MOBILEia || + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEfs || type == OBJECT_MOBILEts || type == OBJECT_MOBILEws || @@ -1432,6 +1440,7 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir) fac = 2.0f; if ( iType == OBJECT_MOBILEwa || + iType == OBJECT_MOBILEwb || iType == OBJECT_MOBILEwc || iType == OBJECT_MOBILEwi || iType == OBJECT_MOBILEws || @@ -1441,6 +1450,7 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir) fac = 1.5f; } if ( iType == OBJECT_MOBILEta || + iType == OBJECT_MOBILEtb || iType == OBJECT_MOBILEtc || iType == OBJECT_MOBILEti || iType == OBJECT_MOBILEts || @@ -1451,6 +1461,7 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir) fac = 1.5f; } if ( iType == OBJECT_MOBILEfa || + iType == OBJECT_MOBILEfb || iType == OBJECT_MOBILEfc || iType == OBJECT_MOBILEfi || iType == OBJECT_MOBILEfs || @@ -1468,6 +1479,7 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir) } } if ( iType == OBJECT_MOBILEia || + iType == OBJECT_MOBILEib || iType == OBJECT_MOBILEic || iType == OBJECT_MOBILEii || iType == OBJECT_MOBILEis || @@ -1962,6 +1974,7 @@ void CTaskGoto::BitmapTerrain(int minx, int miny, int maxx, int maxy) type = m_object->GetType(); if ( type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEwb || type == OBJECT_MOBILEwc || type == OBJECT_MOBILEws || type == OBJECT_MOBILEwi || @@ -1972,6 +1985,7 @@ void CTaskGoto::BitmapTerrain(int minx, int miny, int maxx, int maxy) } if ( type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts ) // caterpillars? @@ -1999,6 +2013,7 @@ void CTaskGoto::BitmapTerrain(int minx, int miny, int maxx, int maxy) } if ( type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEfs || type == OBJECT_MOBILEfi || @@ -2009,6 +2024,7 @@ void CTaskGoto::BitmapTerrain(int minx, int miny, int maxx, int maxy) } if ( type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEis || type == OBJECT_MOBILEii ) // insect legs? diff --git a/src/object/task/tasktake.cpp b/src/object/task/tasktake.cpp index e6632b23..728b3519 100644 --- a/src/object/task/tasktake.cpp +++ b/src/object/task/tasktake.cpp @@ -354,6 +354,10 @@ CObject* CTaskTake::SearchFriendObject(float &angle, type != OBJECT_MOBILEta && type != OBJECT_MOBILEwa && type != OBJECT_MOBILEia && + type != OBJECT_MOBILEfb && + type != OBJECT_MOBILEtb && + type != OBJECT_MOBILEwb && + type != OBJECT_MOBILEib && type != OBJECT_MOBILEfc && type != OBJECT_MOBILEtc && type != OBJECT_MOBILEwc && diff --git a/src/object/tool_type.cpp b/src/object/tool_type.cpp index 33bc3e0b..99b875a7 100644 --- a/src/object/tool_type.cpp +++ b/src/object/tool_type.cpp @@ -46,6 +46,12 @@ ToolType GetToolFromObject(ObjectType type) case OBJECT_MOBILEfi: case OBJECT_MOBILEii: return ToolType::OrganicShooter; + + case OBJECT_MOBILEwb: + case OBJECT_MOBILEtb: + case OBJECT_MOBILEfb: + case OBJECT_MOBILEib: + return ToolType::Builder; default: return ToolType::Other; diff --git a/src/object/tool_type.h b/src/object/tool_type.h index a480679c..23ce08e2 100644 --- a/src/object/tool_type.h +++ b/src/object/tool_type.h @@ -28,6 +28,7 @@ enum class ToolType : unsigned int Sniffer, Shooter, OrganicShooter, + Builder, }; ToolType GetToolFromObject(ObjectType type); diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index 1e801d11..65293510 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -988,6 +988,7 @@ void CPhysics::MotorUpdate(float aTime, float rTime) { factor = 1.0f; if ( type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEis || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii ) factor = 0.5f; @@ -1148,6 +1149,7 @@ void CPhysics::EffectUpdate(float aTime, float rTime) } if ( type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEwb || type == OBJECT_MOBILEwc || type == OBJECT_MOBILEwi || type == OBJECT_MOBILEws || @@ -1193,6 +1195,7 @@ void CPhysics::EffectUpdate(float aTime, float rTime) } if ( type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEfi || type == OBJECT_MOBILEfs || @@ -1800,6 +1803,10 @@ void CPhysics::WaterFrame(float aTime, float rTime) type == OBJECT_MOBILEta || type == OBJECT_MOBILEwa || type == OBJECT_MOBILEia || + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEwc || @@ -1838,6 +1845,7 @@ void CPhysics::SoundMotorFull(float rTime, ObjectType type) float amplitude, time, freq; if ( type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || type == OBJECT_MOBILEis ) @@ -1953,6 +1961,7 @@ void CPhysics::SoundMotorSlow(float rTime, ObjectType type) int i, max; if ( type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || type == OBJECT_MOBILEis ) @@ -1980,6 +1989,7 @@ void CPhysics::SoundMotorSlow(float rTime, ObjectType type) amplitude = 0.9f; } else if ( type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts ) @@ -2074,6 +2084,7 @@ void CPhysics::SoundMotorSlow(float rTime, ObjectType type) void CPhysics::SoundMotorStop(float rTime, ObjectType type) { if ( type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || type == OBJECT_MOBILEis ) @@ -2736,6 +2747,10 @@ bool CPhysics::ExploOther(ObjectType iType, oType == OBJECT_MOBILEta || oType == OBJECT_MOBILEfa || oType == OBJECT_MOBILEia || + oType == OBJECT_MOBILEwb || + oType == OBJECT_MOBILEtb || + oType == OBJECT_MOBILEfb || + oType == OBJECT_MOBILEib || oType == OBJECT_MOBILEwc || oType == OBJECT_MOBILEtc || oType == OBJECT_MOBILEfc || @@ -2797,6 +2812,10 @@ int CPhysics::ExploHimself(ObjectType iType, ObjectType oType, float force) iType == OBJECT_MOBILEta || iType == OBJECT_MOBILEfa || iType == OBJECT_MOBILEia || + iType == OBJECT_MOBILEwb || + iType == OBJECT_MOBILEtb || + iType == OBJECT_MOBILEfb || + iType == OBJECT_MOBILEib || iType == OBJECT_MOBILEwc || iType == OBJECT_MOBILEtc || iType == OBJECT_MOBILEfc || @@ -3019,6 +3038,7 @@ void CPhysics::MotorParticle(float aTime, float rTime) type = m_object->GetType(); if ( type == OBJECT_MOBILEia || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || type == OBJECT_MOBILEis || // legs? @@ -3124,6 +3144,7 @@ void CPhysics::MotorParticle(float aTime, float rTime) } if ( type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts ) // caterpillars? diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index 4dd5c8ec..bb4066fc 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -99,6 +99,10 @@ const char* GetObjectName(ObjectType type) if ( type == OBJECT_MOBILEts ) return "TrackedSniffer"; if ( type == OBJECT_MOBILEfs ) return "WingedSniffer"; if ( type == OBJECT_MOBILEis ) return "LeggedSniffer"; + if ( type == OBJECT_MOBILEwb ) return "WheeledBuilder"; + if ( type == OBJECT_MOBILEtb ) return "TrackedBuilder"; + if ( type == OBJECT_MOBILEfb ) return "WingedBuilder"; + if ( type == OBJECT_MOBILEib ) return "LeggedBuilder"; if ( type == OBJECT_MOBILErt ) return "Thumper"; if ( type == OBJECT_MOBILErc ) return "PhazerShooter"; if ( type == OBJECT_MOBILErr ) return "Recycler"; diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index 8a774907..c673d8b4 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -1291,10 +1291,10 @@ bool CScriptFunctions::rBuild(CBotVar* var, CBotVar* result, int& exception, voi oType = pThis->GetType(); - if ( oType != OBJECT_MOBILEfa && // allowed only for grabber bots && humans - oType != OBJECT_MOBILEta && - oType != OBJECT_MOBILEwa && - oType != OBJECT_MOBILEia && + if ( oType != OBJECT_MOBILEfb && // allowed only for builder bots && humans + oType != OBJECT_MOBILEtb && + oType != OBJECT_MOBILEwb && + oType != OBJECT_MOBILEib && oType != OBJECT_HUMAN && oType != OBJECT_TECH ) { diff --git a/src/src/common/config.h b/src/src/common/config.h new file mode 100644 index 00000000..196d9900 --- /dev/null +++ b/src/src/common/config.h @@ -0,0 +1,22 @@ +#pragma once + +// Macros set by CMake +#define PLATFORM_WINDOWS 1 +/* #undef PLATFORM_LINUX */ +/* #undef PLATFORM_GNU */ +/* #undef PLATFORM_MACOSX */ +/* #undef PLATFORM_OTHER */ + +#ifdef PLATFORM_MACOSX +// Assume we have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework +#define HAVE_CFLOCALECOPYCURRENT 1 +#endif + +/* #undef GLEW_STATIC */ + +#define OPENAL_SOUND + +/* #undef PORTABLE */ + +#define COLOBOT_DEFAULT_DATADIR "C:/Program Files (x86)/colobot/data" +#define COLOBOT_I18N_DIR "C:/Program Files (x86)/colobot/lang" diff --git a/src/src/common/version.h b/src/src/common/version.h new file mode 100644 index 00000000..61cea590 --- /dev/null +++ b/src/src/common/version.h @@ -0,0 +1,7 @@ +#pragma once + +#define COLOBOT_FULLNAME "Colobot: Gold Edition 0.1.11+alpha-git-dev~radda8281" +#define COLOBOT_VERSION_DISPLAY "git-dev~radda8281" + +#define BUILD_NUMBER 0 +/* #undef OFFICIAL_BUILD */ diff --git a/src/ui/controls/map.cpp b/src/ui/controls/map.cpp index b22453c5..1376f189 100644 --- a/src/ui/controls/map.cpp +++ b/src/ui/controls/map.cpp @@ -854,6 +854,10 @@ void CMap::DrawObjectIcon(Math::Point pos, Math::Point dim, MapColor color, if ( type == OBJECT_MOBILEta ) icon = 10; if ( type == OBJECT_MOBILEwa ) icon = 9; if ( type == OBJECT_MOBILEia ) icon = 22; + if ( type == OBJECT_MOBILEfb ) icon = 32; //placeholder icon + if ( type == OBJECT_MOBILEtb ) icon = 32; + if ( type == OBJECT_MOBILEwb ) icon = 32; + if ( type == OBJECT_MOBILEib ) icon = 32; if ( type == OBJECT_MOBILEfc ) icon = 17; if ( type == OBJECT_MOBILEtc ) icon = 16; if ( type == OBJECT_MOBILEwc ) icon = 15; @@ -1231,6 +1235,10 @@ void CMap::UpdateObject(CObject* pObj) type == OBJECT_MOBILEta || type == OBJECT_MOBILEfa || type == OBJECT_MOBILEia || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEwc || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEfc || diff --git a/src/ui/mainshort.cpp b/src/ui/mainshort.cpp index 23b58ee9..ce077c8c 100644 --- a/src/ui/mainshort.cpp +++ b/src/ui/mainshort.cpp @@ -207,6 +207,10 @@ int CMainShort::GetShortcutIcon(ObjectType type) if ( type == OBJECT_MOBILEta ) icon = 10; if ( type == OBJECT_MOBILEwa ) icon = 9; if ( type == OBJECT_MOBILEia ) icon = 22; + if ( type == OBJECT_MOBILEfb ) icon = 32; + if ( type == OBJECT_MOBILEtb ) icon = 32; + if ( type == OBJECT_MOBILEwb ) icon = 32; + if ( type == OBJECT_MOBILEib ) icon = 32; if ( type == OBJECT_MOBILEfc ) icon = 17; if ( type == OBJECT_MOBILEtc ) icon = 16; if ( type == OBJECT_MOBILEwc ) icon = 15; diff --git a/src/ui/object_interface.cpp b/src/ui/object_interface.cpp index c819540a..bd2a5be9 100644 --- a/src/ui/object_interface.cpp +++ b/src/ui/object_interface.cpp @@ -841,6 +841,10 @@ bool CObjectInterface::CreateInterface(bool bSelect) type == OBJECT_MOBILEta || type == OBJECT_MOBILEwa || type == OBJECT_MOBILEia || + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEwc || @@ -1755,6 +1759,10 @@ void CObjectInterface::UpdateInterface() type == OBJECT_MOBILEta || type == OBJECT_MOBILEwa || type == OBJECT_MOBILEia || + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEwc || From b04d8ca99d16669ee71655a0145e6fcdcbb9867e Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 16 Nov 2017 20:32:10 +0100 Subject: [PATCH 02/44] Clean up redundant files --- src/CPackConfig.cmake | 93 --------------------------------- src/CPackSourceConfig.cmake | 100 ------------------------------------ src/desktop/colobot.rc | 25 --------- src/src/common/config.h | 22 -------- src/src/common/version.h | 7 --- 5 files changed, 247 deletions(-) delete mode 100644 src/CPackConfig.cmake delete mode 100644 src/CPackSourceConfig.cmake delete mode 100644 src/desktop/colobot.rc delete mode 100644 src/src/common/config.h delete mode 100644 src/src/common/version.h diff --git a/src/CPackConfig.cmake b/src/CPackConfig.cmake deleted file mode 100644 index fbcd118a..00000000 --- a/src/CPackConfig.cmake +++ /dev/null @@ -1,93 +0,0 @@ -# This file will be configured to contain variables for CPack. These variables -# should be set in the CMake list file of the project before CPack module is -# included. The list of available CPACK_xxx variables and their associated -# documentation may be obtained using -# cpack --help-variable-list -# -# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) -# and some are specific to a generator -# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables -# usually begin with CPACK__xxxx. - - -SET(CPACK_BINARY_7Z "OFF") -SET(CPACK_BINARY_BUNDLE "") -SET(CPACK_BINARY_CYGWIN "") -SET(CPACK_BINARY_DEB "") -SET(CPACK_BINARY_DRAGNDROP "") -SET(CPACK_BINARY_IFW "OFF") -SET(CPACK_BINARY_NSIS "ON") -SET(CPACK_BINARY_OSXX11 "") -SET(CPACK_BINARY_PACKAGEMAKER "") -SET(CPACK_BINARY_PRODUCTBUILD "") -SET(CPACK_BINARY_RPM "") -SET(CPACK_BINARY_STGZ "") -SET(CPACK_BINARY_TBZ2 "") -SET(CPACK_BINARY_TGZ "") -SET(CPACK_BINARY_TXZ "") -SET(CPACK_BINARY_TZ "") -SET(CPACK_BINARY_WIX "OFF") -SET(CPACK_BINARY_ZIP "OFF") -SET(CPACK_BUILD_SOURCE_DIRS "C:/Users/Fiftytwo/Repos/colobot;C:/Users/Fiftytwo/Repos/colobot/src") -SET(CPACK_BUNDLE_NAME "Colobot: Gold Edition") -SET(CPACK_CMAKE_GENERATOR "MSYS Makefiles") -SET(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") -SET(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") -SET(CPACK_GENERATOR "NSIS") -SET(CPACK_INSTALL_CMAKE_PROJECTS "C:/Users/Fiftytwo/Repos/colobot/src;colobot;ALL;/") -SET(CPACK_INSTALL_PREFIX "C:/Program Files (x86)/colobot") -SET(CPACK_MODULE_PATH "C:/Users/Fiftytwo/Repos/colobot/cmake") -SET(CPACK_NSIS_DEFINES "SetOverwrite on -BrandingText \"Colobot: Gold Edition (0.1.11+alpha-git-dev~radda8281)\"") -SET(CPACK_NSIS_DISPLAY_NAME "Colobot") -SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") -SET(CPACK_NSIS_INSTALLER_ICON_CODE "!define MUI_HEADERIMAGE_BITMAP \"C:/Users/Fiftytwo/Repos/colobot/desktop/colobot_nsis.bmp\" - !define MUI_WELCOMEFINISHPAGE_BITMAP \"C:/Users/Fiftytwo/Repos/colobot/desktop/colobot_nsis_left.bmp\"") -SET(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") -SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") -SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "colobot.exe") -SET(CPACK_NSIS_MUI_ICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico") -SET(CPACK_NSIS_MUI_UNIICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico") -SET(CPACK_NSIS_PACKAGE_NAME "Colobot") -SET(CPACK_OUTPUT_CONFIG_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackConfig.cmake") -SET(CPACK_PACKAGE_DEFAULT_LOCATION "/") -SET(CPACK_PACKAGE_DESCRIPTION_FILE "C:/Users/Fiftytwo/Repos/colobot/desktop/../README.md") -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Colobot: Gold Edition") -SET(CPACK_PACKAGE_EXECUTABLES "colobot;Colobot: Gold Edition") -SET(CPACK_PACKAGE_FILE_NAME "colobot-0.1.11+alpha-git-dev~radda8281") -SET(CPACK_PACKAGE_ICON "") -SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Colobot") -SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "Colobot") -SET(CPACK_PACKAGE_NAME "colobot") -SET(CPACK_PACKAGE_RELOCATABLE "true") -SET(CPACK_PACKAGE_VENDOR "TerranovaTeam") -SET(CPACK_PACKAGE_VERSION "0.1.11") -SET(CPACK_PACKAGE_VERSION_MAJOR "0") -SET(CPACK_PACKAGE_VERSION_MINOR "1") -SET(CPACK_PACKAGE_VERSION_PATCH "11") -SET(CPACK_RESOURCE_FILE_LICENSE "C:/Users/Fiftytwo/Repos/colobot/desktop/../LICENSE.txt") -SET(CPACK_RESOURCE_FILE_README "C:/msys64/mingw64/share/cmake-3.9/Templates/CPack.GenericDescription.txt") -SET(CPACK_RESOURCE_FILE_WELCOME "C:/msys64/mingw64/share/cmake-3.9/Templates/CPack.GenericWelcome.txt") -SET(CPACK_SET_DESTDIR "OFF") -SET(CPACK_SOURCE_7Z "ON") -SET(CPACK_SOURCE_CYGWIN "") -SET(CPACK_SOURCE_GENERATOR "7Z;ZIP") -SET(CPACK_SOURCE_OUTPUT_CONFIG_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackSourceConfig.cmake") -SET(CPACK_SOURCE_RPM "") -SET(CPACK_SOURCE_TBZ2 "") -SET(CPACK_SOURCE_TGZ "") -SET(CPACK_SOURCE_TXZ "") -SET(CPACK_SOURCE_TZ "") -SET(CPACK_SOURCE_ZIP "ON") -SET(CPACK_STRIP_FILES "TRUE") -SET(CPACK_SYSTEM_NAME "win64") -SET(CPACK_TOPLEVEL_TAG "win64") -SET(CPACK_WIX_SIZEOF_VOID_P "8") - -if(NOT CPACK_PROPERTIES_FILE) - set(CPACK_PROPERTIES_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackProperties.cmake") -endif() - -if(EXISTS ${CPACK_PROPERTIES_FILE}) - include(${CPACK_PROPERTIES_FILE}) -endif() diff --git a/src/CPackSourceConfig.cmake b/src/CPackSourceConfig.cmake deleted file mode 100644 index d6dddd85..00000000 --- a/src/CPackSourceConfig.cmake +++ /dev/null @@ -1,100 +0,0 @@ -# This file will be configured to contain variables for CPack. These variables -# should be set in the CMake list file of the project before CPack module is -# included. The list of available CPACK_xxx variables and their associated -# documentation may be obtained using -# cpack --help-variable-list -# -# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) -# and some are specific to a generator -# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables -# usually begin with CPACK__xxxx. - - -SET(CPACK_BINARY_7Z "OFF") -SET(CPACK_BINARY_BUNDLE "") -SET(CPACK_BINARY_CYGWIN "") -SET(CPACK_BINARY_DEB "") -SET(CPACK_BINARY_DRAGNDROP "") -SET(CPACK_BINARY_IFW "OFF") -SET(CPACK_BINARY_NSIS "ON") -SET(CPACK_BINARY_OSXX11 "") -SET(CPACK_BINARY_PACKAGEMAKER "") -SET(CPACK_BINARY_PRODUCTBUILD "") -SET(CPACK_BINARY_RPM "") -SET(CPACK_BINARY_STGZ "") -SET(CPACK_BINARY_TBZ2 "") -SET(CPACK_BINARY_TGZ "") -SET(CPACK_BINARY_TXZ "") -SET(CPACK_BINARY_TZ "") -SET(CPACK_BINARY_WIX "OFF") -SET(CPACK_BINARY_ZIP "OFF") -SET(CPACK_BUILD_SOURCE_DIRS "C:/Users/Fiftytwo/Repos/colobot;C:/Users/Fiftytwo/Repos/colobot/src") -SET(CPACK_BUNDLE_NAME "Colobot: Gold Edition") -SET(CPACK_CMAKE_GENERATOR "MSYS Makefiles") -SET(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") -SET(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") -SET(CPACK_GENERATOR "7Z;ZIP") -SET(CPACK_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") -SET(CPACK_INSTALLED_DIRECTORIES "C:/Users/Fiftytwo/Repos/colobot;/") -SET(CPACK_INSTALL_CMAKE_PROJECTS "") -SET(CPACK_INSTALL_PREFIX "C:/Program Files (x86)/colobot") -SET(CPACK_MODULE_PATH "C:/Users/Fiftytwo/Repos/colobot/cmake") -SET(CPACK_NSIS_DEFINES "SetOverwrite on -BrandingText \"Colobot: Gold Edition (0.1.11+alpha-git-dev~radda8281)\"") -SET(CPACK_NSIS_DISPLAY_NAME "Colobot") -SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") -SET(CPACK_NSIS_INSTALLER_ICON_CODE "!define MUI_HEADERIMAGE_BITMAP \"C:/Users/Fiftytwo/Repos/colobot/desktop/colobot_nsis.bmp\" - !define MUI_WELCOMEFINISHPAGE_BITMAP \"C:/Users/Fiftytwo/Repos/colobot/desktop/colobot_nsis_left.bmp\"") -SET(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") -SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") -SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "colobot.exe") -SET(CPACK_NSIS_MUI_ICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico") -SET(CPACK_NSIS_MUI_UNIICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico") -SET(CPACK_NSIS_PACKAGE_NAME "Colobot") -SET(CPACK_OUTPUT_CONFIG_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackConfig.cmake") -SET(CPACK_PACKAGE_DEFAULT_LOCATION "/") -SET(CPACK_PACKAGE_DESCRIPTION_FILE "C:/Users/Fiftytwo/Repos/colobot/desktop/../README.md") -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Colobot: Gold Edition") -SET(CPACK_PACKAGE_EXECUTABLES "colobot;Colobot: Gold Edition") -SET(CPACK_PACKAGE_FILE_NAME "colobot-0.1.11-Source") -SET(CPACK_PACKAGE_ICON "") -SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Colobot") -SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "Colobot") -SET(CPACK_PACKAGE_NAME "colobot") -SET(CPACK_PACKAGE_RELOCATABLE "true") -SET(CPACK_PACKAGE_VENDOR "TerranovaTeam") -SET(CPACK_PACKAGE_VERSION "0.1.11") -SET(CPACK_PACKAGE_VERSION_MAJOR "0") -SET(CPACK_PACKAGE_VERSION_MINOR "1") -SET(CPACK_PACKAGE_VERSION_PATCH "11") -SET(CPACK_RESOURCE_FILE_LICENSE "C:/Users/Fiftytwo/Repos/colobot/desktop/../LICENSE.txt") -SET(CPACK_RESOURCE_FILE_README "C:/msys64/mingw64/share/cmake-3.9/Templates/CPack.GenericDescription.txt") -SET(CPACK_RESOURCE_FILE_WELCOME "C:/msys64/mingw64/share/cmake-3.9/Templates/CPack.GenericWelcome.txt") -SET(CPACK_RPM_PACKAGE_SOURCES "ON") -SET(CPACK_SET_DESTDIR "OFF") -SET(CPACK_SOURCE_7Z "ON") -SET(CPACK_SOURCE_CYGWIN "") -SET(CPACK_SOURCE_GENERATOR "7Z;ZIP") -SET(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") -SET(CPACK_SOURCE_INSTALLED_DIRECTORIES "C:/Users/Fiftytwo/Repos/colobot;/") -SET(CPACK_SOURCE_OUTPUT_CONFIG_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackSourceConfig.cmake") -SET(CPACK_SOURCE_PACKAGE_FILE_NAME "colobot-0.1.11-Source") -SET(CPACK_SOURCE_RPM "") -SET(CPACK_SOURCE_TBZ2 "") -SET(CPACK_SOURCE_TGZ "") -SET(CPACK_SOURCE_TOPLEVEL_TAG "win64-Source") -SET(CPACK_SOURCE_TXZ "") -SET(CPACK_SOURCE_TZ "") -SET(CPACK_SOURCE_ZIP "ON") -SET(CPACK_STRIP_FILES "") -SET(CPACK_SYSTEM_NAME "win64") -SET(CPACK_TOPLEVEL_TAG "win64-Source") -SET(CPACK_WIX_SIZEOF_VOID_P "8") - -if(NOT CPACK_PROPERTIES_FILE) - set(CPACK_PROPERTIES_FILE "C:/Users/Fiftytwo/Repos/colobot/src/CPackProperties.cmake") -endif() - -if(EXISTS ${CPACK_PROPERTIES_FILE}) - include(${CPACK_PROPERTIES_FILE}) -endif() diff --git a/src/desktop/colobot.rc b/src/desktop/colobot.rc deleted file mode 100644 index 5187a5af..00000000 --- a/src/desktop/colobot.rc +++ /dev/null @@ -1,25 +0,0 @@ -id ICON "C:/Users/Fiftytwo/Repos/colobot/desktop/colobot.ico" - -1 VERSIONINFO -FILEVERSION 0,1,11,0 -PRODUCTVERSION 0,1,11,0 -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "OriginalFilename", "colobot.exe\0" - VALUE "InternalName", "colobot\0" - VALUE "FileDescription", "Colobot: Gold Edition - Colonize with Bots\0" - VALUE "ProductName", "Colobot: Gold Edition\0" - VALUE "CompanyName", "TerranovaTeam\0" - VALUE "LegalCopyright", "Copyright (c) 2012-2014 TerranovaTeam\0" - VALUE "FileVersion", "0.1.11+alpha-git-dev~radda8281\0" - VALUE "ProductVersion", "0.1.11+alpha-git-dev~radda8281\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/src/src/common/config.h b/src/src/common/config.h deleted file mode 100644 index 196d9900..00000000 --- a/src/src/common/config.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -// Macros set by CMake -#define PLATFORM_WINDOWS 1 -/* #undef PLATFORM_LINUX */ -/* #undef PLATFORM_GNU */ -/* #undef PLATFORM_MACOSX */ -/* #undef PLATFORM_OTHER */ - -#ifdef PLATFORM_MACOSX -// Assume we have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework -#define HAVE_CFLOCALECOPYCURRENT 1 -#endif - -/* #undef GLEW_STATIC */ - -#define OPENAL_SOUND - -/* #undef PORTABLE */ - -#define COLOBOT_DEFAULT_DATADIR "C:/Program Files (x86)/colobot/data" -#define COLOBOT_I18N_DIR "C:/Program Files (x86)/colobot/lang" diff --git a/src/src/common/version.h b/src/src/common/version.h deleted file mode 100644 index 61cea590..00000000 --- a/src/src/common/version.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -#define COLOBOT_FULLNAME "Colobot: Gold Edition 0.1.11+alpha-git-dev~radda8281" -#define COLOBOT_VERSION_DISPLAY "git-dev~radda8281" - -#define BUILD_NUMBER 0 -/* #undef OFFICIAL_BUILD */ From 37fab2fad29fb68ca4821ca1aba43be790cab7b5 Mon Sep 17 00:00:00 2001 From: tomangelo2 Date: Thu, 16 Nov 2017 22:46:34 +0100 Subject: [PATCH 03/44] Updated data submodule --- data | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data b/data index bab2d994..8f1ea899 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit bab2d994d3602f70774257d5b2125b41e6aca926 +Subproject commit 8f1ea8995eda6c72014ae68524abe433bcb6758f From 9a33551a0347f0186e4f7683fc164e6c7be54fbb Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 17 Nov 2017 11:32:50 +0100 Subject: [PATCH 04/44] Reverted factory() to its original design; reworked syntax of other object.functions() accordingly; improved compatibility with CeeBot4 SCHOOL --- src/script/cbottoken.cpp | 14 ++++++---- src/script/scriptfunc.cpp | 57 ++++++++++++++++++++++----------------- src/script/scriptfunc.h | 11 +++++--- 3 files changed, 49 insertions(+), 33 deletions(-) diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index 4dd5c8ec..64d8a549 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -99,6 +99,10 @@ const char* GetObjectName(ObjectType type) if ( type == OBJECT_MOBILEts ) return "TrackedSniffer"; if ( type == OBJECT_MOBILEfs ) return "WingedSniffer"; if ( type == OBJECT_MOBILEis ) return "LeggedSniffer"; + if ( type == OBJECT_MOBILEwb ) return "WheeledBuilder"; + if ( type == OBJECT_MOBILEtb ) return "TrackedBuilder"; + if ( type == OBJECT_MOBILEfb ) return "WingedBuilder"; + if ( type == OBJECT_MOBILEib ) return "LeggedBuilder"; if ( type == OBJECT_MOBILErt ) return "Thumper"; if ( type == OBJECT_MOBILErc ) return "PhazerShooter"; if ( type == OBJECT_MOBILErr ) return "Recycler"; @@ -519,11 +523,11 @@ const char* GetHelpText(const char *token) if ( strcmp(token, "retobject" ) == 0 ) return "retobject ( rank );"; if ( strcmp(token, "retobjectbyid") == 0 ) return "retobjectbyid ( rank );"; if ( strcmp(token, "progfunc" ) == 0 ) return "progfunc ( funcname );"; - if ( strcmp(token, "busy" ) == 0 ) return "object.busy ( );"; - if ( strcmp(token, "factory" ) == 0 ) return "object.factory ( cat, program );"; - if ( strcmp(token, "research" ) == 0 ) return "object.research ( type );"; - if ( strcmp(token, "takeoff" ) == 0 ) return "object.takeoff ( );"; - if ( strcmp(token, "destroy" ) == 0 ) return "object.destroy ( );"; + if ( strcmp(token, "busy" ) == 0 ) return "busy ( );"; + if ( strcmp(token, "factory" ) == 0 ) return "factory ( cat, program, object );"; + if ( strcmp(token, "research" ) == 0 ) return "research ( type );"; + if ( strcmp(token, "takeoff" ) == 0 ) return "takeoff ( );"; + if ( strcmp(token, "destroy" ) == 0 ) return "destroy ( );"; if ( strcmp(token, "search" ) == 0 ) return "search ( cat, pos, min, max, sens, filter );"; if ( strcmp(token, "searchall" ) == 0 ) return "searchall ( cat, pos, min, max, sens, filter );"; if ( strcmp(token, "radar" ) == 0 ) return "radar ( cat, angle, focus, min, max, sens, filter );"; diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index 8a774907..17ed6ff2 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -428,25 +428,30 @@ bool CScriptFunctions::rDestroy(CBotVar* thisclass, CBotVar* var, CBotVar* resul } -// Compilation of instruction "object.factory(cat, program)" +// Compilation of instruction "factory(cat, program [, object])" -CBotTypResult CScriptFunctions::cFactory(CBotVar* thisclass, CBotVar* &var) +CBotTypResult CScriptFunctions::cFactory(CBotVar* &var, void* user) { if ( var == nullptr ) return CBotTypResult(CBotErrLowParam); if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); var = var->GetNext(); if ( var != nullptr ) { - if ( var->GetType() != CBotTypString ) return CBotTypResult(CBotErrBadNum); + if ( var->GetType() != CBotTypPointer ) return CBotTypResult(CBotErrBadParam); var = var->GetNext(); - if ( var != nullptr ) return CBotTypResult(CBotErrOverParam); + if ( var != nullptr ) + { + if ( var->GetType() != CBotTypString ) return CBotTypResult(CBotErrBadParam); + var = var->GetNext(); + if ( var != nullptr ) return CBotTypResult(CBotErrOverParam); + } } return CBotTypResult(CBotTypFloat); } -// Instruction "object.factory(cat, program)" +// Instruction "factory(cat, program [, object])" -bool CScriptFunctions::rFactory(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception, void* user) +bool CScriptFunctions::rFactory(CBotVar* var, CBotVar* result, int& exception, void* user) { CScript* script = static_cast(user); CObject* pThis = script->m_object; @@ -457,20 +462,23 @@ bool CScriptFunctions::rFactory(CBotVar* thisclass, CBotVar* var, CBotVar* resul ObjectType type = static_cast(var->GetValInt()); var = var->GetNext(); - std::string program; - if ( var != nullptr ) - program = var->GetValString(); - else - program = ""; - - CObject* factory = static_cast(thisclass->GetUserPtr()); + + CObject* factory = static_cast(var->GetUserPtr()); if (factory == nullptr) { exception = ERR_UNKNOWN; result->SetValInt(ERR_UNKNOWN); - GetLogger()->Error("in object.factory() - factory is nullptr"); + GetLogger()->Error("in factory() - factory is nullptr"); return false; } + + var = var->GetNext(); + std::string program; + if ( var != nullptr ) + program = var->GetValString(); + + else + program = ""; if ( pThis->GetTeam() != factory->GetTeam() && factory->GetTeam() != 0 ) { @@ -486,7 +494,7 @@ bool CScriptFunctions::rFactory(CBotVar* thisclass, CBotVar* var, CBotVar* resul { exception = ERR_UNKNOWN; result->SetValInt(ERR_UNKNOWN); - GetLogger()->Error("in object.factory() - automat is nullptr"); + GetLogger()->Error("in factory() - automat is nullptr"); return false; } @@ -597,7 +605,7 @@ bool CScriptFunctions::rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* resu // Instruction "object.takeoff()" -bool CScriptFunctions::rTakeOff(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception, void* user) +bool CScriptFunctions::rTakeOff(CBotVar* var, CBotVar* result, int& exception, void* user) { CScript* script = static_cast(user); CObject* pThis = script->m_object; @@ -605,8 +613,7 @@ bool CScriptFunctions::rTakeOff(CBotVar* thisclass, CBotVar* var, CBotVar* resul Error err; exception = 0; - - CObject* base = static_cast(thisclass->GetUserPtr()); + CObject* base = static_cast(var->GetUserPtr()); CAuto* automat = base->GetAuto(); if ( pThis->GetTeam() != base->GetTeam() && base->GetTeam() != 0 ) @@ -1291,10 +1298,10 @@ bool CScriptFunctions::rBuild(CBotVar* var, CBotVar* result, int& exception, voi oType = pThis->GetType(); - if ( oType != OBJECT_MOBILEfa && // allowed only for grabber bots && humans - oType != OBJECT_MOBILEta && - oType != OBJECT_MOBILEwa && - oType != OBJECT_MOBILEia && + if ( oType != OBJECT_MOBILEfb && // allowed only for builder bots && humans + oType != OBJECT_MOBILEtb && + oType != OBJECT_MOBILEwb && + oType != OBJECT_MOBILEib && oType != OBJECT_HUMAN && oType != OBJECT_TECH ) { @@ -3298,9 +3305,9 @@ void CScriptFunctions::Init() bc->AddItem("team", CBotTypResult(CBotTypInt), CBotVar::ProtectionLevel::ReadOnly); bc->AddItem("velocity", CBotTypResult(CBotTypClass, "point"), CBotVar::ProtectionLevel::ReadOnly); bc->AddFunction("busy", rBusy, cBusy); - bc->AddFunction("factory", rFactory, cFactory); + //bc->AddFunction("factory", rFactory, cFactory); bc->AddFunction("research", rResearch, cClassOneFloat); - bc->AddFunction("takeoff", rTakeOff, cClassNull); + //bc->AddFunction("takeoff", rTakeOff); bc->AddFunction("destroy", rDestroy, cClassNull); CBotProgram::AddFunction("endmission",rEndMission,cEndMission); @@ -3365,8 +3372,10 @@ void CScriptFunctions::Init() CBotProgram::AddFunction("penup", rPenUp, cNull); CBotProgram::AddFunction("pencolor", rPenColor, cOneFloat); CBotProgram::AddFunction("penwidth", rPenWidth, cOneFloat); + CBotProgram::AddFunction("factory", rFactory, cFactory); CBotProgram::AddFunction("camerafocus", rCameraFocus, cOneObject); + CBotProgram::AddFunction("takeoff", rTakeOff, cOneObject); SetFileAccessHandler(MakeUnique()); } diff --git a/src/script/scriptfunc.h b/src/script/scriptfunc.h index 5778a9f1..53076792 100644 --- a/src/script/scriptfunc.h +++ b/src/script/scriptfunc.h @@ -80,6 +80,10 @@ private: static CBot::CBotTypResult cTopo(CBot::CBotVar* &var, void* user); static CBot::CBotTypResult cMessage(CBot::CBotVar* &var, void* user); static CBot::CBotTypResult cPenDown(CBot::CBotVar* &var, void* user); + + static CBot::CBotTypResult cFactory(CBot::CBotVar* &var, void* user); + //static CBot::CBotTypResult cTakeOff(CBot::CBotVar* &var, void* user); + static CBot::CBotTypResult cOnePoint(CBot::CBotVar* &var, void* user); static CBot::CBotTypResult cOneObject(CBot::CBotVar* &var, void* user); @@ -143,17 +147,16 @@ private: static bool rPenColor(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static bool rPenWidth(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static bool rCameraFocus(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); - + + static bool rTakeOff(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); + static bool rFactory(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static CBot::CBotTypResult cBusy(CBot::CBotVar* thisclass, CBot::CBotVar* &var); - static CBot::CBotTypResult cFactory(CBot::CBotVar* thisclass, CBot::CBotVar* &var); static CBot::CBotTypResult cClassNull(CBot::CBotVar* thisclass, CBot::CBotVar* &var); static CBot::CBotTypResult cClassOneFloat(CBot::CBotVar* thisclass, CBot::CBotVar* &var); static bool rBusy(CBot::CBotVar* thisclass, CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); - static bool rFactory(CBot::CBotVar* thisclass, CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static bool rResearch(CBot::CBotVar* thisclass, CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); - static bool rTakeOff(CBot::CBotVar* thisclass, CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static bool rDestroy(CBot::CBotVar* thisclass, CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static CBot::CBotTypResult cPointConstructor(CBot::CBotVar* pThis, CBot::CBotVar* &var); From 0b36bdf37fa6bb265300de4b3356540445e83798 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 17 Nov 2017 12:00:49 +0100 Subject: [PATCH 05/44] Quick fix for 9a33551 since I broke sth --- src/script/cbottoken.cpp | 12 ++-- src/script/scriptfunc.cpp | 123 +++++++++++++++++++++++++++----------- src/script/scriptfunc.h | 14 ++--- 3 files changed, 98 insertions(+), 51 deletions(-) diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index 64d8a549..c9500e15 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -269,7 +269,7 @@ std::string GetHelpFilename(const char *token) if ( strcmp(token, "trunc" ) == 0 ) helpfile = "cbot/trunc"; if ( strcmp(token, "retobject" ) == 0 ) helpfile = "cbot/retobj"; if ( strcmp(token, "errmode" ) == 0 ) helpfile = "cbot/errmode"; - if ( strcmp(token, "busy" ) == 0 ) helpfile = "cbot/busy"; + if ( strcmp(token, "isbusy" ) == 0 ) helpfile = "cbot/isbusy"; if ( strcmp(token, "takeoff" ) == 0 ) helpfile = "cbot/takeoff"; if ( strcmp(token, "research" ) == 0 ) helpfile = "cbot/research"; if ( strcmp(token, "factory" ) == 0 ) helpfile = "cbot/factory"; @@ -420,7 +420,7 @@ bool IsFunction(const char *token) if ( strcmp(token, "trunc" ) == 0 ) return true; if ( strcmp(token, "retobjectbyid") == 0 ) return true; if ( strcmp(token, "retobject" ) == 0 ) return true; - if ( strcmp(token, "busy" ) == 0 ) return true; + if ( strcmp(token, "isbusy" ) == 0 ) return true; if ( strcmp(token, "factory" ) == 0 ) return true; if ( strcmp(token, "research" ) == 0 ) return true; if ( strcmp(token, "takeoff" ) == 0 ) return true; @@ -523,11 +523,11 @@ const char* GetHelpText(const char *token) if ( strcmp(token, "retobject" ) == 0 ) return "retobject ( rank );"; if ( strcmp(token, "retobjectbyid") == 0 ) return "retobjectbyid ( rank );"; if ( strcmp(token, "progfunc" ) == 0 ) return "progfunc ( funcname );"; - if ( strcmp(token, "busy" ) == 0 ) return "busy ( );"; + if ( strcmp(token, "isbusy" ) == 0 ) return "isbusy ( object );"; if ( strcmp(token, "factory" ) == 0 ) return "factory ( cat, program, object );"; - if ( strcmp(token, "research" ) == 0 ) return "research ( type );"; - if ( strcmp(token, "takeoff" ) == 0 ) return "takeoff ( );"; - if ( strcmp(token, "destroy" ) == 0 ) return "destroy ( );"; + if ( strcmp(token, "research" ) == 0 ) return "research ( type, object );"; + if ( strcmp(token, "takeoff" ) == 0 ) return "takeoff ( object );"; + if ( strcmp(token, "destroy" ) == 0 ) return "destroy ( object );"; if ( strcmp(token, "search" ) == 0 ) return "search ( cat, pos, min, max, sens, filter );"; if ( strcmp(token, "searchall" ) == 0 ) return "searchall ( cat, pos, min, max, sens, filter );"; if ( strcmp(token, "radar" ) == 0 ) return "radar ( cat, angle, focus, min, max, sens, filter );"; diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index 17ed6ff2..eb40aeb5 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -357,22 +357,30 @@ bool CScriptFunctions::rGetObject(CBotVar* var, CBotVar* result, int& exception, return true; } -// Compilation of instruction "object.busy()" -CBotTypResult CScriptFunctions::cBusy(CBotVar* thisclass, CBotVar* &var) +// Compilation of instruction "isbusy( object )" + +CBotTypResult CScriptFunctions::cIsBusy(CBot::CBotVar* &var, void* user) { - if ( var != nullptr ) return CBotTypResult(CBotErrOverParam); + if ( var == nullptr ) return CBotTypResult(CBotErrLowParam); return CBotTypResult(CBotTypBoolean); } -// Instruction "object.busy()" +// Instruction "isbusy( object )" -bool CScriptFunctions::rBusy(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception, void* user) +bool CScriptFunctions::rIsBusy(CBotVar* var, CBotVar* result, int& exception, void* user) { CObject* pThis = static_cast(user)->m_object; exception = 0; - CObject* obj = static_cast(thisclass->GetUserPtr()); + CObject* obj = static_cast(var->GetUserPtr()); + if (obj == nullptr) + { + exception = ERR_WRONG_OBJ; + result->SetValInt(ERR_WRONG_OBJ); + return false; + } + CAuto* automat = obj->GetAuto(); if ( pThis->GetTeam() != obj->GetTeam() && obj->GetTeam() != 0 ) @@ -390,7 +398,7 @@ bool CScriptFunctions::rBusy(CBotVar* thisclass, CBotVar* var, CBotVar* result, return true; } -bool CScriptFunctions::rDestroy(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception, void* user) +bool CScriptFunctions::rDestroy(CBotVar* var, CBotVar* result, int& exception, void* user) { CScript* script = static_cast(user); CObject* pThis = script->m_object; @@ -398,7 +406,14 @@ bool CScriptFunctions::rDestroy(CBotVar* thisclass, CBotVar* var, CBotVar* resul exception = 0; Error err; - CObject* obj = static_cast(thisclass->GetUserPtr()); + CObject* obj = static_cast(var->GetUserPtr()); + if (obj == nullptr) + { + exception = ERR_WRONG_OBJ; + result->SetValInt(ERR_WRONG_OBJ); + return false; + } + CAuto* automat = obj->GetAuto(); if ( pThis->GetTeam() != obj->GetTeam() && obj->GetTeam() != 0 ) @@ -427,8 +442,7 @@ bool CScriptFunctions::rDestroy(CBotVar* thisclass, CBotVar* var, CBotVar* resul return true; } - -// Compilation of instruction "factory(cat, program [, object])" +// Compilation of instruction "factory(cat[, program , object])" CBotTypResult CScriptFunctions::cFactory(CBotVar* &var, void* user) { @@ -437,11 +451,11 @@ CBotTypResult CScriptFunctions::cFactory(CBotVar* &var, void* user) var = var->GetNext(); if ( var != nullptr ) { - if ( var->GetType() != CBotTypPointer ) return CBotTypResult(CBotErrBadParam); + if ( var->GetType() != CBotTypString ) return CBotTypResult(CBotErrBadParam); var = var->GetNext(); if ( var != nullptr ) { - if ( var->GetType() != CBotTypString ) return CBotTypResult(CBotErrBadParam); + if ( var->GetType() != CBotTypPointer ) return CBotTypResult(CBotErrBadParam); var = var->GetNext(); if ( var != nullptr ) return CBotTypResult(CBotErrOverParam); } @@ -449,7 +463,7 @@ CBotTypResult CScriptFunctions::cFactory(CBotVar* &var, void* user) return CBotTypResult(CBotTypFloat); } -// Instruction "factory(cat, program [, object])" +// Instruction "factory(cat[, program , object])" bool CScriptFunctions::rFactory(CBotVar* var, CBotVar* result, int& exception, void* user) { @@ -463,22 +477,27 @@ bool CScriptFunctions::rFactory(CBotVar* var, CBotVar* result, int& exception, v ObjectType type = static_cast(var->GetValInt()); var = var->GetNext(); - CObject* factory = static_cast(var->GetUserPtr()); - if (factory == nullptr) - { - exception = ERR_UNKNOWN; - result->SetValInt(ERR_UNKNOWN); - GetLogger()->Error("in factory() - factory is nullptr"); - return false; - } - - var = var->GetNext(); std::string program; if ( var != nullptr ) + { program = var->GetValString(); - + var = var->GetNext(); + } else program = ""; + + CObject* factory; + if (var == nullptr) + factory = CObjectManager::GetInstancePointer()->FindNearest(pThis, OBJECT_FACTORY); + else + factory = static_cast(var->GetUserPtr()); + + if (factory == nullptr) + { + exception = ERR_WRONG_OBJ; + result->SetValInt(ERR_WRONG_OBJ); + return false; + } if ( pThis->GetTeam() != factory->GetTeam() && factory->GetTeam() != 0 ) { @@ -528,9 +547,24 @@ bool CScriptFunctions::rFactory(CBotVar* var, CBotVar* result, int& exception, v return true; } -// Instruction "object.research(type)" +// Compilation of instruction "research(type[, object])" -bool CScriptFunctions::rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception, void* user) +CBotTypResult CScriptFunctions::cResearch(CBotVar* &var, void* user) +{ + if ( var == nullptr ) return CBotTypResult(CBotErrLowParam); + if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum); + var = var->GetNext(); + if ( var != nullptr ) + { + if ( var->GetType() != CBotTypPointer ) return CBotTypResult(CBotErrBadParam); + var = var->GetNext(); + if ( var != nullptr ) return CBotTypResult(CBotErrOverParam); + } + return CBotTypResult(CBotTypFloat); +} +// Instruction "research(type[, object])" + +bool CScriptFunctions::rResearch(CBotVar* var, CBotVar* result, int& exception, void* user) { CScript* script = static_cast(user); CObject* pThis = script->m_object; @@ -540,8 +574,21 @@ bool CScriptFunctions::rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* resu exception = 0; ResearchType type = static_cast(var->GetValInt()); - - CObject* center = static_cast(thisclass->GetUserPtr()); + var = var->GetNext(); + + CObject* center; + if (var == nullptr) + center = CObjectManager::GetInstancePointer()->FindNearest(pThis, OBJECT_RESEARCH); + else + center = static_cast(var->GetUserPtr()); + + if (center == nullptr) + { + exception = ERR_WRONG_OBJ; + result->SetValInt(ERR_WRONG_OBJ); + return false; + } + CAuto* automat = center->GetAuto(); if ( pThis->GetTeam() != center->GetTeam() && center->GetTeam() != 0 ) @@ -603,7 +650,7 @@ bool CScriptFunctions::rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* resu return true; } -// Instruction "object.takeoff()" +// Instruction "takeoff(object)" bool CScriptFunctions::rTakeOff(CBotVar* var, CBotVar* result, int& exception, void* user) { @@ -614,6 +661,13 @@ bool CScriptFunctions::rTakeOff(CBotVar* var, CBotVar* result, int& exception, v exception = 0; CObject* base = static_cast(var->GetUserPtr()); + if (base == nullptr) + { + exception = ERR_WRONG_OBJ; + result->SetValInt(ERR_WRONG_OBJ); + return false; + } + CAuto* automat = base->GetAuto(); if ( pThis->GetTeam() != base->GetTeam() && base->GetTeam() != 0 ) @@ -3304,11 +3358,6 @@ void CScriptFunctions::Init() bc->AddItem("id", CBotTypResult(CBotTypInt), CBotVar::ProtectionLevel::ReadOnly); bc->AddItem("team", CBotTypResult(CBotTypInt), CBotVar::ProtectionLevel::ReadOnly); bc->AddItem("velocity", CBotTypResult(CBotTypClass, "point"), CBotVar::ProtectionLevel::ReadOnly); - bc->AddFunction("busy", rBusy, cBusy); - //bc->AddFunction("factory", rFactory, cFactory); - bc->AddFunction("research", rResearch, cClassOneFloat); - //bc->AddFunction("takeoff", rTakeOff); - bc->AddFunction("destroy", rDestroy, cClassNull); CBotProgram::AddFunction("endmission",rEndMission,cEndMission); CBotProgram::AddFunction("playmusic", rPlayMusic ,cPlayMusic); @@ -3373,9 +3422,11 @@ void CScriptFunctions::Init() CBotProgram::AddFunction("pencolor", rPenColor, cOneFloat); CBotProgram::AddFunction("penwidth", rPenWidth, cOneFloat); CBotProgram::AddFunction("factory", rFactory, cFactory); - CBotProgram::AddFunction("camerafocus", rCameraFocus, cOneObject); - CBotProgram::AddFunction("takeoff", rTakeOff, cOneObject); + CBotProgram::AddFunction("takeoff", rTakeOff, cOneObject); + CBotProgram::AddFunction("isbusy", rIsBusy, cIsBusy); + CBotProgram::AddFunction("research", rResearch, cResearch); + CBotProgram::AddFunction("destroy", rDestroy, cOneObject); SetFileAccessHandler(MakeUnique()); } diff --git a/src/script/scriptfunc.h b/src/script/scriptfunc.h index 53076792..390fdeb3 100644 --- a/src/script/scriptfunc.h +++ b/src/script/scriptfunc.h @@ -80,10 +80,9 @@ private: static CBot::CBotTypResult cTopo(CBot::CBotVar* &var, void* user); static CBot::CBotTypResult cMessage(CBot::CBotVar* &var, void* user); static CBot::CBotTypResult cPenDown(CBot::CBotVar* &var, void* user); - + static CBot::CBotTypResult cIsBusy(CBot::CBotVar* &var, void* user); static CBot::CBotTypResult cFactory(CBot::CBotVar* &var, void* user); - //static CBot::CBotTypResult cTakeOff(CBot::CBotVar* &var, void* user); - + static CBot::CBotTypResult cResearch(CBot::CBotVar* &var, void* user); static CBot::CBotTypResult cOnePoint(CBot::CBotVar* &var, void* user); static CBot::CBotTypResult cOneObject(CBot::CBotVar* &var, void* user); @@ -147,18 +146,15 @@ private: static bool rPenColor(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static bool rPenWidth(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static bool rCameraFocus(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); - + static bool rIsBusy(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static bool rTakeOff(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); static bool rFactory(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); + static bool rResearch(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); + static bool rDestroy(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); - static CBot::CBotTypResult cBusy(CBot::CBotVar* thisclass, CBot::CBotVar* &var); static CBot::CBotTypResult cClassNull(CBot::CBotVar* thisclass, CBot::CBotVar* &var); static CBot::CBotTypResult cClassOneFloat(CBot::CBotVar* thisclass, CBot::CBotVar* &var); - static bool rBusy(CBot::CBotVar* thisclass, CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); - static bool rResearch(CBot::CBotVar* thisclass, CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); - static bool rDestroy(CBot::CBotVar* thisclass, CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user); - static CBot::CBotTypResult cPointConstructor(CBot::CBotVar* pThis, CBot::CBotVar* &var); static bool rPointConstructor(CBot::CBotVar* pThis, CBot::CBotVar* var, CBot::CBotVar* pResult, int& Exception, void* user); From d072680715615f3eed34a384df7d5a9d8668cf73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Przyby=C5=82?= Date: Fri, 17 Nov 2017 18:55:57 +0100 Subject: [PATCH 06/44] Gitignore /.idea folder --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index f9f69301..59b7f8d0 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ CMakeLists.txt.user.* # Ignore Visual Studio Code files /.vscode + +# Ignore CLion files +/.idea From d470d9e63c8215425a62c7d3d6377442ca483f0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Przyby=C5=82?= Date: Fri, 17 Nov 2017 18:56:34 +0100 Subject: [PATCH 07/44] Update data submodule (button4.png) --- data | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data b/data index 8f1ea899..b9072e39 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 8f1ea8995eda6c72014ae68524abe433bcb6758f +Subproject commit b9072e39a634a22d23b6ef0f1ef143c95eac6026 From 46bef8fd92f7d770e71ec0dba921f8a3248fc8ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Przyby=C5=82?= Date: Fri, 17 Nov 2017 18:59:14 +0100 Subject: [PATCH 08/44] Add button4.png drawing (builder icons) --- src/graphics/engine/engine.cpp | 1 + src/graphics/engine/text.cpp | 8 +- src/ui/controls/control.cpp | 8 +- src/ui/controls/map.cpp | 131 ++++++++++++++++++--------------- src/ui/controls/shortcut.cpp | 7 +- src/ui/mainshort.cpp | 119 +++++++++++++++++------------- 6 files changed, 161 insertions(+), 113 deletions(-) diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index 74c6179d..17523bfb 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -2309,6 +2309,7 @@ bool CEngine::LoadAllTextures() LoadTexture("textures/interface/button1.png"); LoadTexture("textures/interface/button2.png"); LoadTexture("textures/interface/button3.png"); + LoadTexture("textures/interface/button4.png"); LoadTexture("textures/effect00.png"); LoadTexture("textures/effect01.png"); LoadTexture("textures/effect02.png"); diff --git a/src/graphics/engine/text.cpp b/src/graphics/engine/text.cpp index 53bd7f6a..5472a6cd 100644 --- a/src/graphics/engine/text.cpp +++ b/src/graphics/engine/text.cpp @@ -925,7 +925,13 @@ void CText::DrawCharAndAdjustPos(UTF8Char ch, FontType font, float size, Math::I // For whatever reason ch.c1 is a SIGNED char, we need to fix that unsigned char icon = static_cast(ch.c1); - if ( icon >= 128 ) + if ( icon >= 192 ) + { + icon -= 192; + m_engine->SetTexture("textures/interface/button4.png"); + m_engine->SetState(ENG_RSTATE_TTEXTURE_WHITE); + } + else if ( icon >= 128 ) { icon -= 128; m_engine->SetTexture("textures/interface/button3.png"); diff --git a/src/ui/controls/control.cpp b/src/ui/controls/control.cpp index e0b8ccf9..fee735db 100644 --- a/src/ui/controls/control.cpp +++ b/src/ui/controls/control.cpp @@ -518,7 +518,13 @@ void CControl::Draw() if ( m_state & STATE_DEAD ) return; icon = m_icon; - if ( icon >= 128 ) + if (icon >= 192) + { + icon -= 192; + m_engine->SetTexture("textures/interface/button4.png"); + m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE); + } + else if ( icon >= 128 ) { icon -= 128; m_engine->SetTexture("textures/interface/button3.png"); diff --git a/src/ui/controls/map.cpp b/src/ui/controls/map.cpp index 1376f189..d372f2c4 100644 --- a/src/ui/controls/map.cpp +++ b/src/ui/controls/map.cpp @@ -830,67 +830,80 @@ void CMap::DrawObjectIcon(Math::Point pos, Math::Point dim, MapColor color, if ( bHilite ) { - icon = -1; - if ( type == OBJECT_FACTORY ) icon = 32; - if ( type == OBJECT_DERRICK ) icon = 33; - if ( type == OBJECT_CONVERT ) icon = 34; - if ( type == OBJECT_RESEARCH ) icon = 35; - if ( type == OBJECT_STATION ) icon = 36; - if ( type == OBJECT_TOWER ) icon = 37; - if ( type == OBJECT_LABO ) icon = 38; - if ( type == OBJECT_ENERGY ) icon = 39; - if ( type == OBJECT_RADAR ) icon = 40; - if ( type == OBJECT_INFO ) icon = 44; - if ( type == OBJECT_REPAIR ) icon = 41; - if ( type == OBJECT_DESTROYER) icon = 41; - if ( type == OBJECT_NUCLEAR ) icon = 42; - if ( type == OBJECT_PARA ) icon = 46; - if ( type == OBJECT_SAFE ) icon = 47; - if ( type == OBJECT_HUSTON ) icon = 48; - if ( type == OBJECT_TARGET1 ) icon = 45; - if ( type == OBJECT_BASE ) icon = 43; - if ( type == OBJECT_HUMAN ) icon = 8; - if ( type == OBJECT_MOBILEfa ) icon = 11; - if ( type == OBJECT_MOBILEta ) icon = 10; - if ( type == OBJECT_MOBILEwa ) icon = 9; - if ( type == OBJECT_MOBILEia ) icon = 22; - if ( type == OBJECT_MOBILEfb ) icon = 32; //placeholder icon - if ( type == OBJECT_MOBILEtb ) icon = 32; - if ( type == OBJECT_MOBILEwb ) icon = 32; - if ( type == OBJECT_MOBILEib ) icon = 32; - if ( type == OBJECT_MOBILEfc ) icon = 17; - if ( type == OBJECT_MOBILEtc ) icon = 16; - if ( type == OBJECT_MOBILEwc ) icon = 15; - if ( type == OBJECT_MOBILEic ) icon = 23; - if ( type == OBJECT_MOBILEfi ) icon = 27; - if ( type == OBJECT_MOBILEti ) icon = 26; - if ( type == OBJECT_MOBILEwi ) icon = 25; - if ( type == OBJECT_MOBILEii ) icon = 28; - if ( type == OBJECT_MOBILEfs ) icon = 14; - if ( type == OBJECT_MOBILEts ) icon = 13; - if ( type == OBJECT_MOBILEws ) icon = 12; - if ( type == OBJECT_MOBILEis ) icon = 24; - if ( type == OBJECT_MOBILErt ) icon = 18; - if ( type == OBJECT_MOBILErc ) icon = 19; - if ( type == OBJECT_MOBILErr ) icon = 20; - if ( type == OBJECT_MOBILErs ) icon = 29; - if ( type == OBJECT_MOBILEsa ) icon = 21; - if ( type == OBJECT_MOBILEft ) icon = 30; - if ( type == OBJECT_MOBILEtt ) icon = 30; - if ( type == OBJECT_MOBILEwt ) icon = 30; - if ( type == OBJECT_MOBILEit ) icon = 30; - if ( type == OBJECT_MOBILEtg ) icon = 45; - if ( type == OBJECT_MOBILEdr ) icon = 48; - if ( type == OBJECT_APOLLO2 ) icon = 49; - if ( type == OBJECT_MOTHER ) icon = 31; - if ( type == OBJECT_ANT ) icon = 31; - if ( type == OBJECT_SPIDER ) icon = 31; - if ( type == OBJECT_BEE ) icon = 31; - if ( type == OBJECT_WORM ) icon = 31; - if ( type == OBJECT_TEEN28 ) icon = 48; // bottle - if ( type == OBJECT_TEEN34 ) icon = 48; // stone + switch ( type ) + { + case OBJECT_FACTORY: icon = 32; break; + case OBJECT_DERRICK: icon = 33; break; + case OBJECT_CONVERT: icon = 34; break; + case OBJECT_RESEARCH: icon = 35; break; + case OBJECT_STATION: icon = 36; break; + case OBJECT_TOWER: icon = 37; break; + case OBJECT_LABO: icon = 38; break; + case OBJECT_ENERGY: icon = 39; break; + case OBJECT_RADAR: icon = 40; break; + case OBJECT_INFO: icon = 44; break; + case OBJECT_REPAIR: icon = 41; break; + case OBJECT_DESTROYER: icon = 41; break; + case OBJECT_NUCLEAR: icon = 42; break; + case OBJECT_PARA: icon = 46; break; + case OBJECT_SAFE: icon = 47; break; + case OBJECT_HUSTON: icon = 48; break; + case OBJECT_TARGET1: icon = 45; break; + case OBJECT_BASE: icon = 43; break; + case OBJECT_HUMAN: icon = 8; break; + case OBJECT_MOBILEfa: icon = 11; break; + case OBJECT_MOBILEta: icon = 10; break; + case OBJECT_MOBILEwa: icon = 9; break; + case OBJECT_MOBILEia: icon = 22; break; + case OBJECT_MOBILEfb: icon = 2; break; // button4 + case OBJECT_MOBILEtb: icon = 1; break; + case OBJECT_MOBILEwb: icon = 0; break; + case OBJECT_MOBILEib: icon = 3; break; + case OBJECT_MOBILEfc: icon = 17; break; + case OBJECT_MOBILEtc: icon = 16; break; + case OBJECT_MOBILEwc: icon = 15; break; + case OBJECT_MOBILEic: icon = 23; break; + case OBJECT_MOBILEfi: icon = 27; break; + case OBJECT_MOBILEti: icon = 26; break; + case OBJECT_MOBILEwi: icon = 25; break; + case OBJECT_MOBILEii: icon = 28; break; + case OBJECT_MOBILEfs: icon = 14; break; + case OBJECT_MOBILEts: icon = 13; break; + case OBJECT_MOBILEws: icon = 12; break; + case OBJECT_MOBILEis: icon = 24; break; + case OBJECT_MOBILErt: icon = 18; break; + case OBJECT_MOBILErc: icon = 19; break; + case OBJECT_MOBILErr: icon = 20; break; + case OBJECT_MOBILErs: icon = 29; break; + case OBJECT_MOBILEsa: icon = 21; break; + case OBJECT_MOBILEft: icon = 30; break; + case OBJECT_MOBILEtt: icon = 30; break; + case OBJECT_MOBILEwt: icon = 30; break; + case OBJECT_MOBILEit: icon = 30; break; + case OBJECT_MOBILEtg: icon = 45; break; + case OBJECT_MOBILEdr: icon = 48; break; + case OBJECT_APOLLO2: icon = 49; break; + case OBJECT_MOTHER: icon = 31; break; + case OBJECT_ANT: icon = 31; break; + case OBJECT_SPIDER: icon = 31; break; + case OBJECT_BEE: icon = 31; break; + case OBJECT_WORM: icon = 31; break; + case OBJECT_TEEN28: icon = 48; break; // bottle + case OBJECT_TEEN34: icon = 48; break; // stone + default: icon = -1; + } if ( icon == -1 ) return; + switch ( type ) + { + case OBJECT_MOBILEfb: + case OBJECT_MOBILEtb: + case OBJECT_MOBILEwb: + case OBJECT_MOBILEib: + m_engine->SetTexture("textures/interface/button4.png"); break; + default: ; // button3.png + } + m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE); uv1.x = (32.0f/256.0f)*(icon%8); uv1.y = (32.0f/256.0f)*(icon/8); diff --git a/src/ui/controls/shortcut.cpp b/src/ui/controls/shortcut.cpp index 036c10d6..d7cdd2e0 100644 --- a/src/ui/controls/shortcut.cpp +++ b/src/ui/controls/shortcut.cpp @@ -124,7 +124,12 @@ void CShortcut::Draw() } icon = m_icon; - if ( icon >= 128 ) + if ( icon >= 192 ) + { + icon -= 192; + m_engine->SetTexture("textures/interface/button4.png"); + } + else if ( icon >= 128 ) { icon -= 128; m_engine->SetTexture("textures/interface/button3.png"); diff --git a/src/ui/mainshort.cpp b/src/ui/mainshort.cpp index ce077c8c..b9617bcf 100644 --- a/src/ui/mainshort.cpp +++ b/src/ui/mainshort.cpp @@ -182,61 +182,78 @@ int CMainShort::GetShortcutIcon(ObjectType type) int icon = -1; if ( m_bBuilding ) { - if ( type == OBJECT_FACTORY ) icon = 32; - if ( type == OBJECT_DERRICK ) icon = 33; - if ( type == OBJECT_CONVERT ) icon = 34; - if ( type == OBJECT_RESEARCH ) icon = 35; - if ( type == OBJECT_STATION ) icon = 36; - if ( type == OBJECT_TOWER ) icon = 37; - if ( type == OBJECT_LABO ) icon = 38; - if ( type == OBJECT_ENERGY ) icon = 39; - if ( type == OBJECT_RADAR ) icon = 40; - if ( type == OBJECT_INFO ) icon = 44; - if ( type == OBJECT_REPAIR ) icon = 41; - if ( type == OBJECT_DESTROYER) icon = 41; - if ( type == OBJECT_NUCLEAR ) icon = 42; - if ( type == OBJECT_PARA ) icon = 46; - if ( type == OBJECT_SAFE ) icon = 47; - if ( type == OBJECT_HUSTON ) icon = 48; - if ( type == OBJECT_BASE ) icon = 43; + switch ( type ) + { + case OBJECT_FACTORY: icon = 32; break; + case OBJECT_DERRICK: icon = 33; break; + case OBJECT_CONVERT: icon = 34; break; + case OBJECT_RESEARCH: icon = 35; break; + case OBJECT_STATION: icon = 36; break; + case OBJECT_TOWER: icon = 37; break; + case OBJECT_LABO: icon = 38; break; + case OBJECT_ENERGY: icon = 39; break; + case OBJECT_RADAR: icon = 40; break; + case OBJECT_INFO: icon = 44; break; + case OBJECT_REPAIR: icon = 41; break; + case OBJECT_DESTROYER: icon = 41; break; + case OBJECT_NUCLEAR: icon = 42; break; + case OBJECT_PARA: icon = 46; break; + case OBJECT_SAFE: icon = 47; break; + case OBJECT_HUSTON: icon = 48; break; + case OBJECT_BASE: icon = 43; break; + default: return -1; + } } else { - if ( type == OBJECT_HUMAN ) icon = 8; - if ( type == OBJECT_MOBILEfa ) icon = 11; - if ( type == OBJECT_MOBILEta ) icon = 10; - if ( type == OBJECT_MOBILEwa ) icon = 9; - if ( type == OBJECT_MOBILEia ) icon = 22; - if ( type == OBJECT_MOBILEfb ) icon = 32; - if ( type == OBJECT_MOBILEtb ) icon = 32; - if ( type == OBJECT_MOBILEwb ) icon = 32; - if ( type == OBJECT_MOBILEib ) icon = 32; - if ( type == OBJECT_MOBILEfc ) icon = 17; - if ( type == OBJECT_MOBILEtc ) icon = 16; - if ( type == OBJECT_MOBILEwc ) icon = 15; - if ( type == OBJECT_MOBILEic ) icon = 23; - if ( type == OBJECT_MOBILEfi ) icon = 27; - if ( type == OBJECT_MOBILEti ) icon = 26; - if ( type == OBJECT_MOBILEwi ) icon = 25; - if ( type == OBJECT_MOBILEii ) icon = 28; - if ( type == OBJECT_MOBILEfs ) icon = 14; - if ( type == OBJECT_MOBILEts ) icon = 13; - if ( type == OBJECT_MOBILEws ) icon = 12; - if ( type == OBJECT_MOBILEis ) icon = 24; - if ( type == OBJECT_MOBILErt ) icon = 18; - if ( type == OBJECT_MOBILErc ) icon = 19; - if ( type == OBJECT_MOBILErr ) icon = 20; - if ( type == OBJECT_MOBILErs ) icon = 29; - if ( type == OBJECT_MOBILEsa ) icon = 21; - if ( type == OBJECT_MOBILEft ) icon = 30; - if ( type == OBJECT_MOBILEtt ) icon = 30; - if ( type == OBJECT_MOBILEwt ) icon = 30; - if ( type == OBJECT_MOBILEit ) icon = 30; - if ( type == OBJECT_MOBILEdr ) icon = 48; - if ( type == OBJECT_APOLLO2 ) icon = 49; + switch ( type ) + { + case OBJECT_HUMAN: icon = 8; break; + case OBJECT_MOBILEfa: icon = 11; break; + case OBJECT_MOBILEta: icon = 10; break; + case OBJECT_MOBILEwa: icon = 9; break; + case OBJECT_MOBILEia: icon = 22; break; + case OBJECT_MOBILEfb: icon = 2; break; // button4 + case OBJECT_MOBILEtb: icon = 1; break; + case OBJECT_MOBILEwb: icon = 0; break; + case OBJECT_MOBILEib: icon = 3; break; + case OBJECT_MOBILEfc: icon = 17; break; + case OBJECT_MOBILEtc: icon = 16; break; + case OBJECT_MOBILEwc: icon = 15; break; + case OBJECT_MOBILEic: icon = 23; break; + case OBJECT_MOBILEfi: icon = 27; break; + case OBJECT_MOBILEti: icon = 26; break; + case OBJECT_MOBILEwi: icon = 25; break; + case OBJECT_MOBILEii: icon = 28; break; + case OBJECT_MOBILEfs: icon = 14; break; + case OBJECT_MOBILEts: icon = 13; break; + case OBJECT_MOBILEws: icon = 12; break; + case OBJECT_MOBILEis: icon = 24; break; + case OBJECT_MOBILErt: icon = 18; break; + case OBJECT_MOBILErc: icon = 19; break; + case OBJECT_MOBILErr: icon = 20; break; + case OBJECT_MOBILErs: icon = 29; break; + case OBJECT_MOBILEsa: icon = 21; break; + case OBJECT_MOBILEft: icon = 30; break; + case OBJECT_MOBILEtt: icon = 30; break; + case OBJECT_MOBILEwt: icon = 30; break; + case OBJECT_MOBILEit: icon = 30; break; + case OBJECT_MOBILEdr: icon = 48; break; + case OBJECT_APOLLO2: icon = 49; break; + default: return -1; + } + } + + switch ( type ) + { + case OBJECT_MOBILEfb: + case OBJECT_MOBILEtb: + case OBJECT_MOBILEwb: + case OBJECT_MOBILEib: + return 192+icon; + default: + return 128+icon; } - if ( icon == -1 ) return -1; - return 128+icon; } // Updates the interface shortcuts to the units. From b72e802ff73df7549789c940b994126dbc511582 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 17 Nov 2017 19:57:08 +0100 Subject: [PATCH 09/44] Neutron gun now aims --- src/object/old_object.cpp | 16 ++++++++++++++-- src/object/task/taskbuild.cpp | 11 +++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index c2578199..9c1a450e 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -941,6 +941,10 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEic || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEib || m_type == OBJECT_MOBILEwi || m_type == OBJECT_MOBILEti || m_type == OBJECT_MOBILEfi || @@ -2737,7 +2741,11 @@ void COldObject::SetGunGoalV(float gunGoal) if ( m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEwc || - m_type == OBJECT_MOBILEic ) // fireball? + m_type == OBJECT_MOBILEic || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEib) // fireball? { if ( gunGoal > 10.0f*Math::PI/180.0f ) gunGoal = 10.0f*Math::PI/180.0f; if ( gunGoal < -20.0f*Math::PI/180.0f ) gunGoal = -20.0f*Math::PI/180.0f; @@ -2771,7 +2779,11 @@ void COldObject::SetGunGoalH(float gunGoal) if ( m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEwc || - m_type == OBJECT_MOBILEic ) // fireball? + m_type == OBJECT_MOBILEic || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEib) // fireball? { if ( gunGoal > 40.0f*Math::PI/180.0f ) gunGoal = 40.0f*Math::PI/180.0f; if ( gunGoal < -40.0f*Math::PI/180.0f ) gunGoal = -40.0f*Math::PI/180.0f; diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index 5104acfe..35014e45 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -416,6 +416,7 @@ Error CTaskBuild::IsEnded() { CAuto* automat; float angle, dist, time; + Math::Vector pv, pm; if ( m_engine->GetPause() ) return ERR_CONTINUE; if ( m_bError ) return ERR_STOP; @@ -482,6 +483,14 @@ Error CTaskBuild::IsEnded() m_object->SetPartPosition(14, Math::Vector(0.6f, 0.1f, 0.3f)); m_object->SetPartRotationZ(14, 0.0f); } + if (m_object->GetType() == OBJECT_MOBILEfb || + m_object->GetType() == OBJECT_MOBILEib || + m_object->GetType() == OBJECT_MOBILEtb || + m_object->GetType() == OBJECT_MOBILEwb) + { + m_object->SetObjectParent(1, 0); + m_object->StartTaskGunGoal(-15*Math::PI/180.0f, 0.0f); + } m_phase = TBP_PREP; m_speed = 1.0f/1.0f; @@ -542,6 +551,8 @@ Error CTaskBuild::IsEnded() m_object->SetPartPosition(14, Math::Vector(-1.5f, 0.3f, -1.35f)); m_object->SetPartRotationZ(14, Math::PI); } + else + m_object->StartTaskGunGoal(0.0f, 0.0f); if ( m_type == OBJECT_FACTORY || m_type == OBJECT_RESEARCH || From d06116eb49f79c3ebbc2abf27d3d522a86479dfe Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Tue, 21 Nov 2017 19:09:38 +0100 Subject: [PATCH 10/44] Attached proper particles to the neutron gun --- src/object/task/taskbuild.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index 35014e45..c8806f9b 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -325,7 +325,8 @@ bool CTaskBuild::EventProcess(const Event &event) case OBJECT_MOBILEtb: case OBJECT_MOBILEwb: case OBJECT_MOBILEib: - mat = m_object->GetWorldMatrix(3); + mat = m_object->GetWorldMatrix(1); + pos.y += 1.5f; break; default: From 03c7d2e7ee0ed21460bf4b8ca522f3d7d81b5546 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Wed, 22 Nov 2017 02:05:36 +0100 Subject: [PATCH 11/44] WingedBuilder full implementation; new aiming method, better particle alignment --- src/object/task/taskbuild.cpp | 47 +++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index c8806f9b..7a608cc7 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -246,8 +246,16 @@ bool CTaskBuild::EventProcess(const Event &event) { dist = Math::Distance(m_object->GetPosition(), m_metal->GetPosition()); linSpeed = 0.0f; - if ( dist > 30.0f ) linSpeed = 1.0f; - if ( dist < 30.0f ) linSpeed = -1.0f; + if ( m_physics->GetLand() ) + { + if ( dist > 30.0f ) linSpeed = 1.0f; + if ( dist < 30.0f ) linSpeed = -1.0f; + } + else + { + if ( dist > 55.0f ) linSpeed = 0.5f; + if ( dist < 35.0f ) linSpeed = -0.5f; + } m_physics->SetMotorSpeedX(linSpeed); // forward/backward return true; } @@ -326,7 +334,7 @@ bool CTaskBuild::EventProcess(const Event &event) case OBJECT_MOBILEwb: case OBJECT_MOBILEib: mat = m_object->GetWorldMatrix(1); - pos.y += 1.5f; + pos.y += 2.0f; break; default: @@ -373,7 +381,7 @@ Error CTaskBuild::Start(ObjectType type) pos = m_object->GetPosition(); if ( pos.y < m_water->GetLevel() ) return ERR_BUILD_WATER; - if ( !m_physics->GetLand() ) return ERR_BUILD_FLY; + if ( !m_physics->GetLand() && m_object->GetType()!=OBJECT_MOBILEfb) return ERR_BUILD_FLY; speed = m_physics->GetMotorSpeed(); if ( speed.x != 0.0f || @@ -393,15 +401,17 @@ Error CTaskBuild::Start(ObjectType type) err = FlatFloor(); if ( err != ERR_OK ) return err; + pv = m_object->GetPosition(); + pm = m_metal->GetPosition(); + if(!m_physics->GetLand() && abs(pm.y-pv.y)>8.0f) return ERR_BUILD_METALAWAY; + m_metal->SetLock(true); // not usable m_camera->StartCentering(m_object, Math::PI*0.15f, 99.9f, 0.0f, 1.0f); m_phase = TBP_TURN; // rotation necessary preliminary m_angleY = oAngle; // angle was reached - pv = m_object->GetPosition(); pv.y += 8.3f; - pm = m_metal->GetPosition(); m_angleZ = Math::RotateAngle(Math::DistanceProjected(pv, pm), fabs(pv.y-pm.y)); m_physics->SetFreeze(true); // it does not move @@ -416,8 +426,8 @@ Error CTaskBuild::Start(ObjectType type) Error CTaskBuild::IsEnded() { CAuto* automat; - float angle, dist, time; - Math::Vector pv, pm; + float angle, dist, time, diff; + Math::Vector pv, pm, tilt; if ( m_engine->GetPause() ) return ERR_CONTINUE; if ( m_bError ) return ERR_STOP; @@ -452,7 +462,19 @@ Error CTaskBuild::IsEnded() { dist = Math::Distance(m_object->GetPosition(), m_metal->GetPosition()); - if ( dist >= 25.0f && dist <= 35.0f ) + if ( !m_physics->GetLand()) + { + if(dist >= 35.0f && dist <= 55.0f) + { + m_physics->SetMotorSpeedX(0.0f); + m_motion->SetAction(MHS_GUN); // takes gun + + m_phase = TBP_TAKE; + m_speed = 1.0f/1.0f; + m_progress = 0.0f; + } + } + else if ( dist >= 25.0f && dist <= 35.0f) { m_physics->SetMotorSpeedX(0.0f); m_motion->SetAction(MHS_GUN); // takes gun @@ -490,7 +512,12 @@ Error CTaskBuild::IsEnded() m_object->GetType() == OBJECT_MOBILEwb) { m_object->SetObjectParent(1, 0); - m_object->StartTaskGunGoal(-15*Math::PI/180.0f, 0.0f); + pv = m_object->GetPosition(); + pm = m_metal->GetPosition(); + dist = Math::Distance(pv, pm); + diff = pm.y - 8.0f - pv.y; + tilt = m_object->GetRotation(); + if(dist) m_object->StartTaskGunGoal(asin(diff/dist)-tilt.z, 0.0f); } m_phase = TBP_PREP; From 614dc5e591c0fb2b5fdba5a793d6eafc064b8d07 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 23 Nov 2017 00:11:29 +0100 Subject: [PATCH 12/44] Builder research --- src/common/error.h | 1 + src/common/event.cpp | 2 ++ src/common/event.h | 2 ++ src/common/restext.cpp | 2 ++ src/level/parser/parserparam.cpp | 1 + src/level/research_type.h | 3 ++- src/level/robotmain.cpp | 1 + src/object/auto/autoresearch.cpp | 34 +++++++++++++++++++++----------- src/script/scriptfunc.cpp | 1 + 9 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/common/error.h b/src/common/error.h index 0ef8121e..fcb5f7e0 100644 --- a/src/common/error.h +++ b/src/common/error.h @@ -138,6 +138,7 @@ enum Error INFO_RESEARCHPHAZER = 10035, //! < research ended INFO_RESEARCHSHIELD = 10036, //! < research ended INFO_RESEARCHATOMIC = 10037, //! < research ended + INFO_RESEARCHBUILDER = 10038, //! < research ended INFO_WIN = 10040, //! < win INFO_LOST = 10041, //! < lost INFO_LOSTq = 10042, //! < lost immediately diff --git a/src/common/event.cpp b/src/common/event.cpp index 10d1ae9f..b1cd84b4 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -522,6 +522,8 @@ void InitializeEventTypeTexts() EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_START] = "EVENT_CODE_BATTLE_START"; EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_SPECTATOR] = "EVENT_CODE_BATTLE_SPECTATOR"; + + EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER"; } std::string ParseEventType(EventType eventType) diff --git a/src/common/event.h b/src/common/event.h index 27ab1141..b1b309b8 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -593,6 +593,8 @@ enum EventType EVENT_CODE_BATTLE_START = 2200, //!< button that starts the code battle EVENT_CODE_BATTLE_SPECTATOR = 2201, //!< button that controls the code battle spectator camera + + EVENT_OBJECT_RBUILDER = 2300, //! Maximum value of standard events EVENT_STD_MAX, diff --git a/src/common/restext.cpp b/src/common/restext.cpp index 760e74c8..8d97e0c0 100644 --- a/src/common/restext.cpp +++ b/src/common/restext.cpp @@ -372,6 +372,7 @@ void InitializeRestext() stringsEvent[EVENT_OBJECT_RATOMIC] = TR("Run research program for nuclear power"); stringsEvent[EVENT_OBJECT_RiPAW] = TR("Run research program for legged bots"); stringsEvent[EVENT_OBJECT_RiGUN] = TR("Run research program for orga shooter"); + stringsEvent[EVENT_OBJECT_RBUILDER] = TR("Run research program for builder"); stringsEvent[EVENT_OBJECT_RESET] = TR("Return to start"); stringsEvent[EVENT_OBJECT_SEARCH] = TR("Sniff (\\key action;)"); stringsEvent[EVENT_OBJECT_TERRAFORM] = TR("Thump (\\key action;)"); @@ -658,6 +659,7 @@ void InitializeRestext() stringsErr[INFO_RESEARCHPHAZER] = TR("Plans for phazer shooter available"); stringsErr[INFO_RESEARCHSHIELD] = TR("Plans for shielder available"); stringsErr[INFO_RESEARCHATOMIC] = TR("Plans for nuclear power plant available"); + stringsErr[INFO_RESEARCHBUILDER]= TR("Plans for builder available"); stringsErr[INFO_FACTORY] = TR("New bot available"); stringsErr[INFO_LABO] = TR("Analysis performed"); stringsErr[INFO_ENERGY] = TR("Power cell available"); diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp index 8ddb22e9..a56d77c2 100644 --- a/src/level/parser/parserparam.cpp +++ b/src/level/parser/parserparam.cpp @@ -907,6 +907,7 @@ int CLevelParserParam::ToResearchFlag(std::string value) if (value == "RECYCLER") return RESEARCH_RECYCLER; if (value == "SUBBER" ) return RESEARCH_SUBM; if (value == "SNIFFER" ) return RESEARCH_SNIFFER; + if (value == "BUILDER" ) return RESEARCH_BUILDER; return Cast(value, "researchflag"); } diff --git a/src/level/research_type.h b/src/level/research_type.h index 8bde895e..01256ff5 100644 --- a/src/level/research_type.h +++ b/src/level/research_type.h @@ -38,5 +38,6 @@ enum ResearchType RESEARCH_iGUN = (1<<9), //! < cannon of insects RESEARCH_RECYCLER = (1<<10), //! < recycler RESEARCH_SUBM = (1<<11), //! < submarine - RESEARCH_SNIFFER = (1<<12) //! < sniffer + RESEARCH_SNIFFER = (1<<12), //! < sniffer + RESEARCH_BUILDER = (1<<13) //! < builder }; diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index f2d849f6..ca287087 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -5729,6 +5729,7 @@ Error CRobotMain::CanFactoryError(ObjectType type, int team) if (tool == ToolType::Sniffer && !IsResearchDone(RESEARCH_SNIFFER, team)) return ERR_BUILD_RESEARCH; if (tool == ToolType::Shooter && !IsResearchDone(RESEARCH_CANON, team)) return ERR_BUILD_RESEARCH; if (tool == ToolType::OrganicShooter && !IsResearchDone(RESEARCH_iGUN, team)) return ERR_BUILD_RESEARCH; + if (tool == ToolType::Builder && !IsResearchDone(RESEARCH_BUILDER, team)) return ERR_BUILD_RESEARCH; if (drive == DriveType::Tracked && !IsResearchDone(RESEARCH_TANK, team)) return ERR_BUILD_RESEARCH; if (drive == DriveType::Winged && !IsResearchDone(RESEARCH_FLY, team)) return ERR_BUILD_RESEARCH; diff --git a/src/object/auto/autoresearch.cpp b/src/object/auto/autoresearch.cpp index 32380de4..06d5db8f 100644 --- a/src/object/auto/autoresearch.cpp +++ b/src/object/auto/autoresearch.cpp @@ -179,6 +179,7 @@ bool CAutoResearch::EventProcess(const Event &event) if ( event.type == EVENT_OBJECT_RPHAZER ) err = StartAction(RESEARCH_PHAZER); if ( event.type == EVENT_OBJECT_RSHIELD ) err = StartAction(RESEARCH_SHIELD); if ( event.type == EVENT_OBJECT_RATOMIC ) err = StartAction(RESEARCH_ATOMIC); + if ( event.type == EVENT_OBJECT_RBUILDER ) err = StartAction(RESEARCH_BUILDER); if( err != ERR_OK && err != ERR_UNKNOWN ) m_main->DisplayError(err, m_object); @@ -268,6 +269,7 @@ bool CAutoResearch::EventProcess(const Event &event) if ( m_research == RESEARCH_PHAZER ) message = INFO_RESEARCHPHAZER; if ( m_research == RESEARCH_SHIELD ) message = INFO_RESEARCHSHIELD; if ( m_research == RESEARCH_ATOMIC ) message = INFO_RESEARCHATOMIC; + if ( m_research == RESEARCH_BUILDER ) message = INFO_RESEARCHBUILDER; if ( message != ERR_OK ) { m_main->DisplayError(message, m_object); @@ -340,37 +342,41 @@ bool CAutoResearch::CreateInterface(bool bSelect) sx = 33.0f/640.0f; sy = 33.0f/480.0f; - pos.x = ox+sx*7.0f; - pos.y = oy+sy*1.0f; + pos.x = ox+sx*3.0f; + pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+0, EVENT_OBJECT_RTANK); - pos.x = ox+sx*8.0f; - pos.y = oy+sy*1.0f; + pos.x = ox+sx*4.0f; + pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+1, EVENT_OBJECT_RFLY); - pos.x = ox+sx*9.0f; - pos.y = oy+sy*1.0f; + pos.x = ox+sx*5.0f; + pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+3, EVENT_OBJECT_RCANON); - pos.x = ox+sx*10.0f; - pos.y = oy+sy*1.0f; + pos.x = ox+sx*6.0f; + pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+4, EVENT_OBJECT_RTOWER); pos.x = ox+sx*7.0f; - pos.y = oy+sy*0.0f; + pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+7, EVENT_OBJECT_RATOMIC); pos.x = ox+sx*8.0f; - pos.y = oy+sy*0.0f; + pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+2, EVENT_OBJECT_RTHUMP); pos.x = ox+sx*9.0f; - pos.y = oy+sy*0.0f; + pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+6, EVENT_OBJECT_RSHIELD); pos.x = ox+sx*10.0f; - pos.y = oy+sy*0.0f; + pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+5, EVENT_OBJECT_RPHAZER); + + pos.x = ox+sx*11.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 192+4, EVENT_OBJECT_RBUILDER); pos.x = ox+sx*14.5f; pos.y = oy+sy*0; @@ -410,6 +416,7 @@ void CAutoResearch::UpdateInterface() DeadInterface(pw, EVENT_OBJECT_RPHAZER, m_main->IsResearchEnabled(RESEARCH_PHAZER)); DeadInterface(pw, EVENT_OBJECT_RSHIELD, m_main->IsResearchEnabled(RESEARCH_SHIELD)); DeadInterface(pw, EVENT_OBJECT_RATOMIC, m_main->IsResearchEnabled(RESEARCH_ATOMIC)); + DeadInterface(pw, EVENT_OBJECT_RBUILDER, m_main->IsResearchEnabled(RESEARCH_BUILDER)); OkayButton(pw, EVENT_OBJECT_RTANK); OkayButton(pw, EVENT_OBJECT_RFLY); @@ -419,6 +426,7 @@ void CAutoResearch::UpdateInterface() OkayButton(pw, EVENT_OBJECT_RPHAZER); OkayButton(pw, EVENT_OBJECT_RSHIELD); OkayButton(pw, EVENT_OBJECT_RATOMIC); + OkayButton(pw, EVENT_OBJECT_RBUILDER); VisibleInterface(pw, EVENT_OBJECT_RTANK, !m_bBusy); VisibleInterface(pw, EVENT_OBJECT_RFLY, !m_bBusy); @@ -428,6 +436,7 @@ void CAutoResearch::UpdateInterface() VisibleInterface(pw, EVENT_OBJECT_RPHAZER, !m_bBusy); VisibleInterface(pw, EVENT_OBJECT_RSHIELD, !m_bBusy); VisibleInterface(pw, EVENT_OBJECT_RATOMIC, !m_bBusy); + VisibleInterface(pw, EVENT_OBJECT_RBUILDER, !m_bBusy); } // Updates the state of all buttons on the interface, @@ -478,6 +487,7 @@ bool CAutoResearch::TestResearch(EventType event) if ( event == EVENT_OBJECT_RPHAZER ) return m_main->IsResearchDone(RESEARCH_PHAZER, m_object->GetTeam()); if ( event == EVENT_OBJECT_RSHIELD ) return m_main->IsResearchDone(RESEARCH_SHIELD, m_object->GetTeam()); if ( event == EVENT_OBJECT_RATOMIC ) return m_main->IsResearchDone(RESEARCH_ATOMIC, m_object->GetTeam()); + if ( event == EVENT_OBJECT_RBUILDER ) return m_main->IsResearchDone(RESEARCH_BUILDER, m_object->GetTeam()); return false; } diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index c673d8b4..4696ee10 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -3268,6 +3268,7 @@ void CScriptFunctions::Init() CBotProgram::DefineNum("ResearchRecycler", RESEARCH_RECYCLER); CBotProgram::DefineNum("ResearchSubber", RESEARCH_SUBM); CBotProgram::DefineNum("ResearchSniffer", RESEARCH_SNIFFER); + CBotProgram::DefineNum("ResearchBuilder", RESEARCH_BUILDER); CBotProgram::DefineNum("PolskiPortalColobota", 1337); From e8b93f6cdaa93b09e5605680958fd18e0526188d Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Sat, 25 Nov 2017 03:09:47 +0100 Subject: [PATCH 13/44] Add Builder interface --- src/common/event.cpp | 1 + src/common/event.h | 1 + src/common/restext.cpp | 1 + src/ui/object_interface.cpp | 137 +++++++++++++++++++++++++++++++++++- src/ui/object_interface.h | 2 + 5 files changed, 141 insertions(+), 1 deletion(-) diff --git a/src/common/event.cpp b/src/common/event.cpp index b1cd84b4..e83bfeb9 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -524,6 +524,7 @@ void InitializeEventTypeTexts() EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_SPECTATOR] = "EVENT_CODE_BATTLE_SPECTATOR"; EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER"; + EVENT_TYPE_TEXT[EVENT_OBJECT_BUILD] = "EVENT_OBJECT_BUILD"; } std::string ParseEventType(EventType eventType) diff --git a/src/common/event.h b/src/common/event.h index b1b309b8..95c0fc85 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -595,6 +595,7 @@ enum EventType EVENT_CODE_BATTLE_SPECTATOR = 2201, //!< button that controls the code battle spectator camera EVENT_OBJECT_RBUILDER = 2300, + EVENT_OBJECT_BUILD = 2301, //! Maximum value of standard events EVENT_STD_MAX, diff --git a/src/common/restext.cpp b/src/common/restext.cpp index 8d97e0c0..635c56dd 100644 --- a/src/common/restext.cpp +++ b/src/common/restext.cpp @@ -378,6 +378,7 @@ void InitializeRestext() stringsEvent[EVENT_OBJECT_TERRAFORM] = TR("Thump (\\key action;)"); stringsEvent[EVENT_OBJECT_FIRE] = TR("Shoot (\\key action;)"); stringsEvent[EVENT_OBJECT_SPIDEREXPLO] = TR("Explode (\\key action;)"); + stringsEvent[EVENT_OBJECT_BUILD] = TR("Build (\\key action;)"); stringsEvent[EVENT_OBJECT_RECOVER] = TR("Recycle (\\key action;)"); stringsEvent[EVENT_OBJECT_BEGSHIELD] = TR("Extend shield (\\key action;)"); stringsEvent[EVENT_OBJECT_ENDSHIELD] = TR("Withdraw shield (\\key action;)"); diff --git a/src/ui/object_interface.cpp b/src/ui/object_interface.cpp index bd2a5be9..d1105a9b 100644 --- a/src/ui/object_interface.cpp +++ b/src/ui/object_interface.cpp @@ -100,6 +100,8 @@ CObjectInterface::CObjectInterface(COldObject* object) m_manipStyle = EVENT_OBJECT_MFRONT; m_selScript = 0; + + m_buildInterface = false; } // Object's destructor. @@ -620,6 +622,12 @@ bool CObjectInterface::EventProcess(const Event &event) { err = m_taskExecutor->StartTaskSpiderExplo(); } + + if ( action == EVENT_OBJECT_BUILD ) + { + m_buildInterface = !m_buildInterface; + UpdateInterface(); + } if ( action == EVENT_OBJECT_PEN0 ) // up { @@ -1409,6 +1417,87 @@ bool CObjectInterface::CreateInterface(bool bSelect) pw->CreateGroup(pos, ddim, 16, EVENT_OBJECT_CORNERdr); } + if ( (type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib) && // builder? + !m_object->GetTrainer() ) + { + pos.x = ox+sx*7.7f; + pos.y = oy+sy*0.5f; + pb = pw->CreateButton(pos, dim, 192+4, EVENT_OBJECT_BUILD); + pb->SetImmediat(true); + DefaultEnter(pw, EVENT_OBJECT_BUILD); + + pos.x = 0.0f; + pos.y = oy+sy*2.6f; + ddim.x = 214.5f/640.0f; + ddim.y = 66.0f/480.0f; + pw->CreateGroup(pos, ddim, 6, EVENT_WINDOW3); + + ddim.x = dim.x*0.9f; + ddim.y = dim.y*0.9f; + pos.y = oy+sy*3.6f; + + pos.x = ox+sx*0.0f; + pw->CreateButton(pos, ddim, 128+35, EVENT_OBJECT_BRESEARCH); + DeadInterface(pw, EVENT_OBJECT_BRESEARCH, m_main->CanBuild(OBJECT_RESEARCH, m_object->GetTeam())); + + pos.x = ox+sx*0.9f; + pw->CreateButton(pos, ddim, 128+32, EVENT_OBJECT_BFACTORY); + DeadInterface(pw, EVENT_OBJECT_BFACTORY, m_main->CanBuild(OBJECT_FACTORY, m_object->GetTeam())); + + pos.x = ox+sx*1.8f; + pw->CreateButton(pos, ddim, 128+34, EVENT_OBJECT_BCONVERT); + DeadInterface(pw, EVENT_OBJECT_BCONVERT, m_main->CanBuild(OBJECT_CONVERT, m_object->GetTeam())); + + pos.x = ox+sx*2.7f; + pw->CreateButton(pos, ddim, 128+36, EVENT_OBJECT_BSTATION); + DeadInterface(pw, EVENT_OBJECT_BSTATION, m_main->CanBuild(OBJECT_STATION, m_object->GetTeam())); + + pos.x = ox+sx*3.6f; + pw->CreateButton(pos, ddim, 128+40, EVENT_OBJECT_BRADAR); + DeadInterface(pw, EVENT_OBJECT_BRADAR, m_main->CanBuild(OBJECT_RADAR, m_object->GetTeam())); + + pos.x = ox+sx*4.5f; + pw->CreateButton(pos, ddim, 128+41, EVENT_OBJECT_BREPAIR); + DeadInterface(pw, EVENT_OBJECT_BREPAIR, m_main->CanBuild(OBJECT_REPAIR, m_object->GetTeam())); + + pos.x = ox+sx*5.4f; + pw->CreateButton(pos, ddim, 128+44, EVENT_OBJECT_BINFO); + DeadInterface(pw, EVENT_OBJECT_BINFO, m_main->CanBuild(OBJECT_INFO, m_object->GetTeam())); + + pos.y = oy+sy*2.7f; + + pos.x = ox+sx*0.0f; + pw->CreateButton(pos, ddim, 128+37, EVENT_OBJECT_BTOWER); + DeadInterface(pw, EVENT_OBJECT_BTOWER, m_main->CanBuild(OBJECT_TOWER, m_object->GetTeam())); + + pos.x = ox+sx*0.9f; + pw->CreateButton(pos, ddim, 128+39, EVENT_OBJECT_BENERGY); + DeadInterface(pw, EVENT_OBJECT_BENERGY, m_main->CanBuild(OBJECT_ENERGY, m_object->GetTeam())); + + pos.x = ox+sx*1.8f; + pw->CreateButton(pos, ddim, 128+33, EVENT_OBJECT_BDERRICK); + DeadInterface(pw, EVENT_OBJECT_BDERRICK, m_main->CanBuild(OBJECT_DERRICK, m_object->GetTeam())); + + pos.x = ox+sx*2.7f; + pw->CreateButton(pos, ddim, 128+42, EVENT_OBJECT_BNUCLEAR); + DeadInterface(pw, EVENT_OBJECT_BNUCLEAR, m_main->CanBuild(OBJECT_NUCLEAR, m_object->GetTeam())); + + pos.x = ox+sx*3.6f; + pw->CreateButton(pos, ddim, 128+38, EVENT_OBJECT_BLABO); + DeadInterface(pw, EVENT_OBJECT_BLABO, m_main->CanBuild(OBJECT_LABO, m_object->GetTeam())); + + pos.x = ox+sx*4.5f; + pw->CreateButton(pos, ddim, 128+46, EVENT_OBJECT_BPARA); + DeadInterface(pw, EVENT_OBJECT_BPARA, m_main->CanBuild(OBJECT_PARA, m_object->GetTeam())); + + pos.x = ox+sx*5.4f; + pw->CreateButton(pos, ddim, 128+41, EVENT_OBJECT_BDESTROYER); + DeadInterface(pw, EVENT_OBJECT_BDESTROYER, m_main->CanBuild(OBJECT_DESTROYER, m_object->GetTeam())); + + } UpdateInterface(); m_lastUpdateTime = 0.0f; UpdateInterface(0.0f); @@ -1668,6 +1757,7 @@ void CObjectInterface::UpdateInterface() EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable); EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable); EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable); + EnableInterface(pw, EVENT_OBJECT_BUILD, bEnable); EnableInterface(pw, EVENT_OBJECT_SPIDEREXPLO, bEnable); EnableInterface(pw, EVENT_OBJECT_RESET, bEnable); EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable); @@ -1682,7 +1772,11 @@ void CObjectInterface::UpdateInterface() EnableInterface(pw, EVENT_OBJECT_REC, bEnable); EnableInterface(pw, EVENT_OBJECT_STOP, bEnable); - if ( type == OBJECT_HUMAN ) // builder? + if ( type == OBJECT_HUMAN || // builder? + type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib ) { EnableInterface(pw, EVENT_OBJECT_BFACTORY, bEnable); EnableInterface(pw, EVENT_OBJECT_BDERRICK, bEnable); @@ -1733,6 +1827,47 @@ void CObjectInterface::UpdateInterface() ps->SetVisibleValue((RADIUS_SHIELD_MIN/g_unit)+dynamic_cast(m_object)->GetShieldRadius()*((RADIUS_SHIELD_MAX-RADIUS_SHIELD_MIN)/g_unit)); } } + + if ( type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib ) // builder? + { + if(!bEnable) m_buildInterface = false; + CheckInterface(pw, EVENT_OBJECT_BUILD, m_buildInterface); + + pb = static_cast< CButton* >(pw->SearchControl(EVENT_WINDOW3)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BFACTORY)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BDERRICK)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BCONVERT)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BSTATION)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BREPAIR)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BTOWER)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BRESEARCH)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BRADAR)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BENERGY)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BLABO)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BNUCLEAR)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BPARA)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BDESTROYER)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BINFO)); + pb->SetState(STATE_VISIBLE, m_buildInterface); + } bFly = bEnable; if ( bFly && (type == OBJECT_HUMAN || type == OBJECT_TECH) ) diff --git a/src/ui/object_interface.h b/src/ui/object_interface.h index a35638a4..84d4fc76 100644 --- a/src/ui/object_interface.h +++ b/src/ui/object_interface.h @@ -120,6 +120,8 @@ protected: float m_lastAlarmTime; int m_soundChannelAlarm; int m_flagColor; + + bool m_buildInterface; }; } // namespace Ui From 5f8b7a81496ecaf7c3825ff5996afb40e573c52d Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Sat, 25 Nov 2017 12:30:16 +0100 Subject: [PATCH 14/44] Update BotFactory interface --- src/common/event.cpp | 4 ++++ src/common/event.h | 4 ++++ src/common/restext.cpp | 4 ++++ src/level/parser/parserparam.cpp | 1 + src/object/auto/autofactory.cpp | 28 +++++++++++++++++++++++----- 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/common/event.cpp b/src/common/event.cpp index e83bfeb9..b79e8b2d 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -423,6 +423,10 @@ void InitializeEventTypeTexts() EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYts] = "EVENT_OBJECT_FACTORYts"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYfs] = "EVENT_OBJECT_FACTORYfs"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYis] = "EVENT_OBJECT_FACTORYis"; + EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYwb] = "EVENT_OBJECT_FACTORYwb"; + EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYtb] = "EVENT_OBJECT_FACTORYtb"; + EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYfb] = "EVENT_OBJECT_FACTORYfb"; + EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYib] = "EVENT_OBJECT_FACTORYib"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrt] = "EVENT_OBJECT_FACTORYrt"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrc] = "EVENT_OBJECT_FACTORYrc"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrr] = "EVENT_OBJECT_FACTORYrr"; diff --git a/src/common/event.h b/src/common/event.h index 95c0fc85..4cb2a75e 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -492,6 +492,10 @@ enum EventType EVENT_OBJECT_FACTORYrr = 1098, EVENT_OBJECT_FACTORYrs = 1099, EVENT_OBJECT_FACTORYsa = 1100, + EVENT_OBJECT_FACTORYwb = 1101, + EVENT_OBJECT_FACTORYtb = 1102, + EVENT_OBJECT_FACTORYfb = 1103, + EVENT_OBJECT_FACTORYib = 1104, EVENT_OBJECT_SEARCH = 1200, EVENT_OBJECT_TERRAFORM = 1201, EVENT_OBJECT_FIRE = 1202, diff --git a/src/common/restext.cpp b/src/common/restext.cpp index 635c56dd..ab43b630 100644 --- a/src/common/restext.cpp +++ b/src/common/restext.cpp @@ -357,6 +357,10 @@ void InitializeRestext() stringsEvent[EVENT_OBJECT_FACTORYts] = TR("Build a tracked sniffer"); stringsEvent[EVENT_OBJECT_FACTORYws] = TR("Build a wheeled sniffer"); stringsEvent[EVENT_OBJECT_FACTORYis] = TR("Build a legged sniffer"); + stringsEvent[EVENT_OBJECT_FACTORYfb] = TR("Build a winged builder"); + stringsEvent[EVENT_OBJECT_FACTORYtb] = TR("Build a tracked builder"); + stringsEvent[EVENT_OBJECT_FACTORYwb] = TR("Build a wheeled builder"); + stringsEvent[EVENT_OBJECT_FACTORYib] = TR("Build a legged builder"); stringsEvent[EVENT_OBJECT_FACTORYrt] = TR("Build a thumper"); stringsEvent[EVENT_OBJECT_FACTORYrc] = TR("Build a phazer shooter"); stringsEvent[EVENT_OBJECT_FACTORYrr] = TR("Build a recycler"); diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp index a56d77c2..9110ceb5 100644 --- a/src/level/parser/parserparam.cpp +++ b/src/level/parser/parserparam.cpp @@ -787,6 +787,7 @@ ToolType CLevelParserParam::ToToolType(std::string value) if (value == "Sniffer" ) return ToolType::Sniffer; if (value == "Shooter" ) return ToolType::Shooter; if (value == "OrgaShooter") return ToolType::OrganicShooter; + if (value == "Builder" ) return ToolType::Builder; if (value == "Other" ) return ToolType::Other; return static_cast(Cast(value, "tool")); } diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp index 5e998352..1aa2d999 100644 --- a/src/object/auto/autofactory.cpp +++ b/src/object/auto/autofactory.cpp @@ -186,6 +186,10 @@ ObjectType ObjectTypeFromFactoryButton(EventType eventType) if ( eventType == EVENT_OBJECT_FACTORYti ) return OBJECT_MOBILEti; if ( eventType == EVENT_OBJECT_FACTORYfi ) return OBJECT_MOBILEfi; if ( eventType == EVENT_OBJECT_FACTORYii ) return OBJECT_MOBILEii; + if ( eventType == EVENT_OBJECT_FACTORYwb ) return OBJECT_MOBILEwb; + if ( eventType == EVENT_OBJECT_FACTORYtb ) return OBJECT_MOBILEtb; + if ( eventType == EVENT_OBJECT_FACTORYfb ) return OBJECT_MOBILEfb; + if ( eventType == EVENT_OBJECT_FACTORYib ) return OBJECT_MOBILEib; if ( eventType == EVENT_OBJECT_FACTORYrt ) return OBJECT_MOBILErt; if ( eventType == EVENT_OBJECT_FACTORYrc ) return OBJECT_MOBILErc; if ( eventType == EVENT_OBJECT_FACTORYrr ) return OBJECT_MOBILErr; @@ -726,11 +730,11 @@ bool CAutoFactory::CreateInterface(bool bSelect) pos.x = 0.0f; pos.y = oy+sy*2.6f; ddim.x = 138.0f/640.0f; - ddim.y = 222.0f/480.0f; + ddim.y = 258.0f/480.0f; pw->CreateGroup(pos, ddim, 6, EVENT_WINDOW3); pos.x = ox+sx*0.0f; - pos.y = oy+sy*8.2f; + pos.y = oy+sy*9.3f; pw->CreateButton(pos, dim, 128+9, EVENT_OBJECT_FACTORYwa); pos.x += dim.x; pw->CreateButton(pos, dim, 128+10, EVENT_OBJECT_FACTORYta); @@ -740,7 +744,7 @@ bool CAutoFactory::CreateInterface(bool bSelect) pw->CreateButton(pos, dim, 128+22, EVENT_OBJECT_FACTORYia); pos.x = ox+sx*0.0f; - pos.y = oy+sy*7.1f; + pos.y = oy+sy*8.2f; pw->CreateButton(pos, dim, 128+12, EVENT_OBJECT_FACTORYws); pos.x += dim.x; pw->CreateButton(pos, dim, 128+13, EVENT_OBJECT_FACTORYts); @@ -750,7 +754,7 @@ bool CAutoFactory::CreateInterface(bool bSelect) pw->CreateButton(pos, dim, 128+24, EVENT_OBJECT_FACTORYis); pos.x = ox+sx*0.0f; - pos.y = oy+sy*6.0f; + pos.y = oy+sy*7.1f; pw->CreateButton(pos, dim, 128+15, EVENT_OBJECT_FACTORYwc); pos.x += dim.x; pw->CreateButton(pos, dim, 128+16, EVENT_OBJECT_FACTORYtc); @@ -760,7 +764,7 @@ bool CAutoFactory::CreateInterface(bool bSelect) pw->CreateButton(pos, dim, 128+23, EVENT_OBJECT_FACTORYic); pos.x = ox+sx*0.0f; - pos.y = oy+sy*4.9f; + pos.y = oy+sy*6.0f; pw->CreateButton(pos, dim, 128+25, EVENT_OBJECT_FACTORYwi); pos.x += dim.x; pw->CreateButton(pos, dim, 128+26, EVENT_OBJECT_FACTORYti); @@ -768,6 +772,16 @@ bool CAutoFactory::CreateInterface(bool bSelect) pw->CreateButton(pos, dim, 128+27, EVENT_OBJECT_FACTORYfi); pos.x += dim.x; pw->CreateButton(pos, dim, 128+28, EVENT_OBJECT_FACTORYii); + + pos.x = ox+sx*0.0f; + pos.y = oy+sy*4.9f; + pw->CreateButton(pos, dim, 192+0, EVENT_OBJECT_FACTORYwb); + pos.x += dim.x; + pw->CreateButton(pos, dim, 192+1, EVENT_OBJECT_FACTORYtb); + pos.x += dim.x; + pw->CreateButton(pos, dim, 192+2, EVENT_OBJECT_FACTORYfb); + pos.x += dim.x; + pw->CreateButton(pos, dim, 192+3, EVENT_OBJECT_FACTORYib); pos.x = ox+sx*0.0f; pos.y = oy+sy*3.8f; @@ -821,6 +835,10 @@ void CAutoFactory::UpdateInterface() UpdateButton(pw, EVENT_OBJECT_FACTORYti, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYfi, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYii, m_bBusy); + UpdateButton(pw, EVENT_OBJECT_FACTORYwb, m_bBusy); + UpdateButton(pw, EVENT_OBJECT_FACTORYtb, m_bBusy); + UpdateButton(pw, EVENT_OBJECT_FACTORYfb, m_bBusy); + UpdateButton(pw, EVENT_OBJECT_FACTORYib, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYrt, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYrc, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYrr, m_bBusy); From db23c6eecf675b8d725abd572c5a80d7e1b5b45e Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Sat, 25 Nov 2017 14:35:45 +0100 Subject: [PATCH 15/44] Change Builder default camera type --- src/object/old_object.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index 9c1a450e..685c9bd8 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -941,10 +941,6 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEtc || m_type == OBJECT_MOBILEfc || m_type == OBJECT_MOBILEic || - m_type == OBJECT_MOBILEwb || - m_type == OBJECT_MOBILEtb || - m_type == OBJECT_MOBILEfb || - m_type == OBJECT_MOBILEib || m_type == OBJECT_MOBILEwi || m_type == OBJECT_MOBILEti || m_type == OBJECT_MOBILEfi || From 7eb1df41199de76c8626482deb27c1a0c94bde32 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Wed, 29 Nov 2017 13:24:05 +0100 Subject: [PATCH 16/44] Add aim recalibration during falling --- src/object/task/taskbuild.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index 7a608cc7..3c8d769c 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -202,9 +202,9 @@ void CTaskBuild::BlackLight() bool CTaskBuild::EventProcess(const Event &event) { Math::Matrix* mat; - Math::Vector pos, dir, speed; + Math::Vector pos, dir, speed, pv, pm, tilt; Math::Point dim; - float a, g, cirSpeed, dist, linSpeed; + float a, g, cirSpeed, dist, linSpeed, diff; if ( m_engine->GetPause() ) return true; if ( event.type != EVENT_FRAME ) return true; @@ -355,6 +355,16 @@ bool CTaskBuild::EventProcess(const Event &event) m_sound->Play(SOUND_BUILD, m_object->GetPosition(), 0.5f, 1.0f*Math::Rand()*1.5f); } } + + if(m_object->GetType() == OBJECT_MOBILEfb && m_object->GetReactorRange()<0.2f && m_phase != TBP_MOVE) + { + pv = m_object->GetPosition(); + pm = m_metal->GetPosition(); + dist = Math::Distance(pv, pm); + diff = pm.y - 8.0f - pv.y; + tilt = m_object->GetRotation(); + m_object->StartTaskGunGoal(asin(diff/dist)-tilt.z, 0.0f); + } return true; } From e01a6bd0efa1461439c8fb86ec7d48802a704064 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 30 Nov 2017 08:00:17 +0100 Subject: [PATCH 17/44] Add Builder documentation --- src/script/cbottoken.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index bb4066fc..2153b017 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -200,6 +200,10 @@ std::string GetHelpFilename(ObjectType type) if ( type == OBJECT_MOBILEtc ) helpfile = "object/botfc"; if ( type == OBJECT_MOBILEfc ) helpfile = "object/botfj"; if ( type == OBJECT_MOBILEic ) helpfile = "object/botfs"; + if ( type == OBJECT_MOBILEwb ) helpfile = "object/botbr"; + if ( type == OBJECT_MOBILEtb ) helpfile = "object/botbc"; + if ( type == OBJECT_MOBILEfb ) helpfile = "object/botbj"; + if ( type == OBJECT_MOBILEib ) helpfile = "object/botbs"; if ( type == OBJECT_MOBILErt ) helpfile = "object/bottump"; if ( type == OBJECT_MOBILErc ) helpfile = "object/botphaz"; if ( type == OBJECT_MOBILErr ) helpfile = "object/botrecy"; From ca0ff013d47c2ee65ea88fdf6d30336aa6789b4e Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 21 Dec 2017 01:49:56 +0100 Subject: [PATCH 18/44] Update Trainer bots --- src/level/parser/parserparam.cpp | 9 +- src/object/motion/motionvehicle.cpp | 126 ++++++++++++++++++++++++---- src/object/object_type.h | 9 +- src/object/old_object.cpp | 80 +++++++++--------- src/physics/physics.cpp | 24 ++++-- src/script/cbottoken.cpp | 9 +- src/script/scriptfunc.cpp | 16 +++- 7 files changed, 202 insertions(+), 71 deletions(-) diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp index 9110ceb5..9a671976 100644 --- a/src/level/parser/parserparam.cpp +++ b/src/level/parser/parserparam.cpp @@ -339,6 +339,10 @@ ObjectType CLevelParserParam::ToObjectType(std::string value) if (value == "Portico" ) return OBJECT_PORTICO; if (value == "SpaceShip" ) return OBJECT_BASE; if (value == "PracticeBot" ) return OBJECT_MOBILEwt; + if (value == "WingedTrainer" ) return OBJECT_MOBILEft; + if (value == "TrackedTrainer" ) return OBJECT_MOBILEtt; + if (value == "WheeledTrainer" ) return OBJECT_MOBILEwt; + if (value == "LeggedTrainer" ) return OBJECT_MOBILEit; if (value == "WingedGrabber" ) return OBJECT_MOBILEfa; if (value == "TrackedGrabber" ) return OBJECT_MOBILEta; if (value == "WheeledGrabber" ) return OBJECT_MOBILEwa; @@ -543,7 +547,10 @@ const std::string CLevelParserParam::FromObjectType(ObjectType value) { if (value == OBJECT_PORTICO ) return "Portico"; if (value == OBJECT_BASE ) return "SpaceShip"; - if (value == OBJECT_MOBILEwt ) return "PracticeBot"; + if (value == OBJECT_MOBILEwt ) return "WheeledTrainer"; + if (value == OBJECT_MOBILEft ) return "WingedTrainer"; + if (value == OBJECT_MOBILEtt ) return "TrackedTrainer"; + if (value == OBJECT_MOBILEit ) return "LeggedTrainer"; if (value == OBJECT_MOBILEfa ) return "WingedGrabber"; if (value == OBJECT_MOBILEta ) return "TrackedGrabber"; if (value == OBJECT_MOBILEwa ) return "WheeledGrabber"; diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index a9cfa402..be89509a 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -100,21 +100,60 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICLE); // this is a moving object m_object->SetObjectRank(0, rank); + if (m_object->GetTrainer() || + type == OBJECT_MOBILEwt || + type == OBJECT_MOBILEtt || + type == OBJECT_MOBILEft || + type == OBJECT_MOBILEit) + { + modelManager->AddModelReference("trainer.mod", false, rank, m_object->GetTeam()); + } + if (type == OBJECT_MOBILEfa || type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || type == OBJECT_MOBILEfi || type == OBJECT_MOBILEfs) { - modelManager->AddModelReference("lem1f.mod", false, rank, m_object->GetTeam()); + if (!m_object->GetTrainer()) + modelManager->AddModelReference("lem1f.mod", false, rank, m_object->GetTeam()); + else + { + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(28, rank); + m_object->SetObjectParent(28, 0); + modelManager->AddModelReference("trainerf.mod", false, rank, m_object->GetTeam()); + + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(29, rank); + m_object->SetObjectParent(29, 0); + modelManager->AddModelReference("trainera.mod", false, rank, m_object->GetTeam()); + } } else if (type == OBJECT_MOBILEta || type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts) - { - modelManager->AddModelReference("lem1t.mod", false, rank, m_object->GetTeam()); + { + if (!m_object->GetTrainer()) + modelManager->AddModelReference("lem1t.mod", false, rank, m_object->GetTeam()); + else + { + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(28, rank); + m_object->SetObjectParent(28, 0); + modelManager->AddModelReference("trainert.mod", false, rank, m_object->GetTeam()); + + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(29, rank); + m_object->SetObjectParent(29, 0); + modelManager->AddModelReference("trainera.mod", false, rank, m_object->GetTeam()); + } } else if (type == OBJECT_MOBILEwa || type == OBJECT_MOBILEwb || @@ -122,13 +161,21 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEwi || type == OBJECT_MOBILEws) { - if (m_object->GetTrainer()) - { - modelManager->AddModelReference("lem1wt.mod", false, rank, m_object->GetTeam()); - } + if (!m_object->GetTrainer()) + modelManager->AddModelReference("lem1w.mod", false, rank, m_object->GetTeam()); else { - modelManager->AddModelReference("lem1w.mod", false, rank, m_object->GetTeam()); + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(28, rank); + m_object->SetObjectParent(28, 0); + modelManager->AddModelReference("trainerw.mod", false, rank, m_object->GetTeam()); + + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(29, rank); + m_object->SetObjectParent(29, 0); + modelManager->AddModelReference("trainera.mod", false, rank, m_object->GetTeam()); } } else if (type == OBJECT_MOBILEia || @@ -137,7 +184,22 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEii || type == OBJECT_MOBILEis) { - modelManager->AddModelReference("lem1i.mod", false, rank, m_object->GetTeam()); + if (!m_object->GetTrainer()) + modelManager->AddModelReference("lem1i.mod", false, rank, m_object->GetTeam()); + else + { + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(28, rank); + m_object->SetObjectParent(28, 0); + modelManager->AddModelReference("traineri.mod", false, rank, m_object->GetTeam()); + + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(29, rank); + m_object->SetObjectParent(29, 0); + modelManager->AddModelReference("trainera.mod", false, rank, m_object->GetTeam()); + } } else if (type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || @@ -156,18 +218,34 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, } else if (type == OBJECT_MOBILEwt) { + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(28, rank); + m_object->SetObjectParent(28, 0); modelManager->AddModelReference("trainerw.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEft) { + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(28, rank); + m_object->SetObjectParent(28, 0); modelManager->AddModelReference("trainerf.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEtt) { + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(28, rank); + m_object->SetObjectParent(28, 0); modelManager->AddModelReference("trainert.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEit) { + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(28, rank); + m_object->SetObjectParent(28, 0); modelManager->AddModelReference("traineri.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEdr) @@ -435,7 +513,8 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts) // caterpillars? + type == OBJECT_MOBILEts || + type == OBJECT_MOBILEtt) // caterpillars? { // Creates the right caterpillar. rank = m_engine->CreateObject(); @@ -443,7 +522,10 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); modelManager->AddModelCopy("lem2t.mod", false, rank, m_object->GetTeam()); - m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.0f)); + if (m_object->GetTrainer() || type == OBJECT_MOBILEtt) + m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.8f)); + else + m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.0f)); // Creates the left caterpillar. rank = m_engine->CreateObject(); @@ -451,7 +533,10 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); modelManager->AddModelCopy("lem3t.mod", false, rank, m_object->GetTeam()); - m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); + if (m_object->GetTrainer() || type == OBJECT_MOBILEtt) + m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.8f)); + else + m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); } if (type == OBJECT_MOBILErt || @@ -552,7 +637,8 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEis || - type == OBJECT_MOBILEii) // insect legs? + type == OBJECT_MOBILEii || + type == OBJECT_MOBILEit) // insect legs? { float table[] = { @@ -895,6 +981,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts || + type == OBJECT_MOBILEtt || type == OBJECT_MOBILEsa) { m_object->CreateShadowCircle(5.0f, 1.0f); @@ -1034,7 +1121,8 @@ void CMotionVehicle::CreatePhysics(ObjectType type) type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts ) // caterpillars? + type == OBJECT_MOBILEts || + type == OBJECT_MOBILEtt ) // caterpillars? { character->wheelFront = 4.0f; character->wheelBack = 4.0f; @@ -1064,7 +1152,8 @@ void CMotionVehicle::CreatePhysics(ObjectType type) type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || - type == OBJECT_MOBILEis ) // legs? + type == OBJECT_MOBILEis || + type == OBJECT_MOBILEit) // legs? { character->wheelFront = 4.0f; character->wheelBack = 4.0f; @@ -1441,6 +1530,7 @@ bool CMotionVehicle::EventFrame(const Event &event) type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts || + type == OBJECT_MOBILEtt || type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || @@ -1471,7 +1561,8 @@ bool CMotionVehicle::EventFrame(const Event &event) if ( type == OBJECT_MOBILEta || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts ) + type == OBJECT_MOBILEts || + type == OBJECT_MOBILEtt ) { limit[0] = 8.0f*Math::PI/180.0f; limit[1] = -12.0f*Math::PI/180.0f; @@ -1569,7 +1660,8 @@ bool CMotionVehicle::EventFrame(const Event &event) type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || - type == OBJECT_MOBILEis ) // legs? + type == OBJECT_MOBILEis || + type == OBJECT_MOBILEit ) // legs? { EventFrameInsect(event); } diff --git a/src/object/object_type.h b/src/object/object_type.h index 6d1b7039..f3acfc2e 100644 --- a/src/object/object_type.h +++ b/src/object/object_type.h @@ -101,10 +101,10 @@ enum ObjectType OBJECT_TREE3 = 93, //!< Tree3 OBJECT_TREE4 = 94, //!< Tree4 OBJECT_TREE5 = 95, //!< Tree5 - OBJECT_MOBILEwt = 100, //!< PracticeBot - OBJECT_MOBILEtt = 101, //!< track-trainer (unused) - OBJECT_MOBILEft = 102, //!< fly-trainer (unused) - OBJECT_MOBILEit = 103, //!< insect-trainer (unused) + OBJECT_MOBILEwt = 100, //!< WheeledTrainer (PracticeBot) + OBJECT_MOBILEtt = 101, //!< TrackedTrainer + OBJECT_MOBILEft = 102, //!< WingedTrainer + OBJECT_MOBILEit = 103, //!< LeggedTrainer OBJECT_MOBILEwa = 110, //!< WheeledGrabber OBJECT_MOBILEta = 111, //!< TrackedGrabber OBJECT_MOBILEfa = 112, //!< WingedGrabber @@ -133,6 +133,7 @@ enum ObjectType OBJECT_MOBILEtb = 221, //!< TrackedBuilder OBJECT_MOBILEfb = 222, //!< WingedBuilder OBJECT_MOBILEib = 223, //!< LeggedBuilder + OBJECT_MOBILEpr = 224, //!< PracticeBot (alias) OBJECT_WAYPOINT = 250, //!< WayPoint OBJECT_FLAGb = 260, //!< BlueFlag OBJECT_FLAGr = 261, //!< RedFlag diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index 685c9bd8..99b471e1 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -682,7 +682,7 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEfs || // WingedSniffer m_type == OBJECT_MOBILEfc || // WingedShooter m_type == OBJECT_MOBILEfi || // WingedOrgaShooter - m_type == OBJECT_MOBILEft || // winged PracticeBot (unused) + m_type == OBJECT_MOBILEft || // WingedTrainer m_type == OBJECT_HUMAN || // Me m_type == OBJECT_TECH || // Tech m_type == OBJECT_CONTROLLER) @@ -2922,16 +2922,6 @@ void COldObject::UpdateSelectParticle() dim[0].x = 1.5f; dim[1].x = 1.5f; } - else if ( m_type == OBJECT_MOBILEwt || - m_type == OBJECT_MOBILEtt || - m_type == OBJECT_MOBILEft || - m_type == OBJECT_MOBILEit ) // trainer ? - { - pos[0] = Math::Vector(4.2f, 2.5f, 1.2f); - pos[1] = Math::Vector(4.2f, 2.5f, -1.2f); - dim[0].x = 1.5f; - dim[1].x = 1.5f; - } else if ( m_type == OBJECT_MOBILEsa ) // submarine? { pos[0] = Math::Vector(3.6f, 4.0f, 2.0f); @@ -2947,6 +2937,17 @@ void COldObject::UpdateSelectParticle() pos[0] = Math::Vector(4.9f, 3.5f, 2.5f); pos[1] = Math::Vector(4.9f, 3.5f, -2.5f); } + else if ( m_type == OBJECT_MOBILEwt || + m_type == OBJECT_MOBILEtt || + m_type == OBJECT_MOBILEft || + m_type == OBJECT_MOBILEit || + GetTrainer()) // trainer ? + { + pos[0] = Math::Vector(4.2f, 2.5f, 1.2f); + pos[1] = Math::Vector(4.2f, 2.5f, -1.2f); + dim[0].x = 1.5f; + dim[1].x = 1.5f; + } else { pos[0] = Math::Vector(4.2f, 2.5f, 1.5f); @@ -2954,48 +2955,49 @@ void COldObject::UpdateSelectParticle() } // Red back lens - if ( m_type == OBJECT_MOBILEfa || - m_type == OBJECT_MOBILEfb || - m_type == OBJECT_MOBILEfc || - m_type == OBJECT_MOBILEfi || - m_type == OBJECT_MOBILEfs || - m_type == OBJECT_MOBILEft ) // flying? + if ( m_type == OBJECT_MOBILEwt || + m_type == OBJECT_MOBILEtt || + m_type == OBJECT_MOBILEft || + m_type == OBJECT_MOBILEit || + GetTrainer()) // trainer? + { + pos[2] = Math::Vector(-4.0f, 2.5f, 2.2f); + pos[3] = Math::Vector(-4.0f, 2.5f, -2.2f); + } + else if ( m_type == OBJECT_MOBILEfa || + m_type == OBJECT_MOBILEfb || + m_type == OBJECT_MOBILEfc || + m_type == OBJECT_MOBILEfi || + m_type == OBJECT_MOBILEfs ) // flying? { pos[2] = Math::Vector(-4.0f, 3.1f, 4.5f); pos[3] = Math::Vector(-4.0f, 3.1f, -4.5f); dim[2].x = 0.6f; dim[3].x = 0.6f; } - if ( m_type == OBJECT_MOBILEwa || - m_type == OBJECT_MOBILEwb || - m_type == OBJECT_MOBILEwc || - m_type == OBJECT_MOBILEwi || - m_type == OBJECT_MOBILEws ) // wheels? + else if ( m_type == OBJECT_MOBILEwa || + m_type == OBJECT_MOBILEwb || + m_type == OBJECT_MOBILEwc || + m_type == OBJECT_MOBILEwi || + m_type == OBJECT_MOBILEws ) // wheels? { pos[2] = Math::Vector(-4.5f, 2.7f, 2.8f); pos[3] = Math::Vector(-4.5f, 2.7f, -2.8f); } - if ( m_type == OBJECT_MOBILEwt ) // wheels? - { - pos[2] = Math::Vector(-4.0f, 2.5f, 2.2f); - pos[3] = Math::Vector(-4.0f, 2.5f, -2.2f); - } - if ( m_type == OBJECT_MOBILEia || - m_type == OBJECT_MOBILEib || - m_type == OBJECT_MOBILEic || - m_type == OBJECT_MOBILEii || - m_type == OBJECT_MOBILEis || - m_type == OBJECT_MOBILEit ) // legs? + else if ( m_type == OBJECT_MOBILEia || + m_type == OBJECT_MOBILEib || + m_type == OBJECT_MOBILEic || + m_type == OBJECT_MOBILEii || + m_type == OBJECT_MOBILEis ) // legs? { pos[2] = Math::Vector(-4.5f, 2.7f, 2.8f); pos[3] = Math::Vector(-4.5f, 2.7f, -2.8f); } - if ( m_type == OBJECT_MOBILEta || - m_type == OBJECT_MOBILEtb || - m_type == OBJECT_MOBILEtc || - m_type == OBJECT_MOBILEti || - m_type == OBJECT_MOBILEts || - m_type == OBJECT_MOBILEtt ) // caterpillars? + else if ( m_type == OBJECT_MOBILEta || + m_type == OBJECT_MOBILEtb || + m_type == OBJECT_MOBILEtc || + m_type == OBJECT_MOBILEti || + m_type == OBJECT_MOBILEts ) // caterpillars? { pos[2] = Math::Vector(-3.6f, 4.2f, 3.0f); pos[3] = Math::Vector(-3.6f, 4.2f, -3.0f); diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index 65293510..b7aa80ba 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -991,7 +991,8 @@ void CPhysics::MotorUpdate(float aTime, float rTime) type == OBJECT_MOBILEib || type == OBJECT_MOBILEis || type == OBJECT_MOBILEic || - type == OBJECT_MOBILEii ) factor = 0.5f; + type == OBJECT_MOBILEii || + type == OBJECT_MOBILEit ) factor = 0.5f; energy = power->GetEnergy(); energy -= fabs(motorSpeed.x)*rTime*factor*0.005f; @@ -1848,7 +1849,8 @@ void CPhysics::SoundMotorFull(float rTime, ObjectType type) type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || - type == OBJECT_MOBILEis ) + type == OBJECT_MOBILEis || + type == OBJECT_MOBILEit ) { if ( m_soundChannel == -1 ) { @@ -1893,7 +1895,8 @@ void CPhysics::SoundMotorFull(float rTime, ObjectType type) else if ( type == OBJECT_MOBILEta || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts ) + type == OBJECT_MOBILEts || + type == OBJECT_MOBILEtt ) { sound = SOUND_MOTORt; amplitude = 1.0f; @@ -1964,7 +1967,8 @@ void CPhysics::SoundMotorSlow(float rTime, ObjectType type) type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || - type == OBJECT_MOBILEis ) + type == OBJECT_MOBILEis || + type == OBJECT_MOBILEit ) { if ( m_soundChannel != -1 ) // engine is running? { @@ -1992,7 +1996,8 @@ void CPhysics::SoundMotorSlow(float rTime, ObjectType type) type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts ) + type == OBJECT_MOBILEts || + type == OBJECT_MOBILEtt ) { sound = SOUND_MOTORt; amplitude = 0.7f; @@ -2087,7 +2092,8 @@ void CPhysics::SoundMotorStop(float rTime, ObjectType type) type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || - type == OBJECT_MOBILEis ) + type == OBJECT_MOBILEis || + type == OBJECT_MOBILEit ) { if ( m_soundChannel != -1 ) // engine is running? { @@ -3041,7 +3047,8 @@ void CPhysics::MotorParticle(float aTime, float rTime) type == OBJECT_MOBILEib || type == OBJECT_MOBILEic || type == OBJECT_MOBILEii || - type == OBJECT_MOBILEis || // legs? + type == OBJECT_MOBILEis || + type == OBJECT_MOBILEit || // legs? type == OBJECT_MOBILEdr || type == OBJECT_MOTHER || type == OBJECT_ANT || @@ -3147,7 +3154,8 @@ void CPhysics::MotorParticle(float aTime, float rTime) type == OBJECT_MOBILEtb || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts ) // caterpillars? + type == OBJECT_MOBILEts || + type == OBJECT_MOBILEtt ) // caterpillars? { if ( aTime-m_lastSlideParticle >= m_engine->ParticleAdapt(0.05f) ) { diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index 2153b017..71ca67d1 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -82,7 +82,10 @@ const char* GetObjectName(ObjectType type) if ( type == OBJECT_MARKKEYb ) return "KeyBSpot"; if ( type == OBJECT_MARKKEYc ) return "KeyCSpot"; if ( type == OBJECT_MARKKEYd ) return "KeyDSpot"; - if ( type == OBJECT_MOBILEwt ) return "PracticeBot"; + if ( type == OBJECT_MOBILEwt ) return "WheeledTrainer"; + if ( type == OBJECT_MOBILEtt ) return "TrackedTrainer"; + if ( type == OBJECT_MOBILEft ) return "WingedTrainer"; + if ( type == OBJECT_MOBILEit ) return "LeggedTrainer"; if ( type == OBJECT_MOBILEwa ) return "WheeledGrabber"; if ( type == OBJECT_MOBILEta ) return "TrackedGrabber"; if ( type == OBJECT_MOBILEfa ) return "WingedGrabber"; @@ -110,6 +113,7 @@ const char* GetObjectName(ObjectType type) if ( type == OBJECT_MOBILEsa ) return "Subber"; if ( type == OBJECT_MOBILEtg ) return "TargetBot"; if ( type == OBJECT_MOBILEdr ) return "Scribbler"; + if ( type == OBJECT_MOBILEpr ) return "PracticeBot"; if ( type == OBJECT_HUMAN ) return "Me"; if ( type == OBJECT_TECH ) return "Tech"; if ( type == OBJECT_MOTHER ) return "AlienQueen"; @@ -210,6 +214,9 @@ std::string GetHelpFilename(ObjectType type) if ( type == OBJECT_MOBILErs ) helpfile = "object/botshld"; if ( type == OBJECT_MOBILEsa ) helpfile = "object/botsub"; if ( type == OBJECT_MOBILEwt ) helpfile = "object/bottr"; + if ( type == OBJECT_MOBILEtt ) helpfile = "object/bottr"; + if ( type == OBJECT_MOBILEft ) helpfile = "object/bottr"; + if ( type == OBJECT_MOBILEit ) helpfile = "object/bottr"; if ( type == OBJECT_MOBILEtg ) helpfile = "object/bottarg"; if ( type == OBJECT_MOBILEdr ) helpfile = "object/botdraw"; if ( type == OBJECT_APOLLO2 ) helpfile = "object/lrv"; diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index 4696ee10..2650df83 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -984,16 +984,30 @@ bool runRadar(CBotVar* var, std::function, float, f { while ( array != nullptr ) { + if (array->GetValInt() == OBJECT_MOBILEpr) + { + type_v.push_back(OBJECT_MOBILEwt); + type_v.push_back(OBJECT_MOBILEtt); + type_v.push_back(OBJECT_MOBILEft); + type_v.push_back(OBJECT_MOBILEit); + } type_v.push_back(static_cast(array->GetValInt())); array = array->GetNext(); } } else { - if (type != OBJECT_NULL) + if (type != OBJECT_NULL && type != OBJECT_MOBILEpr) { type_v.push_back(static_cast(type)); } + else if (type == OBJECT_MOBILEpr) + { + type_v.push_back(OBJECT_MOBILEwt); + type_v.push_back(OBJECT_MOBILEtt); + type_v.push_back(OBJECT_MOBILEft); + type_v.push_back(OBJECT_MOBILEit); + } } return code(type_v, angle, focus, minDist, maxDist, sens < 0, filter); From 0fddd79501d28161f896c7c027b1c6707f5e43e5 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 21 Dec 2017 14:44:43 +0100 Subject: [PATCH 19/44] Add PracticeBot alias detection in search() and detect() --- src/script/scriptfunc.cpp | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index 2650df83..e73b583d 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -809,16 +809,30 @@ bool runSearch(CBotVar* var, Math::Vector pos, int& exception, std::functionGetValInt() == OBJECT_MOBILEpr) + { + type_v.push_back(OBJECT_MOBILEwt); + type_v.push_back(OBJECT_MOBILEtt); + type_v.push_back(OBJECT_MOBILEft); + type_v.push_back(OBJECT_MOBILEit); + } type_v.push_back(static_cast(array->GetValInt())); array = array->GetNext(); } } else { - if (type != OBJECT_NULL) + if (type != OBJECT_NULL && type != OBJECT_MOBILEpr) { type_v.push_back(static_cast(type)); } + else if (type == OBJECT_MOBILEpr) + { + type_v.push_back(OBJECT_MOBILEwt); + type_v.push_back(OBJECT_MOBILEtt); + type_v.push_back(OBJECT_MOBILEft); + type_v.push_back(OBJECT_MOBILEit); + } } return code(type_v, pos, minDist, maxDist, sens < 0, filter); @@ -1169,16 +1183,30 @@ bool CScriptFunctions::rDetect(CBotVar* var, CBotVar* result, int& exception, vo { while ( array != nullptr ) { + if (array->GetValInt() == OBJECT_MOBILEpr) + { + type_v.push_back(OBJECT_MOBILEwt); + type_v.push_back(OBJECT_MOBILEtt); + type_v.push_back(OBJECT_MOBILEft); + type_v.push_back(OBJECT_MOBILEit); + } type_v.push_back(static_cast(array->GetValInt())); array = array->GetNext(); } } else { - if (type != OBJECT_NULL) + if (type != OBJECT_NULL && type != OBJECT_MOBILEpr) { type_v.push_back(static_cast(type)); } + else if (type == OBJECT_MOBILEpr) + { + type_v.push_back(OBJECT_MOBILEwt); + type_v.push_back(OBJECT_MOBILEtt); + type_v.push_back(OBJECT_MOBILEft); + type_v.push_back(OBJECT_MOBILEit); + } } pBest = CObjectManager::GetInstancePointer()->Radar(pThis, type_v, 0.0f, 45.0f*Math::PI/180.0f, 0.0f, 20.0f, false, FILTER_NONE, true); From a15b3e4dd4b5d3b6d2eb2c5618bdfe8892e53224 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 22 Dec 2017 16:51:25 +0100 Subject: [PATCH 20/44] Add Trainer icons --- src/ui/controls/map.cpp | 9 ++++++--- src/ui/mainshort.cpp | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ui/controls/map.cpp b/src/ui/controls/map.cpp index d372f2c4..dbee562f 100644 --- a/src/ui/controls/map.cpp +++ b/src/ui/controls/map.cpp @@ -876,10 +876,10 @@ void CMap::DrawObjectIcon(Math::Point pos, Math::Point dim, MapColor color, case OBJECT_MOBILErr: icon = 20; break; case OBJECT_MOBILErs: icon = 29; break; case OBJECT_MOBILEsa: icon = 21; break; - case OBJECT_MOBILEft: icon = 30; break; - case OBJECT_MOBILEtt: icon = 30; break; + case OBJECT_MOBILEft: icon = 6; break; + case OBJECT_MOBILEtt: icon = 5; break; case OBJECT_MOBILEwt: icon = 30; break; - case OBJECT_MOBILEit: icon = 30; break; + case OBJECT_MOBILEit: icon = 7; break; case OBJECT_MOBILEtg: icon = 45; break; case OBJECT_MOBILEdr: icon = 48; break; case OBJECT_APOLLO2: icon = 49; break; @@ -900,6 +900,9 @@ void CMap::DrawObjectIcon(Math::Point pos, Math::Point dim, MapColor color, case OBJECT_MOBILEtb: case OBJECT_MOBILEwb: case OBJECT_MOBILEib: + case OBJECT_MOBILEft: + case OBJECT_MOBILEtt: + case OBJECT_MOBILEit: m_engine->SetTexture("textures/interface/button4.png"); break; default: ; // button3.png } diff --git a/src/ui/mainshort.cpp b/src/ui/mainshort.cpp index b9617bcf..8766d1af 100644 --- a/src/ui/mainshort.cpp +++ b/src/ui/mainshort.cpp @@ -234,10 +234,10 @@ int CMainShort::GetShortcutIcon(ObjectType type) case OBJECT_MOBILErr: icon = 20; break; case OBJECT_MOBILErs: icon = 29; break; case OBJECT_MOBILEsa: icon = 21; break; - case OBJECT_MOBILEft: icon = 30; break; - case OBJECT_MOBILEtt: icon = 30; break; + case OBJECT_MOBILEft: icon = 6; break; + case OBJECT_MOBILEtt: icon = 5; break; case OBJECT_MOBILEwt: icon = 30; break; - case OBJECT_MOBILEit: icon = 30; break; + case OBJECT_MOBILEit: icon = 7; break; case OBJECT_MOBILEdr: icon = 48; break; case OBJECT_APOLLO2: icon = 49; break; default: return -1; @@ -250,6 +250,9 @@ int CMainShort::GetShortcutIcon(ObjectType type) case OBJECT_MOBILEtb: case OBJECT_MOBILEwb: case OBJECT_MOBILEib: + case OBJECT_MOBILEft: + case OBJECT_MOBILEtt: + case OBJECT_MOBILEit: return 192+icon; default: return 128+icon; From bd0c6d434478187f88b1b6d2ff864e51dd60fba3 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 22 Dec 2017 17:02:37 +0100 Subject: [PATCH 21/44] Add PracticeBot helpfile --- src/script/cbottoken.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index 71ca67d1..685001ab 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -219,6 +219,7 @@ std::string GetHelpFilename(ObjectType type) if ( type == OBJECT_MOBILEit ) helpfile = "object/bottr"; if ( type == OBJECT_MOBILEtg ) helpfile = "object/bottarg"; if ( type == OBJECT_MOBILEdr ) helpfile = "object/botdraw"; + if ( type == OBJECT_MOBILEpr ) helpfile = "object/bottr"; if ( type == OBJECT_APOLLO2 ) helpfile = "object/lrv"; if ( type == OBJECT_HUMAN ) helpfile = "object/human"; if ( type == OBJECT_MOTHER ) helpfile = "object/mother"; From f51f457023086a5f9b188d40d0d1e98c071cadea Mon Sep 17 00:00:00 2001 From: tomangelo2 Date: Sat, 10 Feb 2018 20:58:14 +0100 Subject: [PATCH 22/44] Narrowed TrackedTrainer tracks TrackedTrainers now have same width as other bots --- src/object/motion/motionvehicle.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index be89509a..16f166e8 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -413,7 +413,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetPartPosition(2, Math::Vector(0.0f, 2.5f, 0.0f)); m_object->SetPartRotationZ(2, 0.0f); } - + if (type == OBJECT_MOBILEfb || type == OBJECT_MOBILEtb || type == OBJECT_MOBILEwb || @@ -523,7 +523,10 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectParent(6, 0); modelManager->AddModelCopy("lem2t.mod", false, rank, m_object->GetTeam()); if (m_object->GetTrainer() || type == OBJECT_MOBILEtt) - m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.8f)); + { + m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.6f)); + m_object->SetPartScaleZ(6, 0.7f); + } else m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.0f)); @@ -534,7 +537,10 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectParent(7, 0); modelManager->AddModelCopy("lem3t.mod", false, rank, m_object->GetTeam()); if (m_object->GetTrainer() || type == OBJECT_MOBILEtt) - m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.8f)); + { + m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.6f)); + m_object->SetPartScaleZ(7, 0.7f); + } else m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); } From 5e606336ca2a2c09081beb99f7422ce00be1a4fc Mon Sep 17 00:00:00 2001 From: tomangelo2 Date: Mon, 12 Feb 2018 15:11:14 +0100 Subject: [PATCH 23/44] Fixed TrackedTrainer tracks allignement --- src/object/motion/motionvehicle.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index 16f166e8..c8f159d4 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -524,8 +524,8 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, modelManager->AddModelCopy("lem2t.mod", false, rank, m_object->GetTeam()); if (m_object->GetTrainer() || type == OBJECT_MOBILEtt) { - m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.6f)); - m_object->SetPartScaleZ(6, 0.7f); + m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.55f)); + m_object->SetPartScaleZ(6, 0.725f); } else m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.0f)); @@ -538,8 +538,8 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, modelManager->AddModelCopy("lem3t.mod", false, rank, m_object->GetTeam()); if (m_object->GetTrainer() || type == OBJECT_MOBILEtt) { - m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.6f)); - m_object->SetPartScaleZ(7, 0.7f); + m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.55f)); + m_object->SetPartScaleZ(7, 0.725f); } else m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); From d0e29d48752995b35c71681d360d8175a870eb22 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 12 Jul 2018 19:55:31 +0200 Subject: [PATCH 24/44] Add trainer=1 BotFactory --- src/object/auto/autofactory.cpp | 133 +++++++++++++------------- src/object/subclass/base_building.cpp | 1 + 2 files changed, 69 insertions(+), 65 deletions(-) diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp index 1aa2d999..fa91ff88 100644 --- a/src/object/auto/autofactory.cpp +++ b/src/object/auto/autofactory.cpp @@ -661,6 +661,7 @@ bool CAutoFactory::CreateVehicle() params.angle = angle; params.type = m_type; params.team = m_object->GetTeam(); + params.trainer = m_object->GetTrainer(); CObject* vehicle = CObjectManager::GetInstancePointer()->CreateObject(params); vehicle->SetLock(true); // not usable @@ -719,84 +720,86 @@ bool CAutoFactory::CreateInterface(bool bSelect) pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0)); if ( pw == nullptr ) return false; - + dim.x = 33.0f/640.0f; dim.y = 33.0f/480.0f; ox = 3.0f/640.0f; oy = 3.0f/480.0f; sx = 33.0f/640.0f; sy = 33.0f/480.0f; + if( !m_object->GetTrainer() ) + { + pos.x = 0.0f; + pos.y = oy+sy*2.6f; + ddim.x = 138.0f/640.0f; + ddim.y = 258.0f/480.0f; + pw->CreateGroup(pos, ddim, 6, EVENT_WINDOW3); - pos.x = 0.0f; - pos.y = oy+sy*2.6f; - ddim.x = 138.0f/640.0f; - ddim.y = 258.0f/480.0f; - pw->CreateGroup(pos, ddim, 6, EVENT_WINDOW3); + pos.x = ox+sx*0.0f; + pos.y = oy+sy*9.3f; + pw->CreateButton(pos, dim, 128+9, EVENT_OBJECT_FACTORYwa); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+10, EVENT_OBJECT_FACTORYta); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+11, EVENT_OBJECT_FACTORYfa); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+22, EVENT_OBJECT_FACTORYia); - pos.x = ox+sx*0.0f; - pos.y = oy+sy*9.3f; - pw->CreateButton(pos, dim, 128+9, EVENT_OBJECT_FACTORYwa); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+10, EVENT_OBJECT_FACTORYta); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+11, EVENT_OBJECT_FACTORYfa); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+22, EVENT_OBJECT_FACTORYia); + pos.x = ox+sx*0.0f; + pos.y = oy+sy*8.2f; + pw->CreateButton(pos, dim, 128+12, EVENT_OBJECT_FACTORYws); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+13, EVENT_OBJECT_FACTORYts); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+14, EVENT_OBJECT_FACTORYfs); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+24, EVENT_OBJECT_FACTORYis); - pos.x = ox+sx*0.0f; - pos.y = oy+sy*8.2f; - pw->CreateButton(pos, dim, 128+12, EVENT_OBJECT_FACTORYws); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+13, EVENT_OBJECT_FACTORYts); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+14, EVENT_OBJECT_FACTORYfs); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+24, EVENT_OBJECT_FACTORYis); + pos.x = ox+sx*0.0f; + pos.y = oy+sy*7.1f; + pw->CreateButton(pos, dim, 128+15, EVENT_OBJECT_FACTORYwc); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+16, EVENT_OBJECT_FACTORYtc); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+17, EVENT_OBJECT_FACTORYfc); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+23, EVENT_OBJECT_FACTORYic); - pos.x = ox+sx*0.0f; - pos.y = oy+sy*7.1f; - pw->CreateButton(pos, dim, 128+15, EVENT_OBJECT_FACTORYwc); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+16, EVENT_OBJECT_FACTORYtc); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+17, EVENT_OBJECT_FACTORYfc); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+23, EVENT_OBJECT_FACTORYic); - - pos.x = ox+sx*0.0f; - pos.y = oy+sy*6.0f; - pw->CreateButton(pos, dim, 128+25, EVENT_OBJECT_FACTORYwi); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+26, EVENT_OBJECT_FACTORYti); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+27, EVENT_OBJECT_FACTORYfi); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+28, EVENT_OBJECT_FACTORYii); + pos.x = ox+sx*0.0f; + pos.y = oy+sy*6.0f; + pw->CreateButton(pos, dim, 128+25, EVENT_OBJECT_FACTORYwi); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+26, EVENT_OBJECT_FACTORYti); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+27, EVENT_OBJECT_FACTORYfi); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+28, EVENT_OBJECT_FACTORYii); - pos.x = ox+sx*0.0f; - pos.y = oy+sy*4.9f; - pw->CreateButton(pos, dim, 192+0, EVENT_OBJECT_FACTORYwb); - pos.x += dim.x; - pw->CreateButton(pos, dim, 192+1, EVENT_OBJECT_FACTORYtb); - pos.x += dim.x; - pw->CreateButton(pos, dim, 192+2, EVENT_OBJECT_FACTORYfb); - pos.x += dim.x; - pw->CreateButton(pos, dim, 192+3, EVENT_OBJECT_FACTORYib); + pos.x = ox+sx*0.0f; + pos.y = oy+sy*4.9f; + pw->CreateButton(pos, dim, 192+0, EVENT_OBJECT_FACTORYwb); + pos.x += dim.x; + pw->CreateButton(pos, dim, 192+1, EVENT_OBJECT_FACTORYtb); + pos.x += dim.x; + pw->CreateButton(pos, dim, 192+2, EVENT_OBJECT_FACTORYfb); + pos.x += dim.x; + pw->CreateButton(pos, dim, 192+3, EVENT_OBJECT_FACTORYib); - pos.x = ox+sx*0.0f; - pos.y = oy+sy*3.8f; - pw->CreateButton(pos, dim, 128+18, EVENT_OBJECT_FACTORYrt); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+19, EVENT_OBJECT_FACTORYrc); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+20, EVENT_OBJECT_FACTORYrr); - pos.x += dim.x; - pw->CreateButton(pos, dim, 128+29, EVENT_OBJECT_FACTORYrs); - - pos.x = ox+sx*0.0f; - pos.y = oy+sy*2.7f; - pw->CreateButton(pos, dim, 128+21, EVENT_OBJECT_FACTORYsa); + pos.x = ox+sx*0.0f; + pos.y = oy+sy*3.8f; + pw->CreateButton(pos, dim, 128+18, EVENT_OBJECT_FACTORYrt); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+19, EVENT_OBJECT_FACTORYrc); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+20, EVENT_OBJECT_FACTORYrr); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+29, EVENT_OBJECT_FACTORYrs); + pos.x = ox+sx*0.0f; + pos.y = oy+sy*2.7f; + pw->CreateButton(pos, dim, 128+21, EVENT_OBJECT_FACTORYsa); + } + pos.x = ox+sx*0.0f; pos.y = oy+sy*0; ddim.x = 66.0f/640.0f; diff --git a/src/object/subclass/base_building.cpp b/src/object/subclass/base_building.cpp index b45cf91a..ef676b37 100644 --- a/src/object/subclass/base_building.cpp +++ b/src/object/subclass/base_building.cpp @@ -64,6 +64,7 @@ std::unique_ptr CBaseBuilding::Create( { auto obj = MakeUnique(params.id, params.type); + obj->SetTrainer(params.trainer); obj->SetTeam(params.team); float height = params.height; From 02eb4623b9dd73c250594e38068b03e7e061571d Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 12 Jul 2018 20:17:09 +0200 Subject: [PATCH 25/44] Add trainer=1 ResearchCenter --- src/object/auto/autoresearch.cpp | 58 +++++++++++++++++--------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/src/object/auto/autoresearch.cpp b/src/object/auto/autoresearch.cpp index 06d5db8f..e06635fa 100644 --- a/src/object/auto/autoresearch.cpp +++ b/src/object/auto/autoresearch.cpp @@ -341,43 +341,45 @@ bool CAutoResearch::CreateInterface(bool bSelect) oy = 3.0f/480.0f; sx = 33.0f/640.0f; sy = 33.0f/480.0f; + if( !m_object->GetTrainer() ) + { + pos.x = ox+sx*3.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+0, EVENT_OBJECT_RTANK); - pos.x = ox+sx*3.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+0, EVENT_OBJECT_RTANK); + pos.x = ox+sx*4.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+1, EVENT_OBJECT_RFLY); - pos.x = ox+sx*4.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+1, EVENT_OBJECT_RFLY); + pos.x = ox+sx*5.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+3, EVENT_OBJECT_RCANON); - pos.x = ox+sx*5.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+3, EVENT_OBJECT_RCANON); + pos.x = ox+sx*6.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+4, EVENT_OBJECT_RTOWER); - pos.x = ox+sx*6.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+4, EVENT_OBJECT_RTOWER); + pos.x = ox+sx*7.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+7, EVENT_OBJECT_RATOMIC); - pos.x = ox+sx*7.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+7, EVENT_OBJECT_RATOMIC); + pos.x = ox+sx*8.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+2, EVENT_OBJECT_RTHUMP); - pos.x = ox+sx*8.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+2, EVENT_OBJECT_RTHUMP); + pos.x = ox+sx*9.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+6, EVENT_OBJECT_RSHIELD); - pos.x = ox+sx*9.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+6, EVENT_OBJECT_RSHIELD); + pos.x = ox+sx*10.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+5, EVENT_OBJECT_RPHAZER); - pos.x = ox+sx*10.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+5, EVENT_OBJECT_RPHAZER); + pos.x = ox+sx*11.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 192+4, EVENT_OBJECT_RBUILDER); + } - pos.x = ox+sx*11.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 192+4, EVENT_OBJECT_RBUILDER); - pos.x = ox+sx*14.5f; pos.y = oy+sy*0; ddim.x = 14.0f/640.0f; From 146581e44c7e2ddab56a577e1dde4bc5bd180d87 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 12 Jul 2018 20:35:50 +0200 Subject: [PATCH 26/44] Add trainer=1 AutoLab --- src/object/auto/autolabo.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/object/auto/autolabo.cpp b/src/object/auto/autolabo.cpp index 1cbcbc24..f39ba837 100644 --- a/src/object/auto/autolabo.cpp +++ b/src/object/auto/autolabo.cpp @@ -482,14 +482,16 @@ bool CAutoLabo::CreateInterface(bool bSelect) oy = 3.0f/480.0f; sx = 33.0f/640.0f; sy = 33.0f/480.0f; + if( !m_object->GetTrainer() ) + { + pos.x = ox+sx*7.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+45, EVENT_OBJECT_RiPAW); - pos.x = ox+sx*7.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+45, EVENT_OBJECT_RiPAW); - - pos.x = ox+sx*8.0f; - pos.y = oy+sy*0.5f; - pw->CreateButton(pos, dim, 64+46, EVENT_OBJECT_RiGUN); + pos.x = ox+sx*8.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 64+46, EVENT_OBJECT_RiGUN); + } pos.x = ox+sx*0.0f; pos.y = oy+sy*0; From 5b2f3111b6afd7d16a2ceb2f6d71147389e9a3af Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 12 Jul 2018 20:54:58 +0200 Subject: [PATCH 27/44] Add trainer=1 SpaceShip --- src/object/auto/autobase.cpp | 38 +++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/object/auto/autobase.cpp b/src/object/auto/autobase.cpp index 3200c612..e772190d 100644 --- a/src/object/auto/autobase.cpp +++ b/src/object/auto/autobase.cpp @@ -1187,25 +1187,27 @@ bool CAutoBase::CreateInterface(bool bSelect) oy = 3.0f/480.0f; sx = 33.0f/640.0f; sy = 33.0f/480.0f; - - ddim.x = dim.x*1.5f; - ddim.y = dim.y*1.5f; - -//? pos.x = ox+sx*7.25f; -//? pos.y = oy+sy*0.25f; -//? pw->CreateButton(pos, ddim, 63, EVENT_OBJECT_BHELP); - - pos.x = ox+sx*8.00f; - pos.y = oy+sy*0.25f; - pw->CreateButton(pos, ddim, 28, EVENT_OBJECT_BTAKEOFF); - - if ( m_lightning->GetStatus(sleep, delay, magnetic, progress) ) + if( !m_object->GetTrainer() ) { - pos.x = ox+sx*10.2f; - pos.y = oy+sy*0.5f; - ddim.x = dim.x*1.0f; - ddim.y = dim.y*1.0f; - pw->CreateButton(pos, ddim, 41, EVENT_OBJECT_LIMIT); + ddim.x = dim.x*1.5f; + ddim.y = dim.y*1.5f; + + //? pos.x = ox+sx*7.25f; + //? pos.y = oy+sy*0.25f; + //? pw->CreateButton(pos, ddim, 63, EVENT_OBJECT_BHELP); + + pos.x = ox+sx*8.00f; + pos.y = oy+sy*0.25f; + pw->CreateButton(pos, ddim, 28, EVENT_OBJECT_BTAKEOFF); + + if ( m_lightning->GetStatus(sleep, delay, magnetic, progress) ) + { + pos.x = ox+sx*10.2f; + pos.y = oy+sy*0.5f; + ddim.x = dim.x*1.0f; + ddim.y = dim.y*1.0f; + pw->CreateButton(pos, ddim, 41, EVENT_OBJECT_LIMIT); + } } pos.x = ox+sx*0.0f; From 5b2b632de35faf8d6edb42995e0f16b9b1c4036b Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 13 Jul 2018 00:03:20 +0200 Subject: [PATCH 28/44] Add TargetBot research; make it fully operational --- src/common/event.cpp | 6 ++++-- src/common/event.h | 2 ++ src/common/restext.cpp | 4 +++- src/level/parser/parserparam.cpp | 1 + src/level/research_type.h | 3 ++- src/level/robotmain.cpp | 1 + src/object/auto/autofactory.cpp | 4 ++++ src/object/auto/autolabo.cpp | 29 ++++++++++++++++++++-------- src/object/auto/autopowerstation.cpp | 1 + src/object/motion/motiontoto.cpp | 1 + src/object/old_object.cpp | 5 +++-- src/script/scriptfunc.cpp | 1 + src/ui/mainshort.cpp | 1 + 13 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/common/event.cpp b/src/common/event.cpp index b79e8b2d..00d9ea44 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -432,6 +432,7 @@ void InitializeEventTypeTexts() EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrr] = "EVENT_OBJECT_FACTORYrr"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrs] = "EVENT_OBJECT_FACTORYrs"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYsa] = "EVENT_OBJECT_FACTORYsa"; + EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYtg] = "EVENT_OBJECT_FACTORYtg"; EVENT_TYPE_TEXT[EVENT_OBJECT_SEARCH] = "EVENT_OBJECT_SEARCH"; EVENT_TYPE_TEXT[EVENT_OBJECT_TERRAFORM] = "EVENT_OBJECT_TERRAFORM"; EVENT_TYPE_TEXT[EVENT_OBJECT_FIRE] = "EVENT_OBJECT_FIRE"; @@ -527,8 +528,9 @@ void InitializeEventTypeTexts() EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_START] = "EVENT_CODE_BATTLE_START"; EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_SPECTATOR] = "EVENT_CODE_BATTLE_SPECTATOR"; - EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER"; - EVENT_TYPE_TEXT[EVENT_OBJECT_BUILD] = "EVENT_OBJECT_BUILD"; + EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER"; + EVENT_TYPE_TEXT[EVENT_OBJECT_BUILD] = "EVENT_OBJECT_BUILD"; + EVENT_TYPE_TEXT[EVENT_OBJECT_RTARGET] = "EVENT_OBJECT_RTARGET"; } std::string ParseEventType(EventType eventType) diff --git a/src/common/event.h b/src/common/event.h index 4cb2a75e..f592b327 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -496,6 +496,7 @@ enum EventType EVENT_OBJECT_FACTORYtb = 1102, EVENT_OBJECT_FACTORYfb = 1103, EVENT_OBJECT_FACTORYib = 1104, + EVENT_OBJECT_FACTORYtg = 1105, EVENT_OBJECT_SEARCH = 1200, EVENT_OBJECT_TERRAFORM = 1201, EVENT_OBJECT_FIRE = 1202, @@ -600,6 +601,7 @@ enum EventType EVENT_OBJECT_RBUILDER = 2300, EVENT_OBJECT_BUILD = 2301, + EVENT_OBJECT_RTARGET = 2302, //! Maximum value of standard events EVENT_STD_MAX, diff --git a/src/common/restext.cpp b/src/common/restext.cpp index ab43b630..bd1e20b5 100644 --- a/src/common/restext.cpp +++ b/src/common/restext.cpp @@ -366,6 +366,7 @@ void InitializeRestext() stringsEvent[EVENT_OBJECT_FACTORYrr] = TR("Build a recycler"); stringsEvent[EVENT_OBJECT_FACTORYrs] = TR("Build a shielder"); stringsEvent[EVENT_OBJECT_FACTORYsa] = TR("Build a subber"); + stringsEvent[EVENT_OBJECT_FACTORYtg] = TR("Build a target bot"); stringsEvent[EVENT_OBJECT_RTANK] = TR("Run research program for tracked bots"); stringsEvent[EVENT_OBJECT_RFLY] = TR("Run research program for winged bots"); stringsEvent[EVENT_OBJECT_RTHUMP] = TR("Run research program for thumper"); @@ -377,6 +378,7 @@ void InitializeRestext() stringsEvent[EVENT_OBJECT_RiPAW] = TR("Run research program for legged bots"); stringsEvent[EVENT_OBJECT_RiGUN] = TR("Run research program for orga shooter"); stringsEvent[EVENT_OBJECT_RBUILDER] = TR("Run research program for builder"); + stringsEvent[EVENT_OBJECT_RTARGET] = TR("Run research program for target bot"); stringsEvent[EVENT_OBJECT_RESET] = TR("Return to start"); stringsEvent[EVENT_OBJECT_SEARCH] = TR("Sniff (\\key action;)"); stringsEvent[EVENT_OBJECT_TERRAFORM] = TR("Thump (\\key action;)"); @@ -626,7 +628,7 @@ void InitializeRestext() stringsErr[ERR_BASE_DLOCK] = TR("Doors blocked by a robot or another object"); stringsErr[ERR_BASE_DHUMAN] = TR("You must get on the spaceship to take off"); stringsErr[ERR_LABO_NULL] = TR("Nothing to analyze"); - stringsErr[ERR_LABO_BAD] = TR("Analyzes only organic matter"); + stringsErr[ERR_LABO_BAD] = TR("Inappropriate sample"); stringsErr[ERR_LABO_ALREADY] = TR("Analysis already performed"); stringsErr[ERR_NUCLEAR_EMPTY] = TR("No uranium to transform"); stringsErr[ERR_NUCLEAR_BAD] = TR("Transforms only uranium"); diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp index 9a671976..f2663343 100644 --- a/src/level/parser/parserparam.cpp +++ b/src/level/parser/parserparam.cpp @@ -916,6 +916,7 @@ int CLevelParserParam::ToResearchFlag(std::string value) if (value == "SUBBER" ) return RESEARCH_SUBM; if (value == "SNIFFER" ) return RESEARCH_SNIFFER; if (value == "BUILDER" ) return RESEARCH_BUILDER; + if (value == "TARGET" ) return RESEARCH_TARGET; return Cast(value, "researchflag"); } diff --git a/src/level/research_type.h b/src/level/research_type.h index 01256ff5..c2393173 100644 --- a/src/level/research_type.h +++ b/src/level/research_type.h @@ -39,5 +39,6 @@ enum ResearchType RESEARCH_RECYCLER = (1<<10), //! < recycler RESEARCH_SUBM = (1<<11), //! < submarine RESEARCH_SNIFFER = (1<<12), //! < sniffer - RESEARCH_BUILDER = (1<<13) //! < builder + RESEARCH_BUILDER = (1<<13), //! < builder + RESEARCH_TARGET = (1<<14) //! < target bot }; diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index ca287087..610a5705 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -5741,6 +5741,7 @@ Error CRobotMain::CanFactoryError(ObjectType type, int team) if (type == OBJECT_MOBILErr && !IsResearchDone(RESEARCH_RECYCLER, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILErs && !IsResearchDone(RESEARCH_SHIELD, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILEsa && !IsResearchDone(RESEARCH_SUBM, team)) return ERR_BUILD_DISABLED; // Can be only researched manually in Scene file + if (type == OBJECT_MOBILEtg && !IsResearchDone(RESEARCH_TARGET, team)) return ERR_BUILD_RESEARCH; return ERR_OK; } diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp index fa91ff88..0ccb8cc2 100644 --- a/src/object/auto/autofactory.cpp +++ b/src/object/auto/autofactory.cpp @@ -195,6 +195,7 @@ ObjectType ObjectTypeFromFactoryButton(EventType eventType) if ( eventType == EVENT_OBJECT_FACTORYrr ) return OBJECT_MOBILErr; if ( eventType == EVENT_OBJECT_FACTORYrs ) return OBJECT_MOBILErs; if ( eventType == EVENT_OBJECT_FACTORYsa ) return OBJECT_MOBILEsa; + if ( eventType == EVENT_OBJECT_FACTORYtg ) return OBJECT_MOBILEtg; return OBJECT_NULL; } @@ -798,6 +799,8 @@ bool CAutoFactory::CreateInterface(bool bSelect) pos.x = ox+sx*0.0f; pos.y = oy+sy*2.7f; pw->CreateButton(pos, dim, 128+21, EVENT_OBJECT_FACTORYsa); + pos.x += dim.x; + pw->CreateButton(pos, dim, 128+45, EVENT_OBJECT_FACTORYtg); } pos.x = ox+sx*0.0f; @@ -847,6 +850,7 @@ void CAutoFactory::UpdateInterface() UpdateButton(pw, EVENT_OBJECT_FACTORYrr, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYrs, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYsa, m_bBusy); + UpdateButton(pw, EVENT_OBJECT_FACTORYtg, m_bBusy); } // Updates the status of one interface button. diff --git a/src/object/auto/autolabo.cpp b/src/object/auto/autolabo.cpp index f39ba837..383484cd 100644 --- a/src/object/auto/autolabo.cpp +++ b/src/object/auto/autolabo.cpp @@ -136,7 +136,11 @@ Error CAutoLabo::StartAction(int param) { return ERR_LABO_NULL; } - if ( power->GetType() != OBJECT_BULLET ) + if ( m_research != RESEARCH_TARGET && power->GetType() != OBJECT_BULLET ) + { + return ERR_LABO_BAD; + } + if ( m_research == RESEARCH_TARGET && power->GetType() != OBJECT_TNT ) { return ERR_LABO_BAD; } @@ -177,6 +181,7 @@ bool CAutoLabo::EventProcess(const Event &event) if ( m_object->GetSelect() ) // center selected? { Error err = ERR_UNKNOWN; + if ( event.type == EVENT_OBJECT_RTARGET ) err = StartAction(RESEARCH_TARGET); if ( event.type == EVENT_OBJECT_RiPAW ) err = StartAction(RESEARCH_iPAW); if ( event.type == EVENT_OBJECT_RiGUN ) err = StartAction(RESEARCH_iGUN); @@ -455,7 +460,7 @@ Error CAutoLabo::GetError() CObject* obj = m_object->GetPower(); if (obj == nullptr) return ERR_LABO_NULL; ObjectType type = obj->GetType(); - if ( type != OBJECT_BULLET ) return ERR_LABO_BAD; + if ( type != OBJECT_BULLET && type != OBJECT_TNT ) return ERR_LABO_BAD; return ERR_OK; } @@ -484,6 +489,10 @@ bool CAutoLabo::CreateInterface(bool bSelect) sy = 33.0f/480.0f; if( !m_object->GetTrainer() ) { + pos.x = ox+sx*6.0f; + pos.y = oy+sy*0.5f; + pw->CreateButton(pos, dim, 192+8, EVENT_OBJECT_RTARGET); + pos.x = ox+sx*7.0f; pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+45, EVENT_OBJECT_RiPAW); @@ -517,14 +526,17 @@ void CAutoLabo::UpdateInterface() pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0)); if ( pw == nullptr ) return; - DeadInterface(pw, EVENT_OBJECT_RiPAW, m_main->IsResearchEnabled(RESEARCH_iPAW)); - DeadInterface(pw, EVENT_OBJECT_RiGUN, m_main->IsResearchEnabled(RESEARCH_iGUN)); + DeadInterface(pw, EVENT_OBJECT_RTARGET, m_main->IsResearchEnabled(RESEARCH_TARGET)); + DeadInterface(pw, EVENT_OBJECT_RiPAW, m_main->IsResearchEnabled(RESEARCH_iPAW)); + DeadInterface(pw, EVENT_OBJECT_RiGUN, m_main->IsResearchEnabled(RESEARCH_iGUN)); + OkayButton(pw, EVENT_OBJECT_RTARGET); OkayButton(pw, EVENT_OBJECT_RiPAW); OkayButton(pw, EVENT_OBJECT_RiGUN); - VisibleInterface(pw, EVENT_OBJECT_RiPAW, !m_bBusy); - VisibleInterface(pw, EVENT_OBJECT_RiGUN, !m_bBusy); + VisibleInterface(pw, EVENT_OBJECT_RTARGET, !m_bBusy); + VisibleInterface(pw, EVENT_OBJECT_RiPAW, !m_bBusy); + VisibleInterface(pw, EVENT_OBJECT_RiGUN, !m_bBusy); } // Indicates the research conducted for a button. @@ -544,8 +556,9 @@ void CAutoLabo::OkayButton(Ui::CWindow *pw, EventType event) bool CAutoLabo::TestResearch(EventType event) { - if ( event == EVENT_OBJECT_RiPAW ) return m_main->IsResearchDone(RESEARCH_iPAW, m_object->GetTeam()); - if ( event == EVENT_OBJECT_RiGUN ) return m_main->IsResearchDone(RESEARCH_iGUN, m_object->GetTeam()); + if ( event == EVENT_OBJECT_RTARGET ) return m_main->IsResearchDone(RESEARCH_TARGET, m_object->GetTeam()); + if ( event == EVENT_OBJECT_RiPAW ) return m_main->IsResearchDone(RESEARCH_iPAW, m_object->GetTeam()); + if ( event == EVENT_OBJECT_RiGUN ) return m_main->IsResearchDone(RESEARCH_iGUN, m_object->GetTeam()); return m_main; } diff --git a/src/object/auto/autopowerstation.cpp b/src/object/auto/autopowerstation.cpp index 3b245d7e..2671bdc7 100644 --- a/src/object/auto/autopowerstation.cpp +++ b/src/object/auto/autopowerstation.cpp @@ -278,6 +278,7 @@ CObject* CAutoPowerStation::SearchVehicle() type != OBJECT_MOBILEtt && type != OBJECT_MOBILEwt && type != OBJECT_MOBILEit && + type != OBJECT_MOBILEtg && type != OBJECT_MOBILEdr ) continue; Math::Vector oPos = obj->GetPosition(); diff --git a/src/object/motion/motiontoto.cpp b/src/object/motion/motiontoto.cpp index 8c22c2ea..7dbed435 100644 --- a/src/object/motion/motiontoto.cpp +++ b/src/object/motion/motiontoto.cpp @@ -360,6 +360,7 @@ bool CMotionToto::EventFrame(const Event &event) type == OBJECT_MOBILEtt || type == OBJECT_MOBILEft || type == OBJECT_MOBILEit || + type == OBJECT_MOBILEtg || type == OBJECT_MOBILEdr ) ) // vehicle? { m_clownTime += event.rTime; diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index 99b471e1..d9a681a4 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -890,6 +890,7 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEit || + m_type == OBJECT_MOBILEtg || m_type == OBJECT_MOBILEdr || m_type == OBJECT_APOLLO2 || m_type == OBJECT_BASE || @@ -3254,6 +3255,7 @@ float COldObject::GetLightningHitProbability() m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEit || + m_type == OBJECT_MOBILEtg || m_type == OBJECT_MOBILEdr ) // robot? { return 0.5f; @@ -3267,8 +3269,7 @@ bool COldObject::IsSelectableByDefault(ObjectType type) type == OBJECT_ANT || type == OBJECT_SPIDER || type == OBJECT_BEE || - type == OBJECT_WORM || - type == OBJECT_MOBILEtg ) + type == OBJECT_WORM ) { return false; } diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index e73b583d..9d00f031 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -3311,6 +3311,7 @@ void CScriptFunctions::Init() CBotProgram::DefineNum("ResearchSubber", RESEARCH_SUBM); CBotProgram::DefineNum("ResearchSniffer", RESEARCH_SNIFFER); CBotProgram::DefineNum("ResearchBuilder", RESEARCH_BUILDER); + CBotProgram::DefineNum("ResearchTarget", RESEARCH_TARGET); CBotProgram::DefineNum("PolskiPortalColobota", 1337); diff --git a/src/ui/mainshort.cpp b/src/ui/mainshort.cpp index 8766d1af..cf9101b1 100644 --- a/src/ui/mainshort.cpp +++ b/src/ui/mainshort.cpp @@ -238,6 +238,7 @@ int CMainShort::GetShortcutIcon(ObjectType type) case OBJECT_MOBILEtt: icon = 5; break; case OBJECT_MOBILEwt: icon = 30; break; case OBJECT_MOBILEit: icon = 7; break; + case OBJECT_MOBILEtg: icon = 45; break; case OBJECT_MOBILEdr: icon = 48; break; case OBJECT_APOLLO2: icon = 49; break; default: return -1; From 3f04654cd372ca688b9f79ef128e7e4eee896f36 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 13 Jul 2018 13:16:30 +0200 Subject: [PATCH 29/44] Make ruins destroyable --- src/object/old_object.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index d9a681a4..b64fb279 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -356,7 +356,12 @@ bool COldObject::DamageObject(DamageType type, float force, CObject* killer) } else if ( Implements(ObjectInterfaceType::Fragile) ) { - if ( m_type == OBJECT_BOMB && type != DamageType::Explosive ) return false; // Mine can't be destroyed by shooting + if ((m_type == OBJECT_BOMB || + m_type == OBJECT_RUINfactory || + m_type == OBJECT_RUINdoor || + m_type == OBJECT_RUINsupport || + m_type == OBJECT_RUINradar || + m_type == OBJECT_RUINconvert ) && type != DamageType::Explosive ) return false; // Mines and ruins can't be destroyed by shooting if ( m_type == OBJECT_URANIUM ) return false; // UraniumOre is not destroyable (see #777) DestroyObject(DestructionType::Explosion, killer); @@ -491,7 +496,12 @@ void COldObject::DestroyObject(DestructionType type, CObject* killer) m_type == OBJECT_SAFE || m_type == OBJECT_HUSTON || m_type == OBJECT_START || - m_type == OBJECT_END ) // building? + m_type == OBJECT_END || + m_type == OBJECT_RUINfactory || + m_type == OBJECT_RUINdoor || + m_type == OBJECT_RUINsupport || + m_type == OBJECT_RUINradar || + m_type == OBJECT_RUINconvert ) // building? { pyroType = Gfx::PT_FRAGT; } @@ -826,6 +836,17 @@ void COldObject::SetType(ObjectType type) m_implementedInterfaces[static_cast(ObjectInterfaceType::Fragile)] = false; m_implementedInterfaces[static_cast(ObjectInterfaceType::Shielded)] = false; } + else if (m_type == OBJECT_RUINfactory || + m_type == OBJECT_RUINdoor || + m_type == OBJECT_RUINsupport || + m_type == OBJECT_RUINradar || + m_type == OBJECT_RUINconvert ) + { + m_implementedInterfaces[static_cast(ObjectInterfaceType::Damageable)] = true; + m_implementedInterfaces[static_cast(ObjectInterfaceType::Destroyable)] = true; + m_implementedInterfaces[static_cast(ObjectInterfaceType::Fragile)] = true; + m_implementedInterfaces[static_cast(ObjectInterfaceType::Shielded)] = false; + } else { m_implementedInterfaces[static_cast(ObjectInterfaceType::Damageable)] = false; From 723c5527831bcd7af75cbd4a449ca926c5bc9020 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Sun, 23 Dec 2018 07:04:06 +0100 Subject: [PATCH 30/44] Add Heavy and Amphibious trainer bots --- src/common/restext.cpp | 2 + src/graphics/engine/pyro.cpp | 8 +++- src/graphics/engine/water.cpp | 2 + src/level/parser/parserparam.cpp | 17 +++++--- src/level/robotmain.cpp | 7 +++- src/object/auto/autofactory.cpp | 2 + src/object/auto/automush.cpp | 2 + src/object/auto/autonuclearplant.cpp | 2 + src/object/auto/autopowerplant.cpp | 2 + src/object/auto/autopowerstation.cpp | 2 + src/object/drive_type.cpp | 7 +++- src/object/drive_type.h | 3 +- src/object/motion/motiontoto.cpp | 2 + src/object/motion/motionvehicle.cpp | 58 ++++++++++++++++++++-------- src/object/object_factory.cpp | 2 + src/object/object_type.h | 2 + src/object/old_object.cpp | 28 +++++++++++--- src/object/task/taskgoto.cpp | 13 +++++-- src/object/task/tasktake.cpp | 2 + src/physics/physics.cpp | 30 +++++++++----- src/script/cbottoken.cpp | 4 ++ src/script/scriptfunc.cpp | 12 ++++++ src/ui/controls/map.cpp | 6 +++ src/ui/mainshort.cpp | 4 ++ src/ui/object_interface.cpp | 4 ++ 25 files changed, 177 insertions(+), 46 deletions(-) diff --git a/src/common/restext.cpp b/src/common/restext.cpp index bd1e20b5..96288452 100644 --- a/src/common/restext.cpp +++ b/src/common/restext.cpp @@ -521,6 +521,8 @@ void InitializeRestext() stringsObject[OBJECT_MOBILEtt] = TR("Practice bot"); stringsObject[OBJECT_MOBILEwt] = TR("Practice bot"); stringsObject[OBJECT_MOBILEit] = TR("Practice bot"); + stringsObject[OBJECT_MOBILErp] = TR("Practice bot"); + stringsObject[OBJECT_MOBILEst] = TR("Practice bot"); stringsObject[OBJECT_MOBILEfa] = TR("Winged grabber"); stringsObject[OBJECT_MOBILEta] = TR("Tracked grabber"); stringsObject[OBJECT_MOBILEwa] = TR("Wheeled grabber"); diff --git a/src/graphics/engine/pyro.cpp b/src/graphics/engine/pyro.cpp index 5a0b9e2c..39a53a75 100644 --- a/src/graphics/engine/pyro.cpp +++ b/src/graphics/engine/pyro.cpp @@ -1285,6 +1285,8 @@ void CPyro::DisplayError(PyroType type, CObject* obj) oType == OBJECT_MOBILEtt || oType == OBJECT_MOBILEft || oType == OBJECT_MOBILEit || + oType == OBJECT_MOBILErp || + oType == OBJECT_MOBILEst || oType == OBJECT_MOBILEdr ) { err = ERR_DELETEMOBILE; @@ -2053,11 +2055,14 @@ void CPyro::BurnStart() m_burnType == OBJECT_MOBILEtc || m_burnType == OBJECT_MOBILEti || m_burnType == OBJECT_MOBILEts || + m_burnType == OBJECT_MOBILEtt || m_burnType == OBJECT_MOBILErt || m_burnType == OBJECT_MOBILErc || m_burnType == OBJECT_MOBILErr || m_burnType == OBJECT_MOBILErs || + m_burnType == OBJECT_MOBILErp || m_burnType == OBJECT_MOBILEsa || + m_burnType == OBJECT_MOBILEst || m_burnType == OBJECT_MOBILEdr ) // caterpillars? { pos.x = 0.0f; @@ -2102,7 +2107,8 @@ void CPyro::BurnStart() m_burnType == OBJECT_MOBILEib || m_burnType == OBJECT_MOBILEic || m_burnType == OBJECT_MOBILEii || - m_burnType == OBJECT_MOBILEis ) // legs? + m_burnType == OBJECT_MOBILEis || + m_burnType == OBJECT_MOBILEit ) // legs? { for (int i = 0; i < 6; i++) { diff --git a/src/graphics/engine/water.cpp b/src/graphics/engine/water.cpp index 55f7465d..6baa7396 100644 --- a/src/graphics/engine/water.cpp +++ b/src/graphics/engine/water.cpp @@ -592,6 +592,8 @@ float CWater::GetLevel(CObject* object) type == OBJECT_MOBILEtt || type == OBJECT_MOBILEwt || type == OBJECT_MOBILEit || + type == OBJECT_MOBILErp || + type == OBJECT_MOBILEst || type == OBJECT_MOBILEdr ) { return m_level-2.0f; diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp index f2663343..3a9c60cd 100644 --- a/src/level/parser/parserparam.cpp +++ b/src/level/parser/parserparam.cpp @@ -343,6 +343,8 @@ ObjectType CLevelParserParam::ToObjectType(std::string value) if (value == "TrackedTrainer" ) return OBJECT_MOBILEtt; if (value == "WheeledTrainer" ) return OBJECT_MOBILEwt; if (value == "LeggedTrainer" ) return OBJECT_MOBILEit; + if (value == "HeavyTrainer" ) return OBJECT_MOBILErp; + if (value == "AmphibiousTrainer" ) return OBJECT_MOBILEst; if (value == "WingedGrabber" ) return OBJECT_MOBILEfa; if (value == "TrackedGrabber" ) return OBJECT_MOBILEta; if (value == "WheeledGrabber" ) return OBJECT_MOBILEwa; @@ -551,6 +553,8 @@ const std::string CLevelParserParam::FromObjectType(ObjectType value) if (value == OBJECT_MOBILEft ) return "WingedTrainer"; if (value == OBJECT_MOBILEtt ) return "TrackedTrainer"; if (value == OBJECT_MOBILEit ) return "LeggedTrainer"; + if (value == OBJECT_MOBILErp ) return "HeavyTrainer"; + if (value == OBJECT_MOBILEst ) return "AmphibiousTrainer"; if (value == OBJECT_MOBILEfa ) return "WingedGrabber"; if (value == OBJECT_MOBILEta ) return "TrackedGrabber"; if (value == OBJECT_MOBILEwa ) return "WheeledGrabber"; @@ -764,12 +768,13 @@ ObjectType CLevelParserParam::AsObjectType(ObjectType def) DriveType CLevelParserParam::ToDriveType(std::string value) { - if (value == "Wheeled") return DriveType::Wheeled; - if (value == "Tracked") return DriveType::Tracked; - if (value == "Winged" ) return DriveType::Winged; - if (value == "Legged" ) return DriveType::Legged; - if (value == "BigTracked") return DriveType::BigTracked; - if (value == "Other" ) return DriveType::Other; + if (value == "Wheeled" ) return DriveType::Wheeled; + if (value == "Tracked" ) return DriveType::Tracked; + if (value == "Winged" ) return DriveType::Winged; + if (value == "Legged" ) return DriveType::Legged; + if (value == "Heavy" ) return DriveType::Heavy; + if (value == "Amphibious") return DriveType::Amphibious; + if (value == "Other" ) return DriveType::Other; return static_cast(Cast(value, "drive")); } diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index 610a5705..b2ec5a9d 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -1839,6 +1839,8 @@ void CRobotMain::SelectOneObject(CObject* obj, bool displayError) type == OBJECT_MOBILEtt || type == OBJECT_MOBILEwt || type == OBJECT_MOBILEit || + type == OBJECT_MOBILErp || + type == OBJECT_MOBILEst || type == OBJECT_MOBILEdr || type == OBJECT_APOLLO2 ) { @@ -2225,6 +2227,8 @@ void CRobotMain::ChangeCamera() oType != OBJECT_MOBILEtt && oType != OBJECT_MOBILEwt && oType != OBJECT_MOBILEit && + oType != OBJECT_MOBILErp && + oType != OBJECT_MOBILEst && oType != OBJECT_MOBILEdr && oType != OBJECT_APOLLO2 ) return; @@ -5734,13 +5738,14 @@ Error CRobotMain::CanFactoryError(ObjectType type, int team) if (drive == DriveType::Tracked && !IsResearchDone(RESEARCH_TANK, team)) return ERR_BUILD_RESEARCH; if (drive == DriveType::Winged && !IsResearchDone(RESEARCH_FLY, team)) return ERR_BUILD_RESEARCH; if (drive == DriveType::Legged && !IsResearchDone(RESEARCH_iPAW, team)) return ERR_BUILD_RESEARCH; - if (drive == DriveType::BigTracked && !IsResearchDone(RESEARCH_TANK, team)) return ERR_BUILD_RESEARCH; // NOTE: Subber is not BigTracked! It currently counts as Other + if (drive == DriveType::Heavy && !IsResearchDone(RESEARCH_TANK, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILErt && !IsResearchDone(RESEARCH_THUMP, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILErc && !IsResearchDone(RESEARCH_PHAZER, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILErr && !IsResearchDone(RESEARCH_RECYCLER, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILErs && !IsResearchDone(RESEARCH_SHIELD, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILEsa && !IsResearchDone(RESEARCH_SUBM, team)) return ERR_BUILD_DISABLED; // Can be only researched manually in Scene file + if (type == OBJECT_MOBILEst && !IsResearchDone(RESEARCH_SUBM, team)) return ERR_BUILD_DISABLED; if (type == OBJECT_MOBILEtg && !IsResearchDone(RESEARCH_TARGET, team)) return ERR_BUILD_RESEARCH; return ERR_OK; diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp index 0ccb8cc2..386bf3e2 100644 --- a/src/object/auto/autofactory.cpp +++ b/src/object/auto/autofactory.cpp @@ -618,6 +618,8 @@ bool CAutoFactory::NearestVehicle() type != OBJECT_MOBILEtt && type != OBJECT_MOBILEwt && type != OBJECT_MOBILEit && + type != OBJECT_MOBILErp && + type != OBJECT_MOBILEst && type != OBJECT_MOBILEdr && type != OBJECT_MOTHER && type != OBJECT_ANT && diff --git a/src/object/auto/automush.cpp b/src/object/auto/automush.cpp index a267322b..1a7dfc96 100644 --- a/src/object/auto/automush.cpp +++ b/src/object/auto/automush.cpp @@ -262,6 +262,8 @@ bool CAutoMush::SearchTarget() type != OBJECT_MOBILEtt && type != OBJECT_MOBILEwt && type != OBJECT_MOBILEit && + type != OBJECT_MOBILErp && + type != OBJECT_MOBILEst && type != OBJECT_MOBILEdr && type != OBJECT_DERRICK && type != OBJECT_STATION && diff --git a/src/object/auto/autonuclearplant.cpp b/src/object/auto/autonuclearplant.cpp index 7601b6cb..1c4b60c7 100644 --- a/src/object/auto/autonuclearplant.cpp +++ b/src/object/auto/autonuclearplant.cpp @@ -371,6 +371,8 @@ bool CAutoNuclearPlant::SearchVehicle() type != OBJECT_MOBILEtt && type != OBJECT_MOBILEwt && type != OBJECT_MOBILEit && + type != OBJECT_MOBILErp && + type != OBJECT_MOBILEst && type != OBJECT_MOBILEdr && type != OBJECT_MOTHER && type != OBJECT_ANT && diff --git a/src/object/auto/autopowerplant.cpp b/src/object/auto/autopowerplant.cpp index 50504db1..f29d8cd4 100644 --- a/src/object/auto/autopowerplant.cpp +++ b/src/object/auto/autopowerplant.cpp @@ -434,6 +434,8 @@ bool CAutoPowerPlant::SearchVehicle() type != OBJECT_MOBILEtt && type != OBJECT_MOBILEwt && type != OBJECT_MOBILEit && + type != OBJECT_MOBILErp && + type != OBJECT_MOBILEst && type != OBJECT_MOBILEdr && type != OBJECT_MOTHER && type != OBJECT_ANT && diff --git a/src/object/auto/autopowerstation.cpp b/src/object/auto/autopowerstation.cpp index 2671bdc7..1fa8d611 100644 --- a/src/object/auto/autopowerstation.cpp +++ b/src/object/auto/autopowerstation.cpp @@ -278,6 +278,8 @@ CObject* CAutoPowerStation::SearchVehicle() type != OBJECT_MOBILEtt && type != OBJECT_MOBILEwt && type != OBJECT_MOBILEit && + type != OBJECT_MOBILErp && + type != OBJECT_MOBILEst && type != OBJECT_MOBILEtg && type != OBJECT_MOBILEdr ) continue; diff --git a/src/object/drive_type.cpp b/src/object/drive_type.cpp index 412e37bc..78d5e37b 100644 --- a/src/object/drive_type.cpp +++ b/src/object/drive_type.cpp @@ -55,12 +55,15 @@ DriveType GetDriveFromObject(ObjectType type) case OBJECT_MOBILEib: return DriveType::Legged; + case OBJECT_MOBILErp: case OBJECT_MOBILErt: case OBJECT_MOBILErc: case OBJECT_MOBILErr: case OBJECT_MOBILErs: - // NOTE: Subber is not BigTracked! - return DriveType::BigTracked; + return DriveType::Heavy; + + case OBJECT_MOBILEsa: + return DriveType::Amphibious; default: return DriveType::Other; diff --git a/src/object/drive_type.h b/src/object/drive_type.h index 50265bf0..7802841d 100644 --- a/src/object/drive_type.h +++ b/src/object/drive_type.h @@ -28,7 +28,8 @@ enum class DriveType : unsigned int Tracked, Winged, Legged, - BigTracked, + Heavy, + Amphibious }; DriveType GetDriveFromObject(ObjectType type); diff --git a/src/object/motion/motiontoto.cpp b/src/object/motion/motiontoto.cpp index 7dbed435..2fc955e2 100644 --- a/src/object/motion/motiontoto.cpp +++ b/src/object/motion/motiontoto.cpp @@ -360,6 +360,8 @@ bool CMotionToto::EventFrame(const Event &event) type == OBJECT_MOBILEtt || type == OBJECT_MOBILEft || type == OBJECT_MOBILEit || + type == OBJECT_MOBILErp || + type == OBJECT_MOBILEst || type == OBJECT_MOBILEtg || type == OBJECT_MOBILEdr ) ) // vehicle? { diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index c8f159d4..c96c5ce7 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -100,11 +100,23 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICLE); // this is a moving object m_object->SetObjectRank(0, rank); - if (m_object->GetTrainer() || - type == OBJECT_MOBILEwt || - type == OBJECT_MOBILEtt || - type == OBJECT_MOBILEft || - type == OBJECT_MOBILEit) + if ((m_object->GetTrainer() && type == OBJECT_MOBILEsa) || type == OBJECT_MOBILEst) + { + modelManager->AddModelReference("trainers.mod", false, rank, m_object->GetTeam()); + } + else if ((m_object->GetTrainer() && + ( type == OBJECT_MOBILErt || + type == OBJECT_MOBILErc || + type == OBJECT_MOBILErr || + type == OBJECT_MOBILErs)) || type == OBJECT_MOBILErp) + { + modelManager->AddModelReference("trainerr.mod", false, rank, m_object->GetTeam()); + } + else if (m_object->GetTrainer() || + type == OBJECT_MOBILEwt || + type == OBJECT_MOBILEtt || + type == OBJECT_MOBILEft || + type == OBJECT_MOBILEit) { modelManager->AddModelReference("trainer.mod", false, rank, m_object->GetTeam()); } @@ -201,14 +213,15 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, modelManager->AddModelReference("trainera.mod", false, rank, m_object->GetTeam()); } } - else if (type == OBJECT_MOBILErt || + else if (!m_object->GetTrainer() && + (type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs) + type == OBJECT_MOBILErs)) { modelManager->AddModelReference("roller1.mod", false, rank, m_object->GetTeam()); } - else if (type == OBJECT_MOBILEsa) + else if (type == OBJECT_MOBILEsa && !m_object->GetTrainer()) { modelManager->AddModelReference("subm1.mod", false, rank, m_object->GetTeam()); } @@ -265,12 +278,14 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, if (type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs) + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp) { m_object->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 4.0f, 0.0f), 6.5f, SOUND_BOUMm, 0.45f)); m_object->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 3.0f, 0.0f), 7.0f)); } - else if (type == OBJECT_MOBILEsa) + else if (type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst) { m_object->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 3.0f, 0.0f), 4.5f, SOUND_BOUMm, 0.45f)); m_object->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 3.0f, 0.0f), 6.0f)); @@ -548,7 +563,8 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, if (type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs) // large caterpillars? + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp) // large caterpillars? { // Creates the right caterpillar. rank = m_engine->CreateObject(); @@ -567,7 +583,8 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); } - if (type == OBJECT_MOBILEsa) // underwater caterpillars? + if (type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst) // underwater caterpillars? { // Creates the right caterpillar. rank = m_engine->CreateObject(); @@ -978,7 +995,8 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, if (type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs) + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp) { m_object->CreateShadowCircle(6.0f, 1.0f); } @@ -988,7 +1006,8 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEti || type == OBJECT_MOBILEts || type == OBJECT_MOBILEtt || - type == OBJECT_MOBILEsa) + type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst) { m_object->CreateShadowCircle(5.0f, 1.0f); } @@ -1225,7 +1244,8 @@ void CMotionVehicle::CreatePhysics(ObjectType type) if ( type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) // large caterpillars? + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp) // large caterpillars? { character->wheelFront = 5.0f; character->wheelBack = 5.0f; @@ -1251,7 +1271,8 @@ void CMotionVehicle::CreatePhysics(ObjectType type) m_physics->SetCirMotionY(MO_STOACCEL, 4.0f); } - if ( type == OBJECT_MOBILEsa ) + if ( type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst ) { character->wheelFront = 4.0f; character->wheelBack = 4.0f; @@ -1541,7 +1562,9 @@ bool CMotionVehicle::EventFrame(const Event &event) type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp || type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst || type == OBJECT_MOBILEdr ) // caterpillars? { s = m_physics->GetLinMotionX(MO_MOTSPEED)*0.7f; @@ -1573,7 +1596,8 @@ bool CMotionVehicle::EventFrame(const Event &event) limit[0] = 8.0f*Math::PI/180.0f; limit[1] = -12.0f*Math::PI/180.0f; } - else if ( type == OBJECT_MOBILEsa ) + else if ( type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst ) { limit[0] = 15.0f*Math::PI/180.0f; limit[1] = -15.0f*Math::PI/180.0f; diff --git a/src/object/object_factory.cpp b/src/object/object_factory.cpp index 539256be..6691770d 100644 --- a/src/object/object_factory.cpp +++ b/src/object/object_factory.cpp @@ -309,6 +309,8 @@ CObjectUPtr CObjectFactory::CreateObject(const ObjectCreateParams& params) case OBJECT_MOBILEtt: case OBJECT_MOBILEwt: case OBJECT_MOBILEit: + case OBJECT_MOBILErp: + case OBJECT_MOBILEst: case OBJECT_MOBILEdr: case OBJECT_APOLLO2: case OBJECT_CONTROLLER: diff --git a/src/object/object_type.h b/src/object/object_type.h index f3acfc2e..339cfe0c 100644 --- a/src/object/object_type.h +++ b/src/object/object_type.h @@ -105,6 +105,8 @@ enum ObjectType OBJECT_MOBILEtt = 101, //!< TrackedTrainer OBJECT_MOBILEft = 102, //!< WingedTrainer OBJECT_MOBILEit = 103, //!< LeggedTrainer + OBJECT_MOBILErp = 104, //!< HeavyTrainer + OBJECT_MOBILEst = 105, //!< AmphibiousTrainer OBJECT_MOBILEwa = 110, //!< WheeledGrabber OBJECT_MOBILEta = 111, //!< TrackedGrabber OBJECT_MOBILEfa = 112, //!< WingedGrabber diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index b64fb279..0550b80d 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -742,6 +742,8 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEit || + m_type == OBJECT_MOBILErp || + m_type == OBJECT_MOBILEst || m_type == OBJECT_TOWER || m_type == OBJECT_RESEARCH || m_type == OBJECT_ENERGY || @@ -807,6 +809,8 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEit || + m_type == OBJECT_MOBILErp || + m_type == OBJECT_MOBILEst || m_type == OBJECT_FACTORY || m_type == OBJECT_REPAIR || m_type == OBJECT_DESTROYER|| @@ -911,6 +915,8 @@ void COldObject::SetType(ObjectType type) m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEit || + m_type == OBJECT_MOBILErp || + m_type == OBJECT_MOBILEst || m_type == OBJECT_MOBILEtg || m_type == OBJECT_MOBILEdr || m_type == OBJECT_APOLLO2 || @@ -2312,7 +2318,8 @@ void COldObject::AdjustCamera(Math::Vector &eye, float &dirH, float &dirV, } else if ( m_type == OBJECT_MOBILErt || m_type == OBJECT_MOBILErr || - m_type == OBJECT_MOBILErs ) + m_type == OBJECT_MOBILErs || + m_type == OBJECT_MOBILErp ) { eye.x = -1.1f; // on the cap eye.y = 7.9f; @@ -2354,7 +2361,8 @@ void COldObject::AdjustCamera(Math::Vector &eye, float &dirH, float &dirV, eye.y = 11.0f; eye.z = 0.0f; } - else if ( m_type == OBJECT_MOBILEsa ) + else if ( m_type == OBJECT_MOBILEsa || + m_type == OBJECT_MOBILEst ) { eye.x = 3.0f; eye.y = 4.5f; @@ -2901,6 +2909,8 @@ void COldObject::CreateSelectParticle() m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEit || + m_type == OBJECT_MOBILErp || + m_type == OBJECT_MOBILEst || m_type == OBJECT_MOBILEdr ) // vehicle? { pos = Math::Vector(0.0f, 0.0f, 0.0f); @@ -2937,14 +2947,16 @@ void COldObject::UpdateSelectParticle() if ( m_type == OBJECT_MOBILErt || m_type == OBJECT_MOBILErc || m_type == OBJECT_MOBILErr || - m_type == OBJECT_MOBILErs ) // large caterpillars? + m_type == OBJECT_MOBILErs || + m_type == OBJECT_MOBILErp ) // large caterpillars? { pos[0] = Math::Vector(4.2f, 2.8f, 1.5f); pos[1] = Math::Vector(4.2f, 2.8f, -1.5f); dim[0].x = 1.5f; dim[1].x = 1.5f; } - else if ( m_type == OBJECT_MOBILEsa ) // submarine? + else if ( m_type == OBJECT_MOBILEsa || + m_type == OBJECT_MOBILEst ) // submarine? { pos[0] = Math::Vector(3.6f, 4.0f, 2.0f); pos[1] = Math::Vector(3.6f, 4.0f, -2.0f); @@ -3027,12 +3039,14 @@ void COldObject::UpdateSelectParticle() if ( m_type == OBJECT_MOBILErt || m_type == OBJECT_MOBILErc || m_type == OBJECT_MOBILErr || - m_type == OBJECT_MOBILErs ) // large caterpillars? + m_type == OBJECT_MOBILErs || + m_type == OBJECT_MOBILErp ) // large caterpillars? { pos[2] = Math::Vector(-5.0f, 5.2f, 2.5f); pos[3] = Math::Vector(-5.0f, 5.2f, -2.5f); } - if ( m_type == OBJECT_MOBILEsa ) // submarine? + if ( m_type == OBJECT_MOBILEsa || + m_type == OBJECT_MOBILEst ) // submarine? { pos[2] = Math::Vector(-3.6f, 4.0f, 2.0f); pos[3] = Math::Vector(-3.6f, 4.0f, -2.0f); @@ -3276,6 +3290,8 @@ float COldObject::GetLightningHitProbability() m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEit || + m_type == OBJECT_MOBILErp || + m_type == OBJECT_MOBILEst || m_type == OBJECT_MOBILEtg || m_type == OBJECT_MOBILEdr ) // robot? { diff --git a/src/object/task/taskgoto.cpp b/src/object/task/taskgoto.cpp index 6a6b3afa..c0403712 100644 --- a/src/object/task/taskgoto.cpp +++ b/src/object/task/taskgoto.cpp @@ -582,6 +582,8 @@ CObject* CTaskGoto::WormSearch(Math::Vector &impact) oType != OBJECT_MOBILEtt && oType != OBJECT_MOBILEwt && oType != OBJECT_MOBILEit && + oType != OBJECT_MOBILErp && + oType != OBJECT_MOBILEst && oType != OBJECT_MOBILEdr && oType != OBJECT_DERRICK && oType != OBJECT_STATION && @@ -725,7 +727,8 @@ Error CTaskGoto::Start(Math::Vector goal, float altitude, type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp ) { m_bApprox = true; } @@ -1194,6 +1197,8 @@ bool CTaskGoto::AdjustTarget(CObject* pObj, Math::Vector &pos, float &distance) type == OBJECT_MOBILEtt || type == OBJECT_MOBILEwt || type == OBJECT_MOBILEit || + type == OBJECT_MOBILErp || + type == OBJECT_MOBILEst || type == OBJECT_MOBILEdr ) { assert(pObj->Implements(ObjectInterfaceType::Powered)); @@ -1996,12 +2001,14 @@ void CTaskGoto::BitmapTerrain(int minx, int miny, int maxx, int maxy) if ( type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) // large caterpillars? + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp ) // large caterpillars? { aLimit = 35.0f*Math::PI/180.0f; } - if ( type == OBJECT_MOBILEsa ) // submarine caterpillars? + if ( type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst ) // submarine caterpillars? { aLimit = 35.0f*Math::PI/180.0f; bAcceptWater = true; diff --git a/src/object/task/tasktake.cpp b/src/object/task/tasktake.cpp index 728b3519..c827c7a0 100644 --- a/src/object/task/tasktake.cpp +++ b/src/object/task/tasktake.cpp @@ -380,6 +380,8 @@ CObject* CTaskTake::SearchFriendObject(float &angle, type != OBJECT_MOBILEtt && type != OBJECT_MOBILEwt && type != OBJECT_MOBILEit && + type != OBJECT_MOBILErp && + type != OBJECT_MOBILEst && type != OBJECT_TOWER && type != OBJECT_RESEARCH && type != OBJECT_ENERGY && diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index b7aa80ba..ff79cfdf 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -1828,6 +1828,7 @@ void CPhysics::WaterFrame(float aTime, float rTime) type == OBJECT_MOBILEtt || type == OBJECT_MOBILEwt || type == OBJECT_MOBILEit || + type == OBJECT_MOBILErp || type == OBJECT_MOBILEdr || type == OBJECT_APOLLO2 ) { @@ -1877,7 +1878,8 @@ void CPhysics::SoundMotorFull(float rTime, ObjectType type) return; } - if ( type == OBJECT_MOBILEsa ) + if ( type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst ) { sound = SOUND_MOTORs; amplitude = 0.6f; @@ -1886,7 +1888,8 @@ void CPhysics::SoundMotorFull(float rTime, ObjectType type) else if ( type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp ) { sound = SOUND_MOTORr; amplitude = 1.0f; @@ -1979,7 +1982,8 @@ void CPhysics::SoundMotorSlow(float rTime, ObjectType type) return; } - if ( type == OBJECT_MOBILEsa ) + if ( type == OBJECT_MOBILEsa || + type == OBJECT_MOBILEst ) { sound = SOUND_MOTORs; amplitude = 0.4f; @@ -1987,7 +1991,8 @@ void CPhysics::SoundMotorSlow(float rTime, ObjectType type) else if ( type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp ) { sound = SOUND_MOTORr; amplitude = 0.9f; @@ -2046,7 +2051,8 @@ void CPhysics::SoundMotorSlow(float rTime, ObjectType type) if ( type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp ) { m_soundTimePshhh -= rTime; @@ -2777,7 +2783,9 @@ bool CPhysics::ExploOther(ObjectType iType, oType == OBJECT_MOBILEwt || oType == OBJECT_MOBILEtt || oType == OBJECT_MOBILEft || - oType == OBJECT_MOBILEit ) // vehicle? + oType == OBJECT_MOBILEit || + oType == OBJECT_MOBILErp || + oType == OBJECT_MOBILEst ) // vehicle? { assert(pObj->Implements(ObjectInterfaceType::Damageable)); // TODO: implement "killer"? @@ -2843,6 +2851,8 @@ int CPhysics::ExploHimself(ObjectType iType, ObjectType oType, float force) iType == OBJECT_MOBILEtt || iType == OBJECT_MOBILEft || iType == OBJECT_MOBILEit || + iType == OBJECT_MOBILErp || + iType == OBJECT_MOBILEst || iType == OBJECT_MOBILEdr || iType == OBJECT_APOLLO2 ) // vehicle? { @@ -3182,7 +3192,8 @@ void CPhysics::MotorParticle(float aTime, float rTime) if ( type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) // large caterpillars? + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp ) // large caterpillars? { if ( aTime-m_lastSlideParticle >= m_engine->ParticleAdapt(0.05f) ) { @@ -3456,7 +3467,7 @@ void CPhysics::MotorParticle(float aTime, float rTime) } } - if ( type == OBJECT_MOBILEsa && m_bSwim ) + if ( (type == OBJECT_MOBILEsa || type == OBJECT_MOBILEst) && m_bSwim ) { h = Math::Mod(aTime, 3.0f); if ( h < 1.5f && ( h < 0.5f || h > 0.9f ) ) return; @@ -3490,7 +3501,8 @@ void CPhysics::MotorParticle(float aTime, float rTime) if ( type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) + type == OBJECT_MOBILErs || + type == OBJECT_MOBILErp ) { if ( !m_bMotor ) return; diff --git a/src/script/cbottoken.cpp b/src/script/cbottoken.cpp index 685001ab..098e2b8f 100644 --- a/src/script/cbottoken.cpp +++ b/src/script/cbottoken.cpp @@ -86,6 +86,8 @@ const char* GetObjectName(ObjectType type) if ( type == OBJECT_MOBILEtt ) return "TrackedTrainer"; if ( type == OBJECT_MOBILEft ) return "WingedTrainer"; if ( type == OBJECT_MOBILEit ) return "LeggedTrainer"; + if ( type == OBJECT_MOBILErp ) return "HeavyTrainer"; + if ( type == OBJECT_MOBILEst ) return "AmphibiousTrainer"; if ( type == OBJECT_MOBILEwa ) return "WheeledGrabber"; if ( type == OBJECT_MOBILEta ) return "TrackedGrabber"; if ( type == OBJECT_MOBILEfa ) return "WingedGrabber"; @@ -217,6 +219,8 @@ std::string GetHelpFilename(ObjectType type) if ( type == OBJECT_MOBILEtt ) helpfile = "object/bottr"; if ( type == OBJECT_MOBILEft ) helpfile = "object/bottr"; if ( type == OBJECT_MOBILEit ) helpfile = "object/bottr"; + if ( type == OBJECT_MOBILErp ) helpfile = "object/bottr"; + if ( type == OBJECT_MOBILEst ) helpfile = "object/bottr"; if ( type == OBJECT_MOBILEtg ) helpfile = "object/bottarg"; if ( type == OBJECT_MOBILEdr ) helpfile = "object/botdraw"; if ( type == OBJECT_MOBILEpr ) helpfile = "object/bottr"; diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index 9d00f031..6e8e6425 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -815,6 +815,8 @@ bool runSearch(CBotVar* var, Math::Vector pos, int& exception, std::function(array->GetValInt())); array = array->GetNext(); @@ -832,6 +834,8 @@ bool runSearch(CBotVar* var, Math::Vector pos, int& exception, std::function, float, f type_v.push_back(OBJECT_MOBILEtt); type_v.push_back(OBJECT_MOBILEft); type_v.push_back(OBJECT_MOBILEit); + type_v.push_back(OBJECT_MOBILErp); + type_v.push_back(OBJECT_MOBILEst); } type_v.push_back(static_cast(array->GetValInt())); array = array->GetNext(); @@ -1021,6 +1027,8 @@ bool runRadar(CBotVar* var, std::function, float, f type_v.push_back(OBJECT_MOBILEtt); type_v.push_back(OBJECT_MOBILEft); type_v.push_back(OBJECT_MOBILEit); + type_v.push_back(OBJECT_MOBILErp); + type_v.push_back(OBJECT_MOBILEst); } } @@ -1189,6 +1197,8 @@ bool CScriptFunctions::rDetect(CBotVar* var, CBotVar* result, int& exception, vo type_v.push_back(OBJECT_MOBILEtt); type_v.push_back(OBJECT_MOBILEft); type_v.push_back(OBJECT_MOBILEit); + type_v.push_back(OBJECT_MOBILErp); + type_v.push_back(OBJECT_MOBILEst); } type_v.push_back(static_cast(array->GetValInt())); array = array->GetNext(); @@ -1206,6 +1216,8 @@ bool CScriptFunctions::rDetect(CBotVar* var, CBotVar* result, int& exception, vo type_v.push_back(OBJECT_MOBILEtt); type_v.push_back(OBJECT_MOBILEft); type_v.push_back(OBJECT_MOBILEit); + type_v.push_back(OBJECT_MOBILErp); + type_v.push_back(OBJECT_MOBILEst); } } diff --git a/src/ui/controls/map.cpp b/src/ui/controls/map.cpp index dbee562f..d4a54b63 100644 --- a/src/ui/controls/map.cpp +++ b/src/ui/controls/map.cpp @@ -880,6 +880,8 @@ void CMap::DrawObjectIcon(Math::Point pos, Math::Point dim, MapColor color, case OBJECT_MOBILEtt: icon = 5; break; case OBJECT_MOBILEwt: icon = 30; break; case OBJECT_MOBILEit: icon = 7; break; + case OBJECT_MOBILErp: icon = 9; break; + case OBJECT_MOBILEst: icon = 10; break; case OBJECT_MOBILEtg: icon = 45; break; case OBJECT_MOBILEdr: icon = 48; break; case OBJECT_APOLLO2: icon = 49; break; @@ -903,6 +905,8 @@ void CMap::DrawObjectIcon(Math::Point pos, Math::Point dim, MapColor color, case OBJECT_MOBILEft: case OBJECT_MOBILEtt: case OBJECT_MOBILEit: + case OBJECT_MOBILErp: + case OBJECT_MOBILEst: m_engine->SetTexture("textures/interface/button4.png"); break; default: ; // button3.png } @@ -1277,6 +1281,8 @@ void CMap::UpdateObject(CObject* pObj) type == OBJECT_MOBILEtt || type == OBJECT_MOBILEft || type == OBJECT_MOBILEit || + type == OBJECT_MOBILErp || + type == OBJECT_MOBILEst || type == OBJECT_MOBILEdr || type == OBJECT_APOLLO2 ) // moving vehicle? { diff --git a/src/ui/mainshort.cpp b/src/ui/mainshort.cpp index cf9101b1..4e2c4c7f 100644 --- a/src/ui/mainshort.cpp +++ b/src/ui/mainshort.cpp @@ -238,6 +238,8 @@ int CMainShort::GetShortcutIcon(ObjectType type) case OBJECT_MOBILEtt: icon = 5; break; case OBJECT_MOBILEwt: icon = 30; break; case OBJECT_MOBILEit: icon = 7; break; + case OBJECT_MOBILErp: icon = 9; break; + case OBJECT_MOBILEst: icon = 10; break; case OBJECT_MOBILEtg: icon = 45; break; case OBJECT_MOBILEdr: icon = 48; break; case OBJECT_APOLLO2: icon = 49; break; @@ -254,6 +256,8 @@ int CMainShort::GetShortcutIcon(ObjectType type) case OBJECT_MOBILEft: case OBJECT_MOBILEtt: case OBJECT_MOBILEit: + case OBJECT_MOBILErp: + case OBJECT_MOBILEst: return 192+icon; default: return 128+icon; diff --git a/src/ui/object_interface.cpp b/src/ui/object_interface.cpp index d1105a9b..d75af46e 100644 --- a/src/ui/object_interface.cpp +++ b/src/ui/object_interface.cpp @@ -875,6 +875,8 @@ bool CObjectInterface::CreateInterface(bool bSelect) type == OBJECT_MOBILEtt || type == OBJECT_MOBILEwt || type == OBJECT_MOBILEit || + type == OBJECT_MOBILErp || + type == OBJECT_MOBILEst || type == OBJECT_MOBILEdr || type == OBJECT_MOTHER || type == OBJECT_ANT || @@ -1920,6 +1922,8 @@ void CObjectInterface::UpdateInterface() type == OBJECT_MOBILEtt || type == OBJECT_MOBILEwt || type == OBJECT_MOBILEit || + type == OBJECT_MOBILErp || + type == OBJECT_MOBILEst || type == OBJECT_MOBILEdr || type == OBJECT_MOTHER || type == OBJECT_ANT || From ed8dc04d94bfbe2fef62692484e4e4f37495a335 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 5 Jul 2019 16:03:29 +0200 Subject: [PATCH 31/44] Make TargetBot explode in water --- src/physics/physics.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index ff79cfdf..afbb0db3 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -1829,6 +1829,7 @@ void CPhysics::WaterFrame(float aTime, float rTime) type == OBJECT_MOBILEwt || type == OBJECT_MOBILEit || type == OBJECT_MOBILErp || + type == OBJECT_MOBILEtg || type == OBJECT_MOBILEdr || type == OBJECT_APOLLO2 ) { From 62620a93cd19390419cfc1ba40fa500b34a7ac59 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Wed, 17 Jul 2019 02:57:47 +0200 Subject: [PATCH 32/44] Make Wrecks destroyable; make TargetBot more fragile --- src/object/old_object.cpp | 34 +++++++++++++++++++++++----------- src/physics/physics.cpp | 4 ++-- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index 0550b80d..4804b907 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -356,12 +356,18 @@ bool COldObject::DamageObject(DamageType type, float force, CObject* killer) } else if ( Implements(ObjectInterfaceType::Fragile) ) { - if ((m_type == OBJECT_BOMB || - m_type == OBJECT_RUINfactory || - m_type == OBJECT_RUINdoor || - m_type == OBJECT_RUINsupport || - m_type == OBJECT_RUINradar || - m_type == OBJECT_RUINconvert ) && type != DamageType::Explosive ) return false; // Mines and ruins can't be destroyed by shooting + if ((m_type == OBJECT_BOMB || + m_type == OBJECT_RUINmobilew1 || + m_type == OBJECT_RUINmobilew2 || + m_type == OBJECT_RUINmobilet1 || + m_type == OBJECT_RUINmobilet2 || + m_type == OBJECT_RUINmobiler1 || + m_type == OBJECT_RUINmobiler2 || + m_type == OBJECT_RUINfactory || + m_type == OBJECT_RUINdoor || + m_type == OBJECT_RUINsupport || + m_type == OBJECT_RUINradar || + m_type == OBJECT_RUINconvert ) && type != DamageType::Explosive ) return false; // Mines and ruins can't be destroyed by shooting if ( m_type == OBJECT_URANIUM ) return false; // UraniumOre is not destroyable (see #777) DestroyObject(DestructionType::Explosion, killer); @@ -840,11 +846,17 @@ void COldObject::SetType(ObjectType type) m_implementedInterfaces[static_cast(ObjectInterfaceType::Fragile)] = false; m_implementedInterfaces[static_cast(ObjectInterfaceType::Shielded)] = false; } - else if (m_type == OBJECT_RUINfactory || - m_type == OBJECT_RUINdoor || - m_type == OBJECT_RUINsupport || - m_type == OBJECT_RUINradar || - m_type == OBJECT_RUINconvert ) + else if (m_type == OBJECT_RUINmobilew1 || + m_type == OBJECT_RUINmobilew2 || + m_type == OBJECT_RUINmobilet1 || + m_type == OBJECT_RUINmobilet2 || + m_type == OBJECT_RUINmobiler1 || + m_type == OBJECT_RUINmobiler2 || + m_type == OBJECT_RUINfactory || + m_type == OBJECT_RUINdoor || + m_type == OBJECT_RUINsupport || + m_type == OBJECT_RUINradar || + m_type == OBJECT_RUINconvert ) { m_implementedInterfaces[static_cast(ObjectInterfaceType::Damageable)] = true; m_implementedInterfaces[static_cast(ObjectInterfaceType::Destroyable)] = true; diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index afbb0db3..c481c20e 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -2720,7 +2720,7 @@ bool CPhysics::ExploOther(ObjectType iType, if (pObj->GetType() == OBJECT_STONE ) { destructionForce = 25.0f; } // TitaniumOre if (pObj->GetType() == OBJECT_URANIUM ) { destructionForce = 25.0f; } // UraniumOre if (pObj->GetType() == OBJECT_MOBILEtg) { destructionForce = 10.0f; damageType = DamageType::Explosive; } // TargetBot (something running into it) - if (iType == OBJECT_MOBILEtg) { destructionForce = 10.0f; damageType = DamageType::Explosive; } // TargetBot (it running into something) + if (iType == OBJECT_MOBILEtg) { destructionForce = 0.0f; damageType = DamageType::Explosive; } // TargetBot (it running into something) if (pObj->GetType() == OBJECT_TNT ) { destructionForce = 10.0f; damageType = DamageType::Explosive; } // TNT if (pObj->GetType() == OBJECT_BOMB ) { destructionForce = 0.0f; damageType = DamageType::Explosive; } // Mine @@ -2810,7 +2810,7 @@ int CPhysics::ExploHimself(ObjectType iType, ObjectType oType, float force) float destructionForce = -1.0f; // minimal force required to destroy an object using this explosive, default: not explosive if ( oType == OBJECT_TNT ) destructionForce = 10.0f; // TNT if ( oType == OBJECT_MOBILEtg ) destructionForce = 10.0f; // TargetBot (something running into it) - if ( iType == OBJECT_MOBILEtg ) destructionForce = 10.0f; // TargetBot (it running into something) + if ( iType == OBJECT_MOBILEtg ) destructionForce = 0.0f; // TargetBot (it running into something) if ( oType == OBJECT_BOMB ) destructionForce = 0.0f; // Mine if ( force > destructionForce && destructionForce >= 0.0f ) From 5bf6f12ae59546be3511b4cae2abc4c6e87fa9f6 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Sat, 11 Jan 2020 17:04:40 +0100 Subject: [PATCH 33/44] Add HeavyTrainer texture recoloring --- src/level/robotmain.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index b2ec5a9d..99f945e2 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -3923,6 +3923,7 @@ void CRobotMain::ChangeColor() m_engine->ChangeTextureColor("textures/objects/lemt.png"+teamStr, "textures/objects/lemt.png", COLOR_REF_BOT, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, nullptr, 0, true); m_engine->ChangeTextureColor("textures/objects/roller.png"+teamStr, "textures/objects/roller.png", COLOR_REF_BOT, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, nullptr, 0, true); m_engine->ChangeTextureColor("textures/objects/search.png"+teamStr, "textures/objects/search.png", COLOR_REF_BOT, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, nullptr, 0, true); + m_engine->ChangeTextureColor("textures/objects/rollert.png"+teamStr, "textures/objects/rollert.png", COLOR_REF_BOT, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, nullptr, 0, true); exclu[0] = Math::Point( 0.0f/256.0f, 160.0f/256.0f); exclu[1] = Math::Point(256.0f/256.0f, 256.0f/256.0f); // pencils From 853d8eee5df6b936c65e1cd1b992334b377534bc Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Sat, 11 Jan 2020 18:39:44 +0100 Subject: [PATCH 34/44] Adjust HeavyTrainer rear light sprite position --- src/object/old_object.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index 4804b907..76a922bb 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -3048,15 +3048,23 @@ void COldObject::UpdateSelectParticle() pos[2] = Math::Vector(-3.6f, 4.2f, 3.0f); pos[3] = Math::Vector(-3.6f, 4.2f, -3.0f); } - if ( m_type == OBJECT_MOBILErt || - m_type == OBJECT_MOBILErc || - m_type == OBJECT_MOBILErr || - m_type == OBJECT_MOBILErs || - m_type == OBJECT_MOBILErp ) // large caterpillars? + else if ( m_type == OBJECT_MOBILErt || + m_type == OBJECT_MOBILErc || + m_type == OBJECT_MOBILErr || + m_type == OBJECT_MOBILErs ) // large caterpillars? { pos[2] = Math::Vector(-5.0f, 5.2f, 2.5f); pos[3] = Math::Vector(-5.0f, 5.2f, -2.5f); } + if ( m_type == OBJECT_MOBILErp || ( GetTrainer() && + ( m_type == OBJECT_MOBILErt || + m_type == OBJECT_MOBILErc || + m_type == OBJECT_MOBILErr || + m_type == OBJECT_MOBILErs))) // large caterpillars (trainer)? + { + pos[2] = Math::Vector(-4.6f, 5.2f, 2.6f); + pos[3] = Math::Vector(-4.6f, 5.2f, -2.6f); + } if ( m_type == OBJECT_MOBILEsa || m_type == OBJECT_MOBILEst ) // submarine? { From 0d6218bfa0c7e5d64998ce7bad72edb797f2b0a3 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Tue, 31 Mar 2020 16:57:45 +0200 Subject: [PATCH 35/44] Fix trainer Builder segfault --- src/ui/object_interface.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ui/object_interface.cpp b/src/ui/object_interface.cpp index d75af46e..97d8f578 100644 --- a/src/ui/object_interface.cpp +++ b/src/ui/object_interface.cpp @@ -1830,10 +1830,11 @@ void CObjectInterface::UpdateInterface() } } - if ( type == OBJECT_MOBILEfb || - type == OBJECT_MOBILEtb || - type == OBJECT_MOBILEwb || - type == OBJECT_MOBILEib ) // builder? + if ( (type == OBJECT_MOBILEfb || + type == OBJECT_MOBILEtb || + type == OBJECT_MOBILEwb || + type == OBJECT_MOBILEib) && // builder? + !m_object->GetTrainer() ) { if(!bEnable) m_buildInterface = false; CheckInterface(pw, EVENT_OBJECT_BUILD, m_buildInterface); From b5466261d4f5e194d2ecbebba06a038471bbce96 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Tue, 31 Mar 2020 19:02:53 +0200 Subject: [PATCH 36/44] Make buildings inherit trainer param from builder --- src/object/task/taskbuild.cpp | 5 +++-- src/object/task/taskbuild.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index 3c8d769c..13b792ec 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -86,7 +86,7 @@ CTaskBuild::~CTaskBuild() // Creates a building. -void CTaskBuild::CreateBuilding(Math::Vector pos, float angle) +void CTaskBuild::CreateBuilding(Math::Vector pos, float angle, bool trainer) { ObjectCreateParams params; params.pos = pos; @@ -94,6 +94,7 @@ void CTaskBuild::CreateBuilding(Math::Vector pos, float angle) params.type = m_type; params.power = 0.0f; params.team = m_object->GetTeam(); + params.trainer = trainer; m_building = CObjectManager::GetInstancePointer()->CreateObject(params); m_building->SetLock(true); // not yet usable @@ -287,7 +288,7 @@ bool CTaskBuild::EventProcess(const Event &event) pos = m_metal->GetPosition(); a = m_object->GetRotationY(); - CreateBuilding(pos, a+Math::PI); + CreateBuilding(pos, a+Math::PI, m_object->GetTrainer()); CreateLight(); } diff --git a/src/object/task/taskbuild.h b/src/object/task/taskbuild.h index 94f3d617..4ebd6bdd 100644 --- a/src/object/task/taskbuild.h +++ b/src/object/task/taskbuild.h @@ -61,7 +61,7 @@ public: protected: Error FlatFloor(); - void CreateBuilding(Math::Vector pos, float angle); + void CreateBuilding(Math::Vector pos, float angle, bool trainer); void CreateLight(); void BlackLight(); CObject* SearchMetalObject(float &angle, float dMin, float dMax, float aLimit, Error &err); From 0c69dc8d30f1fdaabdb4b2ce5e99ac9703c8f8ff Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Sun, 5 Apr 2020 16:05:57 +0200 Subject: [PATCH 37/44] Make Ants and Spiders able to destroy TargetBot --- src/graphics/engine/particle.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/graphics/engine/particle.cpp b/src/graphics/engine/particle.cpp index f5c254e3..63fae501 100644 --- a/src/graphics/engine/particle.cpp +++ b/src/graphics/engine/particle.cpp @@ -67,7 +67,6 @@ bool IsAlien(ObjectType type) type == OBJECT_NEST || type == OBJECT_BULLET || type == OBJECT_EGG || - type == OBJECT_MOBILEtg || type == OBJECT_TEEN28 || type == OBJECT_TEEN31 ); } From ddab7606244a5c48ac030541e885447f28b419ab Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Tue, 7 Apr 2020 14:35:59 +0200 Subject: [PATCH 38/44] Add rollert.png to OldModelManager --- src/graphics/engine/oldmodelmanager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/graphics/engine/oldmodelmanager.cpp b/src/graphics/engine/oldmodelmanager.cpp index b7d12e22..a7f65e3b 100644 --- a/src/graphics/engine/oldmodelmanager.cpp +++ b/src/graphics/engine/oldmodelmanager.cpp @@ -193,6 +193,7 @@ void COldModelManager::ChangeVariant(std::vector& triangles, int triangles[i].tex1Name == "factory.png" || triangles[i].tex1Name == "lemt.png" || triangles[i].tex1Name == "roller.png" || + triangles[i].tex1Name == "rollert.png" || triangles[i].tex1Name == "search.png" || triangles[i].tex1Name == "drawer.png" || triangles[i].tex1Name == "subm.png" ) From 0f33dbe154c7aeb082fd01aae7ab1439dc59219f Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 14 May 2020 13:36:37 +0200 Subject: [PATCH 39/44] Add holder model for trainer Subber --- src/object/motion/motionvehicle.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index c96c5ce7..a32afa70 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -858,6 +858,15 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectParent(3, 1); modelManager->AddModelReference("subm3.mod", true, rank, m_object->GetTeam()); m_object->SetPartPosition(3, Math::Vector(0.5f, 0.0f, 1.5f)); + + if (m_object->GetTrainer()) + { + rank = m_engine->CreateObject(); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); + m_object->SetObjectRank(4, rank); + m_object->SetObjectParent(4, 0); + modelManager->AddModelReference("trainerg.mod", true, rank, m_object->GetTeam()); + } } if (type == OBJECT_MOBILEdr) From 7bd18f9c8e44b2b9544b0622608b88d047e67dbc Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Thu, 14 May 2020 15:46:45 +0200 Subject: [PATCH 40/44] Update colobot.pot --- po/colobot.pot | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/po/colobot.pot b/po/colobot.pot index 419b88e9..e478d448 100644 --- a/po/colobot.pot +++ b/po/colobot.pot @@ -810,6 +810,18 @@ msgstr "" msgid "Build a legged sniffer" msgstr "" +msgid "Build a winged builder" +msgstr "" + +msgid "Build a tracked builder" +msgstr "" + +msgid "Build a wheeled builder" +msgstr "" + +msgid "Build a legged builder" +msgstr "" + msgid "Build a thumper" msgstr "" @@ -825,6 +837,9 @@ msgstr "" msgid "Build a subber" msgstr "" +msgid "Build a target bot" +msgstr "" + msgid "Run research program for tracked bots" msgstr "" @@ -855,6 +870,12 @@ msgstr "" msgid "Run research program for orga shooter" msgstr "" +msgid "Run research program for builder" +msgstr "" + +msgid "Run research program for target bot" +msgstr "" + msgid "Return to start" msgstr "" @@ -870,6 +891,9 @@ msgstr "" msgid "Explode (\\key action;)" msgstr "" +msgid "Build (\\key action;)" +msgstr "" + msgid "Recycle (\\key action;)" msgstr "" @@ -1248,6 +1272,18 @@ msgstr "" msgid "Legged grabber" msgstr "" +msgid "Winged builder" +msgstr "" + +msgid "Tracked builder" +msgstr "" + +msgid "Wheeled builder" +msgstr "" + +msgid "Legged builder" +msgstr "" + msgid "Winged shooter" msgstr "" @@ -1464,7 +1500,7 @@ msgstr "" msgid "Nothing to analyze" msgstr "" -msgid "Analyzes only organic matter" +msgid "Inappropriate sample" msgstr "" msgid "Analysis already performed" @@ -1563,6 +1599,9 @@ msgstr "" msgid "Plans for nuclear power plant available" msgstr "" +msgid "Plans for builder available" +msgstr "" + msgid "New bot available" msgstr "" From bbf935662833c4dfd7c52a3cbdd6604ac9e1a362 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 15 May 2020 19:26:03 +0200 Subject: [PATCH 41/44] Fix colobot-lint error --- src/object/task/taskbuild.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index f5a3dd68..a1a69cd8 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -414,7 +414,7 @@ Error CTaskBuild::Start(ObjectType type) pv = m_object->GetPosition(); pm = m_metal->GetPosition(); - if(!m_physics->GetLand() && abs(pm.y-pv.y)>8.0f) return ERR_BUILD_METALAWAY; + if(!m_physics->GetLand() && fabs(pm.y-pv.y)>8.0f) return ERR_BUILD_METALAWAY; m_metal->SetLock(true); // not usable m_camera->StartCentering(m_object, Math::PI*0.15f, 99.9f, 0.0f, 1.0f); From 7f9efea0a2bcbdaa2740709d7cff76c2d517003e Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Fri, 15 May 2020 20:29:48 +0200 Subject: [PATCH 42/44] Remove unnecessary whitespaces --- src/common/event.cpp | 2 +- src/common/event.h | 2 +- src/graphics/engine/pyro.cpp | 2 +- src/object/auto/autofactory.cpp | 6 +++--- src/object/auto/autolabo.cpp | 2 +- src/object/auto/autoresearch.cpp | 2 +- src/object/drive_type.cpp | 4 ++-- src/object/motion/motionvehicle.cpp | 16 ++++++++-------- src/object/task/taskbuild.cpp | 4 ++-- src/object/tool_type.cpp | 4 ++-- src/script/scriptfunc.cpp | 18 +++++++++--------- src/ui/object_interface.cpp | 16 ++++++++-------- src/ui/object_interface.h | 2 +- 13 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/common/event.cpp b/src/common/event.cpp index 108a7fea..c405f4bc 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -528,7 +528,7 @@ void InitializeEventTypeTexts() EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_START] = "EVENT_CODE_BATTLE_START"; EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_SPECTATOR] = "EVENT_CODE_BATTLE_SPECTATOR"; - + EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER"; EVENT_TYPE_TEXT[EVENT_OBJECT_BUILD] = "EVENT_OBJECT_BUILD"; EVENT_TYPE_TEXT[EVENT_OBJECT_RTARGET] = "EVENT_OBJECT_RTARGET"; diff --git a/src/common/event.h b/src/common/event.h index 440ad94a..fe92bf05 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -599,7 +599,7 @@ enum EventType EVENT_CODE_BATTLE_START = 2200, //!< button that starts the code battle EVENT_CODE_BATTLE_SPECTATOR = 2201, //!< button that controls the code battle spectator camera - + EVENT_OBJECT_RBUILDER = 2300, EVENT_OBJECT_BUILD = 2301, EVENT_OBJECT_RTARGET = 2302, diff --git a/src/graphics/engine/pyro.cpp b/src/graphics/engine/pyro.cpp index 2cafa23c..a43c2c52 100644 --- a/src/graphics/engine/pyro.cpp +++ b/src/graphics/engine/pyro.cpp @@ -1939,7 +1939,7 @@ void CPyro::BurnStart() angle.z = -25.0f*Math::PI/180.0f; BurnAddPart(1, pos, angle); // down the insect-cannon } - + if ( m_burnType == OBJECT_MOBILEfb || m_burnType == OBJECT_MOBILEtb || m_burnType == OBJECT_MOBILEwb || diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp index 00695b07..867626ce 100644 --- a/src/object/auto/autofactory.cpp +++ b/src/object/auto/autofactory.cpp @@ -723,7 +723,7 @@ bool CAutoFactory::CreateInterface(bool bSelect) pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0)); if ( pw == nullptr ) return false; - + dim.x = 33.0f/640.0f; dim.y = 33.0f/480.0f; ox = 3.0f/640.0f; @@ -777,7 +777,7 @@ bool CAutoFactory::CreateInterface(bool bSelect) pw->CreateButton(pos, dim, 128+27, EVENT_OBJECT_FACTORYfi); pos.x += dim.x; pw->CreateButton(pos, dim, 128+28, EVENT_OBJECT_FACTORYii); - + pos.x = ox+sx*0.0f; pos.y = oy+sy*4.9f; pw->CreateButton(pos, dim, 192+0, EVENT_OBJECT_FACTORYwb); @@ -804,7 +804,7 @@ bool CAutoFactory::CreateInterface(bool bSelect) pos.x += dim.x; pw->CreateButton(pos, dim, 128+45, EVENT_OBJECT_FACTORYtg); } - + pos.x = ox+sx*0.0f; pos.y = oy+sy*0; ddim.x = 66.0f/640.0f; diff --git a/src/object/auto/autolabo.cpp b/src/object/auto/autolabo.cpp index 1e88252e..a766aca9 100644 --- a/src/object/auto/autolabo.cpp +++ b/src/object/auto/autolabo.cpp @@ -492,7 +492,7 @@ bool CAutoLabo::CreateInterface(bool bSelect) pos.x = ox+sx*6.0f; pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 192+8, EVENT_OBJECT_RTARGET); - + pos.x = ox+sx*7.0f; pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 64+45, EVENT_OBJECT_RiPAW); diff --git a/src/object/auto/autoresearch.cpp b/src/object/auto/autoresearch.cpp index ca0acf99..16b8beee 100644 --- a/src/object/auto/autoresearch.cpp +++ b/src/object/auto/autoresearch.cpp @@ -379,7 +379,7 @@ bool CAutoResearch::CreateInterface(bool bSelect) pos.y = oy+sy*0.5f; pw->CreateButton(pos, dim, 192+4, EVENT_OBJECT_RBUILDER); } - + pos.x = ox+sx*14.5f; pos.y = oy+sy*0; ddim.x = 14.0f/640.0f; diff --git a/src/object/drive_type.cpp b/src/object/drive_type.cpp index 373b04f5..5b2e5229 100644 --- a/src/object/drive_type.cpp +++ b/src/object/drive_type.cpp @@ -61,9 +61,9 @@ DriveType GetDriveFromObject(ObjectType type) case OBJECT_MOBILErr: case OBJECT_MOBILErs: return DriveType::Heavy; - + case OBJECT_MOBILEsa: - return DriveType::Amphibious; + return DriveType::Amphibious; default: return DriveType::Other; diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index cfe5c132..b34f5be2 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -120,7 +120,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, { modelManager->AddModelReference("trainer.mod", false, rank, m_object->GetTeam()); } - + if (type == OBJECT_MOBILEfa || type == OBJECT_MOBILEfb || type == OBJECT_MOBILEfc || @@ -136,7 +136,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectRank(28, rank); m_object->SetObjectParent(28, 0); modelManager->AddModelReference("trainerf.mod", false, rank, m_object->GetTeam()); - + rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(29, rank); @@ -149,7 +149,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts) - { + { if (!m_object->GetTrainer()) modelManager->AddModelReference("lem1t.mod", false, rank, m_object->GetTeam()); else @@ -159,7 +159,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectRank(28, rank); m_object->SetObjectParent(28, 0); modelManager->AddModelReference("trainert.mod", false, rank, m_object->GetTeam()); - + rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(29, rank); @@ -182,7 +182,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectRank(28, rank); m_object->SetObjectParent(28, 0); modelManager->AddModelReference("trainerw.mod", false, rank, m_object->GetTeam()); - + rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(29, rank); @@ -205,7 +205,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectRank(28, rank); m_object->SetObjectParent(28, 0); modelManager->AddModelReference("traineri.mod", false, rank, m_object->GetTeam()); - + rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(29, rank); @@ -213,7 +213,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, modelManager->AddModelReference("trainera.mod", false, rank, m_object->GetTeam()); } } - else if (!m_object->GetTrainer() && + else if (!m_object->GetTrainer() && (type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || @@ -428,7 +428,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetPartPosition(2, Math::Vector(0.0f, 2.5f, 0.0f)); m_object->SetPartRotationZ(2, 0.0f); } - + if (type == OBJECT_MOBILEfb || type == OBJECT_MOBILEtb || type == OBJECT_MOBILEwb || diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index a1a69cd8..d9b6da83 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -356,7 +356,7 @@ bool CTaskBuild::EventProcess(const Event &event) m_sound->Play(SOUND_BUILD, m_object->GetPosition(), 0.5f, 1.0f*Math::Rand()*1.5f); } } - + if(m_object->GetType() == OBJECT_MOBILEfb && m_object->GetReactorRange()<0.2f && m_phase != TBP_MOVE) { pv = m_object->GetPosition(); @@ -415,7 +415,7 @@ Error CTaskBuild::Start(ObjectType type) pv = m_object->GetPosition(); pm = m_metal->GetPosition(); if(!m_physics->GetLand() && fabs(pm.y-pv.y)>8.0f) return ERR_BUILD_METALAWAY; - + m_metal->SetLock(true); // not usable m_camera->StartCentering(m_object, Math::PI*0.15f, 99.9f, 0.0f, 1.0f); diff --git a/src/object/tool_type.cpp b/src/object/tool_type.cpp index 92a181cb..b10cfc5f 100644 --- a/src/object/tool_type.cpp +++ b/src/object/tool_type.cpp @@ -46,12 +46,12 @@ ToolType GetToolFromObject(ObjectType type) case OBJECT_MOBILEfi: case OBJECT_MOBILEii: return ToolType::OrganicShooter; - + case OBJECT_MOBILEwb: case OBJECT_MOBILEtb: case OBJECT_MOBILEfb: case OBJECT_MOBILEib: - return ToolType::Builder; + return ToolType::Builder; default: return ToolType::Other; diff --git a/src/script/scriptfunc.cpp b/src/script/scriptfunc.cpp index 907f6743..661a4946 100644 --- a/src/script/scriptfunc.cpp +++ b/src/script/scriptfunc.cpp @@ -367,7 +367,7 @@ bool CScriptFunctions::rIsBusy(CBotVar* var, CBotVar* result, int& exception, vo result->SetValInt(ERR_WRONG_OBJ); return false; } - + CAuto* automat = obj->GetAuto(); if ( pThis->GetTeam() != obj->GetTeam() && obj->GetTeam() != 0 ) @@ -400,7 +400,7 @@ bool CScriptFunctions::rDestroy(CBotVar* var, CBotVar* result, int& exception, v result->SetValInt(ERR_WRONG_OBJ); return false; } - + CAuto* automat = obj->GetAuto(); if ( pThis->GetTeam() != obj->GetTeam() && obj->GetTeam() != 0 ) @@ -463,7 +463,7 @@ bool CScriptFunctions::rFactory(CBotVar* var, CBotVar* result, int& exception, v ObjectType type = static_cast(var->GetValInt()); var = var->GetNext(); - + std::string program; if ( var != nullptr ) { @@ -472,13 +472,13 @@ bool CScriptFunctions::rFactory(CBotVar* var, CBotVar* result, int& exception, v } else program = ""; - + CObject* factory; if (var == nullptr) factory = CObjectManager::GetInstancePointer()->FindNearest(pThis, OBJECT_FACTORY); else factory = static_cast(var->GetUserPtr()); - + if (factory == nullptr) { exception = ERR_WRONG_OBJ; @@ -562,20 +562,20 @@ bool CScriptFunctions::rResearch(CBotVar* var, CBotVar* result, int& exception, ResearchType type = static_cast(var->GetValInt()); var = var->GetNext(); - + CObject* center; if (var == nullptr) center = CObjectManager::GetInstancePointer()->FindNearest(pThis, OBJECT_RESEARCH); else center = static_cast(var->GetUserPtr()); - + if (center == nullptr) { exception = ERR_WRONG_OBJ; result->SetValInt(ERR_WRONG_OBJ); return false; } - + CAuto* automat = center->GetAuto(); if ( pThis->GetTeam() != center->GetTeam() && center->GetTeam() != 0 ) @@ -654,7 +654,7 @@ bool CScriptFunctions::rTakeOff(CBotVar* var, CBotVar* result, int& exception, v result->SetValInt(ERR_WRONG_OBJ); return false; } - + CAuto* automat = base->GetAuto(); if ( pThis->GetTeam() != base->GetTeam() && base->GetTeam() != 0 ) diff --git a/src/ui/object_interface.cpp b/src/ui/object_interface.cpp index 2b10b306..584b57a1 100644 --- a/src/ui/object_interface.cpp +++ b/src/ui/object_interface.cpp @@ -100,7 +100,7 @@ CObjectInterface::CObjectInterface(COldObject* object) m_manipStyle = EVENT_OBJECT_MFRONT; m_selScript = 0; - + m_buildInterface = false; } @@ -622,7 +622,7 @@ bool CObjectInterface::EventProcess(const Event &event) { err = m_taskExecutor->StartTaskSpiderExplo(); } - + if ( action == EVENT_OBJECT_BUILD ) { m_buildInterface = !m_buildInterface; @@ -1430,13 +1430,13 @@ bool CObjectInterface::CreateInterface(bool bSelect) pb = pw->CreateButton(pos, dim, 192+4, EVENT_OBJECT_BUILD); pb->SetImmediat(true); DefaultEnter(pw, EVENT_OBJECT_BUILD); - + pos.x = 0.0f; pos.y = oy+sy*2.6f; ddim.x = 214.5f/640.0f; ddim.y = 66.0f/480.0f; pw->CreateGroup(pos, ddim, 6, EVENT_WINDOW3); - + ddim.x = dim.x*0.9f; ddim.y = dim.y*0.9f; pos.y = oy+sy*3.6f; @@ -1468,7 +1468,7 @@ bool CObjectInterface::CreateInterface(bool bSelect) pos.x = ox+sx*5.4f; pw->CreateButton(pos, ddim, 128+44, EVENT_OBJECT_BINFO); DeadInterface(pw, EVENT_OBJECT_BINFO, m_main->CanBuild(OBJECT_INFO, m_object->GetTeam())); - + pos.y = oy+sy*2.7f; pos.x = ox+sx*0.0f; @@ -1498,7 +1498,7 @@ bool CObjectInterface::CreateInterface(bool bSelect) pos.x = ox+sx*5.4f; pw->CreateButton(pos, ddim, 128+41, EVENT_OBJECT_BDESTROYER); DeadInterface(pw, EVENT_OBJECT_BDESTROYER, m_main->CanBuild(OBJECT_DESTROYER, m_object->GetTeam())); - + } UpdateInterface(); m_lastUpdateTime = 0.0f; @@ -1829,7 +1829,7 @@ void CObjectInterface::UpdateInterface() ps->SetVisibleValue((RADIUS_SHIELD_MIN/g_unit)+dynamic_cast(m_object)->GetShieldRadius()*((RADIUS_SHIELD_MAX-RADIUS_SHIELD_MIN)/g_unit)); } } - + if ( (type == OBJECT_MOBILEfb || type == OBJECT_MOBILEtb || type == OBJECT_MOBILEwb || @@ -1841,7 +1841,7 @@ void CObjectInterface::UpdateInterface() pb = static_cast< CButton* >(pw->SearchControl(EVENT_WINDOW3)); pb->SetState(STATE_VISIBLE, m_buildInterface); - + pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BFACTORY)); pb->SetState(STATE_VISIBLE, m_buildInterface); pb = static_cast< CButton* >(pw->SearchControl(EVENT_OBJECT_BDERRICK)); diff --git a/src/ui/object_interface.h b/src/ui/object_interface.h index e3df7cbb..184c95ce 100644 --- a/src/ui/object_interface.h +++ b/src/ui/object_interface.h @@ -120,7 +120,7 @@ protected: float m_lastAlarmTime; int m_soundChannelAlarm; int m_flagColor; - + bool m_buildInterface; }; From 373d8de7d0c15f941e436a56330cb66df10d66d7 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Sat, 13 Jun 2020 16:08:06 +0200 Subject: [PATCH 43/44] Make burning and destroyed objects physical --- src/graphics/engine/pyro.cpp | 1 + src/physics/physics.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/graphics/engine/pyro.cpp b/src/graphics/engine/pyro.cpp index a43c2c52..2813db56 100644 --- a/src/graphics/engine/pyro.cpp +++ b/src/graphics/engine/pyro.cpp @@ -2243,6 +2243,7 @@ void CPyro::BurnTerminate() { m_object->SetType(OBJECT_RUINmobilew1); // Wreck (recoverable by Recycler) } + dynamic_cast(m_object)->SetDying(DeathType::Alive); m_object->SetLock(false); } diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index c784bb80..753881cf 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -2525,7 +2525,7 @@ int CPhysics::ObjectAdapt(const Math::Vector &pos, const Math::Vector &angle) { if ( pObj == m_object ) continue; // yourself? if (IsObjectBeingTransported(pObj)) continue; - if ( pObj->Implements(ObjectInterfaceType::Destroyable) && dynamic_cast(pObj)->IsDying() ) continue; // is burning or exploding? + //if ( pObj->Implements(ObjectInterfaceType::Destroyable) && dynamic_cast(pObj)->IsDying() ) continue; // is burning or exploding? oType = pObj->GetType(); if ( oType == OBJECT_TOTO ) continue; From 6d584ba481b69372ff5d295f7e3d36989406a751 Mon Sep 17 00:00:00 2001 From: Fiftytwo Date: Tue, 16 Jun 2020 18:54:35 +0200 Subject: [PATCH 44/44] Update data submodule --- data | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data b/data index c467bd99..d1c52c9c 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit c467bd994e60fb54cf977fbe8583f92957330695 +Subproject commit d1c52c9cdb763ed127e89e51b0c921f85d8760b6