Coder Social home page Coder Social logo

warzone2100 / warzone2100 Goto Github PK

View Code? Open in Web Editor NEW
3.0K 116.0 509.0 677.37 MB

Command the forces of The Project in a battle to rebuild the world after mankind has been nearly destroyed by nuclear missiles. A 100% free and open source real-time strategy game for Windows, macOS, Linux, BSD+

Home Page: https://wz2100.net

License: GNU General Public License v2.0

Shell 0.55% JavaScript 10.96% GLSL 1.39% C++ 73.43% C 4.07% Objective-C++ 0.10% Makefile 0.03% NSIS 1.35% Python 1.19% Batchfile 0.01% PowerShell 0.09% CMake 3.86% QMake 0.01% PHP 2.02% CSS 0.09% HTML 0.71% Ruby 0.05% Dockerfile 0.07% Hack 0.01% AppleScript 0.03%
game c-plus-plus strategy-game cheats linux multiplayer internet windows mac javascript

warzone2100's Introduction

Warzone 2100

Homepage of the Warzone 2100 Project

Origins

Warzone 2100, released in 1999 and developed by Pumpkin Studios, is a ground-breaking and innovative 3D real-time strategy game.

In 2004 Eidos, in collaboration with Pumpkin Studios, decided to release the source for the game under the terms of the GNU GPL, including everything but the music and in-game video sequences, which were released later.

State of the game

After the liberation of the Warzone 2100 source-code on December 6th, 2004, all proprietary technologies have been replaced with open-source counterparts.

Currently, the supported platforms are Linux, Windows, and macOS. There are reports that Warzone 2100 is also working on BSD.

Installation

Visit https://wz2100.net for the latest stable release for Windows, macOS and Ubuntu.

Note for videos in Ubuntu: For important information during the game, download the videos manually. Assuming the game is installed in the standard ~/.local/share/ folder, use these commands:

mkdir ~/.local/share/warzone2100
wget https://github.com/Warzone2100/wz-sequences/releases/download/v3/standard-quality-en-sequences.wz -O ~/.local/share/warzone2100/sequences.wz

Latest development builds

Windows Build Status macOS Build Status Ubuntu Build Status Fedora Build Status FreeBSD Build Status Drone Cloud CI ARM64 Build Status Packaging status

Windows

How to get the latest Windows development builds:

  1. View the latest successful Windows builds.
  2. Select the latest workflow run in the table / list. This should display a list of Artifacts from the run.
  3. Download the warzone2100_win_x86_portable or warzone2100_win_x86_installer artifact (depending on whether you want the portable build or the full / regular installer).

Note: A free GitHub account is currently required to download the artifacts.

macOS

How to get the latest macOS development builds:

  1. View the latest successful macOS builds.
  2. Select the latest workflow run in the table / list. This should display a list of Artifacts from the run.
  3. Download the warzone2100_macOS_universal or warzone2100_macOS_universal_novideos artifact (depending on whether you want the full app bundle or not).

Note: A free GitHub account is currently required to download the artifacts.

Ubuntu

How to get the latest Ubuntu development builds:

  1. View the latest successful Ubuntu builds.
  2. Select the latest workflow run in the table / list. This should display a list of Artifacts from the run.
  3. Download the appropriate warzone2100_ubuntu<version>_amd64_deb artifact.
    • If you are running Ubuntu 20.04: warzone2100_ubuntu20.04_amd64_deb
    • If you are running Ubuntu 22.04: warzone2100_ubuntu22.04_amd64_deb

Note: A free GitHub account is currently required to download the artifacts.

  1. Extract the contents of the downloaded .zip (warzone2100_ubuntu<version>_amd64.deb) to your Desktop.
  2. Execute the following commands in Terminal:
cd ~/Desktop
sudo apt install ./warzone2100_ubuntu<version>_amd64.deb
  1. Download the video for crucial information during the game, for more see "Videos" section. Assuming the game is installed in the standard ~/.local/share/ folder, use this command (update warzone2100-<version>):
wget https://github.com/Warzone2100/wz-sequences/releases/download/v3/standard-quality-en-sequences.wz -O ~/.local/share/warzone2100-<version>/sequences.wz

Linux (from source)

Clone this Git repo and build, following the instructions under: How to Build

Development builds are a snapshot of the current state of development, from the latest (successfully-built) commit. Help testing these builds is always welcomed, but they should be considered a work-in-progress.

Videos

You can download videos from here, or here. You will need to rename the downloaded file to sequences.wz, and place it into your Warzone 2100 directory, as described above. Note that .wz files are just .zip in disguise, you can rename it and extract the content if wish to inspect them.

Reporting bugs

This game still has bugs and if you run into one, please use the GitHub bugtracker (https://github.com/Warzone2100/warzone2100/issues) to report the bug. In order to fix those bugs more quickly, we require that you follow these rules:

  1. If the game crashes you may save a memory dump. Please do so and upload it when reporting the bug. (Linux locates that file at /tmp/warzone2100.gdmp, Windows at /Program Files/Warzone 2100/warzone2100.RPT, macOS by clicking "Details" in the crash error message) A self created backtrace is just as useful.
  2. Give as much information about what you were doing before the crash/bug occurred.
  3. Try to reproduce the bug and add a description of the process to your bug report.
  4. You may even upload save files. These consist of one or two file(s) and one folder. All two/three are named after your savegame (e.g. MySaveGame.es, MySaveGame.gam and the folder MySaveGame).
  5. Bug reports are not submit-and-forget. It may be that you forgot some information or forgot to upload a file. So it is also in your interest to watch the bug-report after it has been submitted. Additionally, you can enable e-mails of comments to your bug report.

Configuration

Warzone 2100 uses its own subdirectory in a user's home directory to save configuration data, save files and certain other things. Additionally you can use this directory to place custom maps and mods so the game can find them. The location of this directory depends on the operating system.

Warzone 2100 directory under GNU/Linux

Under GNU/Linux, Warzone 2100 conforms to the XDG base directory spec.

By default, the directory warzone2100-<version> can be found in your home directory under the path ~/.local/share/. (If the XDG_DATA_HOME environment variable is defined, the Warzone 2100 folder will be located within $XDG_DATA_HOME.)

The leading dot in the .local part of the path indicates that it is a hidden directory, so depending on your configuration you may not be able to see it. However, you can still access it by typing the path into your address bar.

Warzone 2100 directory under Windows

The directory Warzone 2100 Project\Warzone 2100 <version> is located under the %APPDATA% folder.

Typical %APPDATA% paths:

  • Windows XP: \Documents and Settings\$USER$\Application Data
  • Windows Vista+: \Users\$USER$\AppData\Roaming

Hence, the default path for the Warzone 2100 configuration data on Windows Vista+ would be: C:\Users\$USER$\AppData\Roaming\Warzone 2100 Project\Warzone 2100 <version>\

By default, the %APPDATA% folder is hidden. Entering: %APPDATA%\Warzone 2100 Project\ into the address bar of Windows Explorer will browse to your Warzone 2100 directory.

Warzone 2100 directory under macOS

The directory Warzone 2100 <version> can be found in your home directory at: ~/Library/Application Support/

By default, recent version of macOS hide your account's Library folder. To view it in Finder, hold down the Option (⌥) key while clicking the Go menu, and your Library folder will appear as a menu choice.

Configuration file

The configuration file is just called 'config' and contains several configuration options, some of them can be changed by using command-line options or using the in-game menus, others can only be changed by editing the file manually.

If at any point you did something wrong, you can delete the old configuration file and just restart Warzone 2100. Then the game will regenerate a new configuration file with default values.

Command-line options

Warzone 2100 can be started with different options and arguments. For a list of these options, run the game with the --help option.

Notes: These options all have two dashes (--), not one dash only (-). Also, if the option has an argument, you need to separate the option and its argument with a '=' sign - spaces do not work.

Note: Some options have corresponding entries in the configuration file and will persist from one start of Warzone 2100 to the next.

Multiplaying via internet

There are two methods to start a multiplayer game via the internet: using the host's IP or using the lobby server. Make sure you are able to communicate on TCP ports 2100 and 9999. Note that for port forwarding, you only need to configure your router to forward port 2100.

You can choose whether to connect via Lobby or IP:

  • If you choose IP, Warzone 2100 asks you for the IP address of the host and will try to connect to that IP.
  • If you choose Lobby, Warzone 2100 will connect to the lobby server, as long as the lobby-server-address in your config file has not been changed.

You will see a list of games from which you can select.

You can kick unwanted players out of a game before it begins by clicking left on them while holding the right mouse button.

When you are hosting a game it will automatically be listed on the lobby server. If you do not want your games to be listed on the lobby-server, you should change the entry "masterserver_name=lobby.wz2100.net" in your config to some- thing invalid, for example: "nomasterserverplease".

If you then want to see the games that are listed on the lobby server you may enter "lobby.wz2100.net" when prompted to enter the host's IP or change the entry in the config file back. You will have to restart Warzone 2100 in order for config changes to take effect.

Cheats

Like many other games, Warzone 2100 features a certain set of cheats that can be used to have an advantage in the singleplayer-campaign and skirmish-games, or to just help mod-makers and map-makers with testing. Cheats do not work in multiplayer, unless all players agree to it.

Cheats are likely to contain or trigger bugs, so use with care, especially during campaign.

Entering cheat mode

To be able cheats while in-game, press shift and backspace simultaneously. An on-screen message should appear telling you that cheat mode has been enabled. You can disable it using the same key combination again.

Pressing ctrl+o opens up the debug menu, which is useful for inspecting the game state, or just messing around.

Cheat commands

After activating cheat mode, cheats can be entered using the normal chat- function. Cheats are ordered by their use and where they can be used.

There are many cheat commands. Some examples:

  • biffer baker - Your units do more damage and are stronger
  • double up - Your units are twice as strong
  • give all - Allows you to build and research everything
  • work harder - All currently active research topics are instantly researched
  • research all - Everything is researched instantly
  • let me win - You win the current campaign mission
  • superpower - Gives you maximum power
  • teach us - Gives experience to selected units
  • makemehero - Makes selected units Heroes
  • clone wars - Clones selected units (x10)
  • clone wars! - Clones selected units (x40)
  • clone wars!! - Clones selected units (x135)
  • kill - Kills selected object
  • john kettley - Toggles weather conditions
  • get off my land - Kills all enemy units and structures
  • showfps - Shows average FPS
  • reload me - Reloads selected weapon instantly
  • damage me - Selected object takes 20% damage
  • showunits - Displays unit count information
  • showorders - Displays unit order/action state
  • droidinfo - Shows unit stats

All available commands can be found in this file: https://github.com/Warzone2100/warzone2100/blob/master/src/cheat.cpp

Modding information

Warzone 2100 AI, maps and campaign can be scripted using JavaScript.

Links to further information

How to build

Getting the Source

To properly build the game, either:

  • Download a release tar.xz, which contains all the source code and revision information.

    OR

  • Clone the Git repo:

    git clone https://github.com/Warzone2100/warzone2100.git
    cd warzone2100
    git fetch --tags
    git submodule update --init --recursive

    Note: Initializing submodules is required.

Do not use GitHub's "Download Zip" option, as it does not contain submodules or the Git-based autorevision information.

Linux

  • Prerequisites
  • Installing prerequisites:
    • Using get-dependencies_linux.sh:

      1. Specify one of the linux distros supported by the script: (ubuntu, fedora, alpine, archlinux, opensuse-tumbleweed) REQUIRED
      2. Specify a mode: (build-all (default), build-dependencies) OPTIONAL

      Example:

      sudo ./get-dependencies_linux.sh ubuntu build-dependencies
  • Building from the command-line:
    1. Starting from the parent directory of the warzone2100 source code (which is assumed to be in a folder named warzone2100), create a sibling build directory:
      mkdir build
    2. Change directory into the sibling build directory:
      cd build
    3. Run CMake configure to generate the build files:
      cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX:PATH=~/wz/install -GNinja ../warzone2100
    4. Run CMake build:
      cmake --build . --target install

Windows using MSVC

  • Prerequisites
  • Preparing to build: Build dependencies are provided via vcpkg from Microsoft.
    • Run the get-dependencies_win.ps1 script from powershell in order to download and build the dependencies.
  • Building from the command-line:
    • Change directory to the warzone2100 repo directory
    • Configure
      • Visual Studio 2022: cmake -H. -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake -Bbuild -G "Visual Studio 17 2022"
      • Visual Studio 2019: cmake -H. -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake -Bbuild -G "Visual Studio 16 2019"
      • Visual Studio 2017: cmake -H. -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake -Bbuild -G "Visual Studio 15 2017"
    • Build
      • Release: cmake --build build --config Release
      • Debug: cmake --build build --config Debug
  • Building using Visual Studio:
    1. Open Visual Studio
    2. Open the warzone2100 folder using File > Open > Folder...
      • Allow Visual Studio some time to load the project and retrieve information from CMake.
    3. Create a VS CMake settings JSON file using CMake > Change CMake settings. You can also reach this dialog by clicking "Manage Configurations" in the configuration dropdown in the toolbar. Make sure the CMake components in Visual Studio are installed (by running the Visual Studio Installer).
      • This creates CMakeSettings.json
    4. Add the following variables to CMakeSettings.json:
      • To cmakeCommandArgs, add: -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake
      • Note: Visual Studio automatically escapes and turns each \ into \\
    5. After letting Visual Studio re-run CMake configure with the new settings, you can build using the CMake menu.

macOS

See macosx/README.md

Licensing

Warzone 2100 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

SPDX-License-Identifier: GPL-2.0-or-later

More information: COPYING.README, COPYING.NONGPL

warzone2100's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

warzone2100's Issues

Tutorial bugs

From Necrosporus (via IRC):

Tutorial is broken in 31 may Master version

You get instruction to click your truck to help building the power generator, but you don't have to do it because a truck starts to help building stuff by itself if it's close enough. If you ignore tutorial instruction and let the trucks finish power generator you don't get the next order and you are stuck

Also, when you get to design items, you are told to design viper unit, but if you do it you lose design icon, but truck is not in existing builds so it's still impossible to build, but the last order tells you to build trucks. Thankfully it is the last order in tutorial anyway

I think that to rework tutorial, first of all it's best to have all of icons to be accessible at all times, second, make the conditions less rigid

only one command turret?

I git cloned [email protected]:Warzone2100/warzone2100.git a week ago and have been playing though. So far everything seems improved. One weird this is I was playing gamma-2 and had to hide my units from the nuke explosion by hiding in the canyon. One of the units that I hid was a command turret.

Now in gamma-3 my units were "lost", which I expected. But if I try to build a new command turret it says there's a limit on command units. Is this expected? A bug? I tried search on google and searching the github issues without finding anything.

I'm did a git pull today and it didn't change anything, I still can't build a command turret.

On the creation link

500 Server error: Page unavailable

Sorry, but the requested page is unavailable due to a server glitch.

Our engineers have been notified, so check back later.

There is a lot of errors in the web site addons has this one when trying to create a addons
also all the bug report links need to be directed to here https://github.com/Warzone2100/warzone2100/issues/new

For the production of military units do not need a Command center.

In previous versions of the game we needed a Command center to start building an army.
I'm playing with templates and the basic units I have stored. I have enough to build a factory and research technology "machine gun" to produce the first combat units.
In the old version, the presence of templates did not affect the game. But in this version there is a mistake.

In the screenshot below you can see that I have only 2 buildings built.
1 factory and 1 laboratory.

PS. I use a graphic mod, but it does not affect the balance of the game.
wz2100-20190525_205505-Sk-Rush

Accuracy bug explained

Every weapons in the game have accuracy expressed in %.
When the droid or structures fire a projectile and random roll is made to determine if it's a hit or a miss.
When the projectile miss, it's directed at the ground in a circle with radius dependent on the weapon inaccuracy
So far, so good. But since the last struggle with ray casting and terrain around 2.3.5-2.3.7 i believe, someone in the dev team made the missing projectiles that touch the enemy hit box (a cylinder of radius determined by the pie file)l hit.

This is a crucial issue because the program was never designed to handle this correctly.
1- It tries to miss behind the target
2- Models are often bigger then the miss spread coded in the game causing many weapon to jump straight at 100% accuracy,
2.1- For exemple, I believe a cobra body vs an hmg get 100% hit, but a scorpion body can dodge 30% like a pro. Because the scorpion model is 1pixel smaller

The point 1 is annoying, it makes. the makes about 15% of the missed shot a hit. Up to 25% when the units are at point blank.
The point 2 however is game breaking. As it's an undocumented effect that can happen apparently randomly for every pair weapon <-> body.

The solutions to the problem are either
A- put back the missed flag test in place and prevent all damage that could be done by a MISSED shot at a target. (and accept the fact that visually a few bullets will land behind the units)
OR
B- improve the engine and give it better target to miss at. IE : always far enough of the target (ideally in a gaussian distribution) and never behind hit (because you can't miss behind a target)

Why accuracy matters so much :
Balancing the game via odd stats such as range, explosion radius or length of the research is impracticable. Linear progression (i boost 10%, it'S now 10% stronger) stats such at cost, damage, ROF and accuracy are crucial if we want to have any hope to balance something and keep our sanity.

However, the cost of the unit is not the cost of the weapon in WZ. It doesn't scale linearly at all. Same can be said for the DMG because the armor are addition logic with the DMG. A boost of 10% dmg in the right situation can yield a 30% increase in DPS.

there is nothing left beside ROF and accuracy. It would be impossible to ensure that a cannon shoot slower then a machine gun if the only balance handle was ROF. We NEED accuracy.

Failed to build crosscompile version for windows

i686-w64-mingw32.static-g++ -g -Wno-enum-compare -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wcast-align -Wwrite-strings -Wpointer-arith -Wno-format-security -I/opt/mxe/usr/i686-w64-mingw32.static/include/harfbuzz -I/opt/mxe/usr/i686-w64-mingw32.static/include/cairo -I/opt/mxe/usr/i686-w64-mingw32.static/include/pixman-1  -I/opt/mxe/usr/i686-w64-mingw32.static/include/libpng16 -I/opt/mxe/usr/i686-w64-mingw32.static/include/freetype2 -I/opt/mxe/usr/i686-w64-mingw32.static/include/glib-2.0 -I/opt/mxe/usr/i686-w64-mingw32.static/lib/glib-2.0/include -mms-bitfields -DPCRE_STATIC   -I/opt/mxe/usr/i686-w64-mingw32.static/include/freetype2   -DQT_WIDGETS_LIB -I/opt/mxe/usr/i686-w64-mingw32.static/qt5/include/QtWidgets -DQT_GUI_LIB -I/opt/mxe/usr/i686-w64-mingw32.static/qt5/include/QtGui -DQT_SCRIPT_LIB -I/opt/mxe/usr/i686-w64-mingw32.static/qt5/include/QtScript -DQT_CORE_LIB -I/opt/mxe/usr/i686-w64-mingw32.static/qt5/include/QtCore -I/opt/mxe/usr/i686-w64-mingw32.static/qt5/include   -DQT_STATICPLUGIN -pipe -m32 -march=i686 -O2 -Os -g -gstabs -g3 -std=c++11 -fstack-protector  -lz -Wl,-subsystem,windows  -Wl,--dynamicbase -Wl,--nxcompat -fPIC -lpthread -o warzone2100.exe action.o advvis.o ai.o astar.o atmos.o aud.o baseobject.o bucket3d.o challenge.o cheat.o clparse.o cmddroid.o combat.o component.o configuration.o console.o data.o design.o difficulty.o display3d.o display.o droid.o edit3d.o effects.o feature.o fpath.o frontend.o game.o gateway.o geometry.o group.o hci.o ingameop.o init.o intdisplay.o intelmap.o intimage.o intorder.o keybind.o keyedit.o keymap.o level_lexer.o levels.o lighting.o loadsave.o loop.o main.o map.o mapdisplay.o mapgrid.o mechanics.o message.o miscimd.o mission.o modding.o move.o multibot.o multigifts.o multiint.o multijoin.o multilimit.o multimenu.o multiopt.o multiplay.o multistat.o multistruct.o multisync.o objects.o objmem.o oprint.o order.o pointtree.o power.o projectile.o qtscript.o qtscriptdebug.o qtscriptfuncs.o radar.o random.o raycast.o research.o scores.o scriptai.o scriptcb.o scriptextern.o scriptfuncs.o scriptobj.o scripttabs.o scriptvals.o scriptvals_lexer.o scriptvals_parser.o selection.o seqdisp.o stats.o structure.o template.o terrain.o text.o texture.o transporter.o version.o visibility.o warcam.o warzoneconfig.o wavecast.o wrappers.o qtscriptdebug_moc.o ../lib/widget/libwidget.a ../lib/sequence/libsequence.a ../lib/sound/libsound.a ../lib/script/libscript.a ../lib/netplay/libnetplay.a ../lib/ivis_opengl/libivis_opengl.a ../lib/gamelib/libgamelib.a ../lib/exceptionhandler/libexceptionhandler.a ../3rdparty/miniupnp/libminiupnpc.a ../lib/sdl/libsdl.a ../lib/framework/libframework.a ../3rdparty/micro-ecc/libmicroecc.a ../3rdparty/sha/libsha2.a ../3rdparty/utf8proc/libutf8proc.a -lintl -liconv -lmingw32 -lSDL2main -lSDL2 -mwindows  -Wl,--no-undefined -lm -lsamplerate -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid -static-libgcc   -lphysfs -lpng16 -lz   -lvorbisfile -lvorbis -logg -lm   -lvorbis -logg -lm   -ltheora -logg   -lOpenAL32  -lwinmm -luuid -lole32   -lfribidi   -lharfbuzz -lcairo -lgobject-2.0 -lfontconfig -lfreetype -lm -lusp10 -lmsimg32 -lgdi32 -lpixman-1 -L/opt/mxe/usr/i686-w64-mingw32.static/lib/../lib -lffi -lexpat -lbz2 -lpng16 -lz -lharfbuzz_too -lfreetype_too -lglib-2.0 -lws2_32 -lole32 -lwinmm -lshlwapi -lpcre -lintl -liconv   -lfribidi   -lharfbuzz -lcairo -lgobject-2.0 -lfontconfig -lfreetype -lm -lusp10 -lmsimg32 -lgdi32 -lpixman-1 -L/opt/mxe/usr/i686-w64-mingw32.static/lib/../lib -lffi -lexpat -lbz2 -lpng16 -lz -lharfbuzz_too -lfreetype_too -lglib-2.0 -lws2_32 -lole32 -lwinmm -lshlwapi -lpcre -lintl -liconv   -lopengl32 -lglu32 -lGLEW -lopengl32 -lglu32   -lharfbuzz -lcairo -lgobject-2.0 -lfontconfig -lfreetype -lm -lusp10 -lmsimg32 -lgdi32 -lpixman-1 -L/opt/mxe/usr/i686-w64-mingw32.static/lib/../lib -lffi -lexpat -lbz2 -lpng16 -lz -lharfbuzz_too -lfreetype_too -lglib-2.0 -lws2_32 -lole32 -lwinmm -lshlwapi -lpcre -lintl -liconv    -lopengl32 -lglu32 -L/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms -lqwindows -lqminimal -lQt5AccessibilitySupport -lQt5ThemeSupport -lQt5FontDatabaseSupport -lQt5EventDispatcherSupport -lQt5Widgets -lQt5Gui -lQt5Script -lQt5Core /opt/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Gui.a -luxtheme -ldwmapi /opt/mxe/usr/i686-w64-mingw32.static/lib/libharfbuzz.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libcairo.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libgobject-2.0.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libfontconfig.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libfreetype.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libm.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libusp10.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libmsimg32.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libgdi32.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libpixman-1.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libffi.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libexpat.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libbz2.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libpng16.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libharfbuzz_too.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libfreetype_too.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libglib-2.0.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libws2_32.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libole32.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libwinmm.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libshlwapi.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libpcre.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libintl.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libiconv.a -lgdi32 -lcomdlg32 -loleaut32 -limm32 /opt/mxe/usr/i686-w64-mingw32.static/lib/libopengl32.a -L/opt/mxe/usr/i686-w64-mingw32.static/qt5/lib /opt/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a -lmpr -lnetapi32 -luserenv -lversion -lws2_32 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lwinmm /opt/mxe/usr/i686-w64-mingw32.static/lib/libz.a /opt/mxe/usr/i686-w64-mingw32.static/lib/libpcre2-16.a    -lGLEW -lopengl32 -lglu32     -lz -Wl,-subsystem,windows  -Wl,--dynamicbase -Wl,--nxcompat -fPIC -lpthread ../win32/warzone2100.o  -lbfd -ldbghelp -lshfolder -lshlwapi -lpsapi -lshell32 -lwinmm -lws2_32 -liphlpapi -ladvapi32 -lz -lintl -liconv -liberty -lstdc++ 
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowscontext.o):qwindowscontext.cpp:(.text$_ZN15QWindowsContext15isSessionLockedEv+0x45): undefined reference to `WTSQuerySessionInformationW@20'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowscontext.o):qwindowscontext.cpp:(.text$_ZN15QWindowsContext15isSessionLockedEv+0x7e): undefined reference to `WTSFreeMemory@4'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiaaccessibility.o):qwindowsuiaaccessibility.cpp:(.text$_ZN24QWindowsUiaAccessibility25notifyAccessibilityUpdateEP16QAccessibleEvent+0x34): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiaaccessibility.o):qwindowsuiaaccessibility.cpp:(.text$_ZN24QWindowsUiaAccessibility25notifyAccessibilityUpdateEP16QAccessibleEvent+0x3b): undefined reference to `QWindowsUiaWrapper::ready()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiaaccessibility.o):qwindowsuiaaccessibility.cpp:(.text$_ZN24QWindowsUiaAccessibility25notifyAccessibilityUpdateEP16QAccessibleEvent+0x44): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiaaccessibility.o):qwindowsuiaaccessibility.cpp:(.text$_ZN24QWindowsUiaAccessibility25notifyAccessibilityUpdateEP16QAccessibleEvent+0x4b): undefined reference to `QWindowsUiaWrapper::clientsAreListening()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiaaccessibility.o):qwindowsuiaaccessibility.cpp:(.text$_ZN24QWindowsUiaAccessibility17handleWmGetObjectEP6HWND__jlPl+0x74): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiaaccessibility.o):qwindowsuiaaccessibility.cpp:(.text$_ZN24QWindowsUiaAccessibility17handleWmGetObjectEP6HWND__jlPl+0x96): undefined reference to `QWindowsUiaWrapper::returnRawElementProvider(HWND__*, unsigned int, long, IRawElementProviderSimple*)'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyFocusChangeEP16QAccessibleEvent+0x23): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyFocusChangeEP16QAccessibleEvent+0x35): undefined reference to `QWindowsUiaWrapper::raiseAutomationEvent(IRawElementProviderSimple*, int)'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyStateChangeEP27QAccessibleStateChangeEvent+0x74): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyStateChangeEP27QAccessibleStateChangeEvent+0x89): undefined reference to `QWindowsUiaWrapper::raiseAutomationEvent(IRawElementProviderSimple*, int)'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyStateChangeEP27QAccessibleStateChangeEvent+0x93): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyStateChangeEP27QAccessibleStateChangeEvent+0xe0): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyStateChangeEP27QAccessibleStateChangeEvent+0x132): undefined reference to `QWindowsUiaWrapper::raiseAutomationPropertyChangedEvent(IRawElementProviderSimple*, int, tagVARIANT, tagVARIANT)'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyValueChangeEP27QAccessibleValueChangeEvent+0x9d): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider17notifyValueChangeEP27QAccessibleValueChangeEvent+0xef): undefined reference to `QWindowsUiaWrapper::raiseAutomationPropertyChangedEvent(IRawElementProviderSimple*, int, tagVARIANT, tagVARIANT)'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider16notifyTextChangeEP16QAccessibleEvent+0x62): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider16notifyTextChangeEP16QAccessibleEvent+0x77): undefined reference to `QWindowsUiaWrapper::raiseAutomationEvent(IRawElementProviderSimple*, int)'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider16notifyTextChangeEP16QAccessibleEvent+0x92): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider26get_HostRawElementProviderEPP25IRawElementProviderSimple+0x11b): undefined reference to `QWindowsUiaWrapper::instance()'
/opt/mxe/usr/i686-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a(qwindowsuiamainprovider.o):qwindowsuiamainprovider.cpp:(.text$_ZN23QWindowsUiaMainProvider26get_HostRawElementProviderEPP25IRawElementProviderSimple+0x129): undefined reference to `QWindowsUiaWrapper::hostProviderFromHwnd(HWND__*, IRawElementProviderSimple**)'
collect2: error: ld returned 1 exit status
Makefile:872: recipe for target 'warzone2100.exe' failed
make[3]: *** [warzone2100.exe] Error 1
make[3]: Leaving directory '/opt/warzone2100/src'
Makefile:795: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/opt/warzone2100/src'
Makefile:579: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/opt/warzone2100'
Makefile:499: recipe for target 'all' failed
make: *** [all] Error 2

Anyone can help?

Some tools fails to open multiplayer-downloaded maps

For example we can run /tools/map/map2png with any map which contains hash in filename.
What we will see:

$ map2png 4c-DA-julia-4-v1-9dfb***<HASH>***e57.wz 
Could not open multiplay/maps/4c-DA-julia-4-v1-9df***<HASH>***9e57/game.map
Game file multiplay/maps/4c-DA-julia-4-v1-9dfba9***<HASH>***9e57.gam not found

Can somebody make this tool to cut out hash from filename?

EDIT:
Found this on /tools/map/mapload.cpp line ~140:

strcpy(path, filename);
strcat(path, ".gam");
fp = PHYSFS_openRead(path);

mods in multiplay

update #4789
now 3.3.0_beta1

In all tests the mod at the host is in ~/.local/share/warzone2100-3.3.0-beta1/mods/autoload

If the map is one of the stock (sk-rush and others) mod is displayed in the upper left corner, lobby and works for everyone in the game.

If the map is third-party (from ~/.local/share/warzone2100-3.3.0-beta1/maps/) when hosting a mod map, it is not displayed anywhere. But during the game, the mod will work for the host, but the clients do not.

What is the point of PIE version?

According to https://github.com/Warzone2100/warzone2100/blob/master/doc/PIE.md there are multiple PIE 3-only directives.

Yet there are multiple models in master with EVENTS and ANIMOBJECT directives which are still PIE 2.

ImdLoader is simply checking for 2 or 3 in version and not using this info for anything else (maybe passes down for points reading):

if (imd_version != PIE_VER && imd_version != PIE_FLOAT_VER)

Could you please clarify this situation? Should other editors support all directives for both PIE 2 and 3, since this is actual logic in wz since probably 2.x? With floating points being the only difference between them.

Re-implement materials directive in PIE

We have an idea how to make materials useful for artists.

  • it will be used per model LEVEL, not per PIE as it was before
  • it will allow to control emissive light (rgb)
  • it will allow to control shininess

Nothing more is currently useful to control. Other lights should better have default values for entire scene.

Should we start to work on this pull request or you have another plan for materials?

Compile Attempt on Manjaro from latest Source also fails build...

clean git pull from latest main branch leads to some problems with compile on Manjaro as well.
Here is the CLI DUMP
[andres@andres-pc warzone2100]$ make
make UTF8PROC_DEFINES=-DUTF8PROC_STATIC all-recursive
make[1]: Entering directory '/home/andres/Repositories/warzone2100'
Making all in win32
make[2]: Entering directory '/home/andres/Repositories/warzone2100/win32'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/andres/Repositories/warzone2100/win32'
Making all in 3rdparty/micro-ecc
make[2]: Entering directory '/home/andres/Repositories/warzone2100/3rdparty/micro-ecc'
depbase=echo uECC.o | sed 's|[^/]*$|.deps/&|;s|\.o$||';
gcc -DHAVE_CONFIG_H -I. -I../.. -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DDEBUG -DWZ_DATADIR=""/usr/local/share/warzone2100"" -DLOCALEDIR=""/usr/local/share/locale"" -I../.. -I../../3rdparty -I../../3rdparty/glm -I../../3rdparty/miniupnp -O0 -ggdb -Werror -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wcast-align -Wwrite-strings -Wpointer-arith -Wno-format-security -Wno-expansion-to-defined -Wstrict-prototypes -Wdeclaration-after-statement -Wno-switch -Wno-enum-compare -Wno-stringop-truncation -Wno-declaration-after-statement -UDEBUG -fstack-protector -fPIC -MT uECC.o -MD -MP -MF $depbase.Tpo -c -o uECC.o uECC.c &&
mv -f $depbase.Tpo $depbase.Po
rm -f libmicroecc.a
ar cru libmicroecc.a uECC.o
ar: u' modifier ignored since D' is the default (see `U')
ranlib libmicroecc.a
make[2]: Leaving directory '/home/andres/Repositories/warzone2100/3rdparty/micro-ecc'
Making all in 3rdparty
make[2]: Entering directory '/home/andres/Repositories/warzone2100/3rdparty'
make[2]: *** No rule to make target 'miniupnp/miniupnpc/miniupnpcstrings.h.in', needed by 'miniupnp/miniupnpc/miniupnpcstrings.h'. Stop.
make[2]: Leaving directory '/home/andres/Repositories/warzone2100/3rdparty'
make[1]: *** [Makefile:578: all-recursive] Error 1
make[1]: Leaving directory '/home/andres/Repositories/warzone2100'
make: *** [Makefile:498: all] Error 2
config.log

no ups for accuracy in the game does not work

No ups for accuracy in the game does not work. How many ups would you not do in the game absolutely all weapons remain with basic accuracy.
This is due to the fact that different names of the parameters are responsible for accuracy. In "weapons.json" this is "longHit" if its value is changed manually then the accuracy changes - this parameter is working.
In "research.json" this is "HitChance" and, logically, it should be "longHit" as in "weapons.json".
If you register "HitChance" in "weapons.json" and change the value manually or do ups for accuracy in the game, then no changes in accuracy.
If in “research.json” instead of “HitChance” you register “longHit” and change the value manually or make increases for accuracy in the game, then no change in accuracy will occur.

./configure error on Arch (Manjaro)

Error when running ./configure on ARCH:

config.status: executing depfiles commands
config.status: error: in /home/uft/Games/warzone2100': config.status: error: Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See config.log' for more details

config.log

bitcoin/bitcoin#14404 (comment)

this comment seems relevant to this situation: "automake 1.14.1p0 and 1.15.1 both work, this problem only happens with 1.16.1"

Lobby server returns timeout

I dont have white IP and opened ports so im using ssh tunnel to remote host where opened 2100 port by command ssh -N -R :2100:localhost:2100 host but lobby cant connect to me and saying timeout. (my friends connecting to me by host's IP and all works)
image
And my external IP is not IP i wanted (not host's IP)
So what i can do except buying white IP?

Fix Text display to show team chat.

With the new system you press ctrl/enter to start team chat but when you send too game you cant tell if its team or normal chat please put a Allies title to the chat display to all team memeber so we know its not in plane view.
Also is it possible to use the old method of using . to initiate team chat.

SemperFi has errors spam if SemperFi-JS is present in a match

If SemperFi-JS is active along with SemperFi, the later will spam an error:

error   |13:52:05: [scrResearchCompleted:7045] scrResearchCompleted: no such research topic
error   |13:52:05: [interpRunScript:758] interpRunScript: could not do func
error   |13:52:05: [interpRunScript:913] interpRunScript: *** ERROR EXIT *** (CurEvent=51)
error   |13:52:05: [interpRunScript:920] Original event ID: 15 (of 123)
error   |13:52:05: [interpRunScript:927] Current event ID: 51 (of 123)
error   |13:52:05: [interpRunScript:929] Call depth : 1
error   |13:52:05: [scrOutputCallTrace:1118]  *** Script call trace: ***
error   |13:52:05: [scrOutputCallTrace:1131] 1: N/A (current event)
error   |13:52:05: [scrOutputCallTrace:1146] 0: N/A (return address: 0x4c50bd0)
info    |13:52:05: [interpRunScript:937] interpRunScript: error while executing a script
info    |13:52:05: [interpRunScript:937] Assert in Warzone: interpreter.cpp:937 (!"error while executing a script"), last script event: 'N/A'
info    |13:52:05: [eventFireTrigger:1022] Event N/A: code failed
info    |13:52:05: [eventFireTrigger:1022] Assert in Warzone: event.cpp:1022 (false), last script event: 'N/A'

BSOD after game quit

Warzone 2100 version: 3.3.0 beta1 portable edition.

Problem: after I quit game, usually in 10 minute period Windows crash in BSOD with "Page Fault In Nonpaged Area" error. Reproduced this event 4 times in a row.

WZ logs are clear. Windows logs laso.

Video driver details:

Intel HD 4600 20.19.15.4549 video card.
NVIDIA GTX 850M 419.67 (latest).
Windows Version 10.0.17763 Build 17763.

Compile Attempt on Windows from Master Fails with Qt error.

Download of the latest master and attempts to build on windows after installing all the tools mentioned in the (Rather OLD) read me for windows. Qt is installed, but it's in a different spot in the directory tree, so unsurprisingly I get this error message running this cmake command in the appropriate directory.
// Begin Screen DUMP (CLI)
PS C:\Users\Andres M. P-R\Documents\GitHub> cmake -S .\warzone2100\ -B .\build
CMake Error at CMakeLists.txt:109 (find_package):
By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Qt5", but
CMake did not find one.

Could not find a package configuration file provided by "Qt5" with any of
the following names:

Qt5Config.cmake
qt5-config.cmake

Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
to a directory containing one of the above files. If "Qt5" provides a
separate development package or SDK, be sure it has been installed.

-- Configuring incomplete, errors occurred!
See also "C:/Users/Andres M. P-R/Documents/GitHub/build/CMakeFiles/CMakeOutput.log".
CMakeOutput.log

Lancer cyborg ignores damage upgrades.

When researching the 'rocket damage' update, the Lancer-cyborg damage is not changed.
No upgrade damage :
attack / 07:45: 48: [obj Damage:425] obj Damage (278): body: 1900, armor: 22, main damage: 80, actual damage: 53

With 1 damage upgrades:
attack / 07:46: 06: [obj Damage:425] obj Damage (278): body: 1847, armor: 22, main damage: 80, actual damage: 53

With 2 damage upgrades:
attack |07:49:32: [obj Damage:425] obj Damage(277): body: 1900, armour: 22, basic damage: 80, actualdamage: 53

PS. Lancer tank, everything works fine.

Unintialized shader variable warning

Using a newer computer cause the old one's power supply died with a big ole' POP sound. Anyway, I got this warning the first time I started Warzone (master + Linux):

error |02:37:15: [khr_callback:144] GL::SC(Other:High) : 0:18(36): warning: 'uv2' used uninitialized

Zoom is not accounted for on starting match

if you change the defaults for zoom parameters, it should take that into account, and fix it so when you start the map it is centered correctly.

this is what it looks like with the bug
image

Structures distorted textures and heigh to suit terrain

I would like to add images
wz2100-20190405_172107-Sk-Rush
See the amount of area showing to low side of bunker is more target available.
also the distorted structure.
wz2100-20190405_172052-Sk-Rush
See the high side of structure centre of structure is below ground so cant be destroyed from this side
wz2100-20190405_171820-Sk-Rush
See the wall structure how the texture is way distorted to suit terrain..

Error at the end of mission 26

Hello.

Mission 26 (sub_3_1).
I have a task: "The mountain range to the east should shield you from the blast." I killed all enemy units and buildings, but when all my units in the place marked as green ball, I got that there is some error. The content of this file:

--- Starting log [E:\apps\warzone2100\Warzone 2100 3.3.0-beta1\logs\WZlog-0701_093528.txt]---
info    |09:41:59: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |09:41:59: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |10:57:23: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |10:57:23: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |10:57:35: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |10:57:35: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |11:13:32: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |11:13:32: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |11:58:27: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |11:58:27: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |12:01:24: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |12:01:24: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |12:16:17: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |12:16:17: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |12:23:10: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |12:23:10: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |12:33:54: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |12:33:54: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |01:09:44: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |01:09:44: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
info    |02:23:40: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 1/0.
info    |02:23:40: [moveNextTarget:518] Assert in Warzone: c:\projects\warzone2100\src\move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'
error   |03:01:43: [js_removeObject:2427] Object id 26 not found belonging to player 3
error   |03:01:43: [callFunction:243] 0 : camSafeRemoveObject(obj = [object Object], flashy = true) at script/campaign/libcampaign.js:154
error   |03:01:43: [callFunction:243] 1 : nukeAndCountSurvivors() at script/campaign/cam3-1.js:140
error   |03:01:43: [callFunction:243] 2 : unitsInValley() at script/campaign/cam3-1.js:227
error   |03:01:43: [callFunction:243] 3 : camCheckExtraObjective() at script/campaign/libcampaign.js:2905
error   |03:01:43: [callFunction:243] 4 : __camVictoryOffworld() at script/campaign/libcampaign.js:3083
error   |03:01:43: [callFunction:243] 5 : __camTick() at script/campaign/libcampaign.js:3849
error   |03:01:43: [callFunction:243] 6 : <global>() at -1
info    |03:01:43: [callFunction:246] Uncaught exception calling function "__camTick" at line 154: ReferenceError: psObj failed in js_removeObject at line 2427
info    |03:01:43: [callFunction:246] Assert in Warzone: c:\projects\warzone2100\src\qtscript.cpp:246 (false), last script event: '<none>'

Is this possible to complete this mission without cheats?

Best regards,
Andrey.

netplay.cpp compilation error with ssprintf on linux

Hi, I'm looking into updating the Debian package to fix multiplayer hosting. Initially, I've just updated from v3.2.1 to v3.2.3, added libharfbuzz dependency and got this compilation error - I was wondering if you could help?

g++ -DHAVE_CONFIG_H -I. -I../..  -D_REENTRANT -I/usr/include/SDL2 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DNDEBUG -DWZ_DATADIR="\"/usr/share/games/warzone2100\"" -DLOCALEDIR="\"/usr/share/locale\"" -I../.. -I../../3rdparty  -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtScript -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5  -Wdate-time -D_FORTIFY_SOURCE=2 -DNDEBUG -g -Wno-enum-compare -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wcast-align -Wwrite-strings -Wpointer-arith -Wno-format-security -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/freetype2  -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtScript -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5 -g -O2 -fdebug-prefix-map=/build/warzone2100-3.2.3=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -std=c++11 -fstack-protector -c -o nettypes.o nettypes.cpp
In file included from ../../lib/framework/frame.h:44:0,
                 from netplay.cpp:26:
../../lib/framework/string_ext.h: In instantiation of 'int ssprintf(char (&)[N], const char*, P&& ...) [with unsigned int N = 512u; P = {}]':
netplay.cpp:1032:120:   required from here
../../lib/framework/string_ext.h:181:98: error: format not a string literal and no format arguments [-Werror=format-security]
 static inline int ssprintf(char (&dest)[N], char const *format, P &&... params) { return snprintf(dest, N, format, std::forward<P>(params)...); }
                                                                                          ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../lib/framework/string_ext.h: In instantiation of 'int ssprintf(char (&)[N], const char*, P&& ...) [with unsigned int N = 40u; P = {}]':
netplay.cpp:1040:36:   required from here
../../lib/framework/string_ext.h:181:98: error: format not a string literal and no format arguments [-Werror=format-security]

Server erroneously warns about outdated version (development builds)

When testing developer builds, the server prints a message encouraging
users to install a newer version of the game. Command line output of
warzone2100 --host:

error   |17:29:00: [readLobbyResponse:2106] Lobby error (406): Your version of the game is not supported any longer.
 Update your game version to 3.3.30today @ wz2100.net ! 

Screenshot of hosting screen (note that I have port forwarding issues):
server_warning

This issue is a new version of ticket:4721.

Default unit stance and targeting

When playing Skirmish:

Units prefer targeting other units and will pursue them if they move out of range. This is true even with sensor units which will follow any detected units that move to the edge of their range (This ended up with unarmed sensor units following enemies to their base).

To fix the following units to your own units demise problem, one needs to manually hit the hold position key (default=H) as the gui for hold, defend, and pursue have been removed, however this produces another problem. As stated before units prefer targeting other units specifically. Under the hold command many times they will not target structures (they MIGHT target armed structures but not always). Even when not under hold, units will not target structures in range, even armed ones, and will still pursue enemy units if they exist.

Under a commander unit, some tanks will not target anything even if the commander is firing (even without artillery), and the allied units are under fire. Happens more often when the commander is on hold position.

VTOLs equipped with non-AA capable weapons will target and begin to attack grounded enemy VTOLs (more importantly ones with likewise non-AA capable weapons) which will then take off, and both the allied and enemy VTOLs will circle each other in the air, going through the attack run turn around only to pass the enemy unit as none can fire. (End result was the allied unit and the group of enemy units were found across the map until the ally unit was ordered to enter an allied AA zone and the enemy units were gunned down.)

Move to Crowdin

I just saw de1742a and related commits.

Could someone point me to related discussions? To me, it seems @past-due decided that everyone should get a Crowdin account and work on the translation catalogs that way. I'm sure it's not like that. Maybe someone can shed some light on this.

PS: I realize this work is put into a separate branch.

Build Error

Severity Code Description Project File Line Suppression State
Error CMake Error: Error processing file: -DCMAKE_BUILD_TYPE=Debug
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe -G "Ninja" -DCMAKE_INSTALL_PREFIX:PATH="C:\Users\Andres M. P-R\CMakeBuilds\dfcf0d0b-018b-d13c-9254-424f09ab042e\install\x64-Debug" -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl.exe" -DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl.exe" -DCMAKE_PREFIX_PATH=C:\Qt\5.12.4\winrt_x64_msvc2017 -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake -PHYSFS_INCLUDE_DIR=vcpkg\ports\physfs -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_MAKE_PROGRAM="C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "C:\Users\Andres M. P-R\Documents\GitHub\warzone2100" returned with exit code: 1
CMake Error: Error processing file: -DCMAKE_BUILD_TYPE=Debug

psDroid->sMove.pathIndex out of bounds

Seen in a 4 player multiplayer game on Sk-Rush:

info    |00:00:39: [moveNextTarget:518] psDroid->sMove.pathIndex out of bounds 2/0.
info    |00:00:39: [moveNextTarget:518] Assert in Warzone: [...]/warzone2100/src/move.cpp:518 (psDroid->sMove.pathIndex >= 0 && psDroid->sMove.pathIndex < (int)psDroid->sMove.asPath.size()), last script event: '<none>'

(This was 2 AI and 2 human players - but with AI then attached to both human players.)

Build was the latest master, commit: e6aa879

Autorevision fails with shallow clones

Shallow clones not containing the revision "master" cannot be compiled
without the following error message:

fatal: ambiguous argument 'master..': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

The problem is caused by the following commands:

  • git rev-list --count master..
  • git rev-list master.. | tail -n 1

The following files contain them:

  • build_tools/autorevision
  • build_tools/autorevision.cmake
  • build_tools/autorevision.ps1

Attached is the output of make -j 6 after compiling #337 on Linux.

make_error.log

Compile hiccup on Windows

Download of the latest master and attempts to build on windows after installing all the tools mentioned in the (Rather OLD) read me for windows. Qt is installed, but it's in a different spot in the directory tree, so unsurprisingly I get this error message running this cmake command in the appropriate directory.
// Begin Screen DUMP (CLI)
PS C:\Users\Andres M. P-R\Documents\GitHub> cmake -S .\warzone2100\ -B .\build
CMake Error at CMakeLists.txt:109 (find_package):
By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Qt5", but
CMake did not find one.

Could not find a package configuration file provided by "Qt5" with any of
the following names:

Qt5Config.cmake
qt5-config.cmake

Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
to a directory containing one of the above files. If "Qt5" provides a
separate development package or SDK, be sure it has been installed.

-- Configuring incomplete, errors occurred!
See also "C:/Users/Andres M. P-R/Documents/GitHub/build/CMakeFiles/CMakeOutput.log".
CMakeOutput.log

Suicidal fire when positioned close to a target

A Super-Heavy Gunner commits suicide when standing closely behind a wall
and firing at it. Mortar and howitzer pits behave in the same manner.
This bug probably also occurs with other weapons, in similar situations.
It appears to be unrelated to #271 and is not solved by #337.

The attached ZIP file contains

  • a savegame with a heavily damaged Super-Heavy Gunner firing at a wall
  • a video showing its suicidal fire
  • a shell script generating the video from the savegame

suicidal_fire_documentation.zip

Droid lists being reversed when loading saves (Beta-end/Gamma-1 issue)

More specifically, we are caring about mission.apsDroidLists. The other lists being reversed
doesn't have any measurable impact on the game (that I can think of).

This just affects how the Gamma-1 first transporter load is determined. Now, what should happen, is the first set of units the player sends off from Beta-end should be the ones to appears when first arriving at Gamma-1. This works perfectly when not loading saves due to how the droid lists are "added" to. Note that I will be assuming four groups (the max) were sent off in this hypothetical situation.

"Adding" to a droid list pre-pends the linked lists like so (for visual purposes):

empty = []
first group = [1]
second = [2][1]
third = [3][2][1]
fourth = [4][3][2][1]

Now, when we win Beta-end, assuming no save reloads, the game simply reverses the mission.apsDroidLists[selectedPlayer]...

[1][2][3][4]

Then finds the transporter, fills it up with the first 10 units (if that many). And this works like we would want since group 1 is now in the front. However, loading a save, the droid lists takes on an order of...

[4][3][2][1] (as represented in the save file)

and starts "adding" them back to the relevant list in function loadGame()->loadSaveDroid(..., listToAddTo) (keep in mind the pre-pending)...

[1][2][3][4]

So the list is now, effectively, already reversed. To make things complicated, we sort transporters and commanders while loading these lists. Sorting the commanders causes another issue: The commanders being sorted breaks the order of the list...

[1][2][3][4][commanders] (if commanders are present)

Then, when the player wins the mission, the game reverses the above representation of mission.apsDroidLists[selectedPlayer]...

[commanders][4][3][2][1]

And then finds the transporter and starts sucking up the first 10 units for Gamma-1. This includes every commander plus parts of group 4 (the last group sent off).

And, to put the cherry on top, you can get your original group 1 again by simply loading a save and creating another save while on the reloaded save. Thus some people might not experience this bug at all if they reloaded a few more times, or, don't put any commanders into the transporter loads, or, whatever crazy combination happens.


To fix this issue we:

  • Elect not to sort commanders in the mission.apsDroidLists in loadSaveDroid() since commanders in this list don't have a group (they lose their group when embarking on a transporter).

And either:

  1. Save a reversed copy of mission.apsDroidLists just before we write them to file, or
  2. Reverse mission.apsDroidLists after we load a save at the end of a successful loadGame().

Which should fix this years old issue. Thoughts?

Below is a save that is a setup for Beta-end. Send off the transporter, turn on cheat mode, use the "let me win" cheat when offworld, and make sure to use the "biffer baker" cheat so the AI don't ruin any test results.

sub-2-8s.zip

Map radar goes off-screen.

Did a ton of digging and found that this was broken here http://developer.wz2100.net/ticket/4869

this looks so bad!
image

it did look like this before
image

That whole patch needs to be reverted, this is not the only map it does that crap on, and should be unacceptable. Don't even understand how anyone thought it was a good idea to change it.

I don't see a menu when loading old maps for 3.1.5 versions

in the game when you connect to the game should appear in the standard menu in the lower right corner
and it's not in there
:/
and version 3.1.5 I can not upload or I don't know where she is.

version 3.3.0 beta 1 played on maps of older versions
map: NTV-Speedv50

please fix the bug

Arabic text does look correct anymore

I was able to chat using Arabic text in-game and in the chat box before game starts.
Now Arabic letters does not connect to each other anymore.
Every letter is written isolated from other letters and letters are arranged from left to right.

Optional shaders directive for PIE files is partially broken

I'm trying to create custom shader to test some new effects but get 2 errors.
1)shaders directive no longer skip value 2 and trying to parse it.
pie.md has wrong info. Also, it says that both shaders have to be .vert

2)wz doesn't compile fragment shader that includes uniform sampler2D Texture
error |14:33:56: [printShaderInfoLog:179] Shader info log: 0(7) : warning C7583: Initialization of uniform variables requires #version 120 or later
but compiles vertex shader with uniform mat4 ModelViewProjectionMatrix

Is it harcoded to shaders that wz uses?

Restored weapon range feature isn't working

I started a new campaign with master version 3415bb9 to test Forgon's unit limit patch (#385) and you can't set the weapon range for the MG units. If you right click on the factory you can set the default range for the produced units but you can't change it when you right click on the combat unit.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.