Giter VIP home page Giter VIP logo

netpanzer / netpanzer Goto Github PK

View Code? Open in Web Editor NEW
17.0 4.0 3.0 75.01 MB

NetPanzer is an online multiplayer tactical warfare game designed for fast action combat. Join us on Discord: https://discord.gg/kCAB2CMswd

Home Page: https://netpanzer.io/

License: GNU General Public License v2.0

Python 0.26% Lua 0.94% C++ 95.62% Batchfile 0.01% Shell 1.11% Objective-C 0.55% Perl 0.02% Inno Setup 0.20% Meson 0.76% Dockerfile 0.06% C 0.50%
mesonbuild netpanzer rts-game gamedev gpl gaming multiplayer network-programming tank-game 2d-game

netpanzer's Introduction

Linux MacOS CodeQL

NetPanzer

Open Source RTS

Introduction

NetPanzer is an online multiplayer tactical warfare game designed for FAST ACTION combat. Gameplay concentrates on the core - no resource management is needed. The game is based on quick tactical action and unit management in real-time. Battles progress quickly and constantly as destroyed players respawn with a set of new units. Players can join or leave multiplayer games at any time.

20+ Years of Development

The original development of NetPanzer was done from PyroSoft inc. In 1999 they stopped development and released the game 2002 in GPL and it was nearly forgotten, until Ingo announced it at happypenguin.org. Soon after this announcement a group of coders did the linux port in roughly 2 weeks, with another 2 weeks polishing for the first release. Since then development has picked up and slowed down, with various different teams and maintainers. The current maintainer of the game and masterserver is "winrid" on GitHub.

To Play

Go to the Releases tab in GitHub and download the version for your OS. The version in Linux repos as of 2024 is very (8+yrs) old, so we suggest simply downloading the latest release directly.

Note: If you only are able to get v0.8.7 from your distribution, change the 'server.masterservers' value in your client.cfg and server.cfg to

server.masterservers = "netpanzer.io"

One we release our next official version, this will be done automatically and the newer version will be more accessible to you.

Latest Download

You can download the latest version here.

Weekly Linux AppImage is available here.

Note that the current RC version is considered unstable, however we are quickly approaching the 0.9.0 release and need your feedback and testing! All current servers (as of 2024) are running this version, so this is what you want if you want to play on a public server.

Contributing and Reporting Bugs

See CONTRIBUTING.md

Gameplay

An extensive list of commands is available in the Help section of NetPanzer binary, together with some useful tips and guides.

The same list is available while in game too - just press F1 key.

Dedicated Server and Configuration Files

See SERVER-HOWTO.md

Building NetPanzer

See BUILD.md

Music

Netpanzer doesn't come with own musicfiles yet. However, you can place your favourite .mp3, .ogg or .mod files into the sound/music directory and netpanzer will play these in random order while you play.

Contact

It's important to remember that any discussions about bugs or desired features in a chat room usually scroll away and become forgotten, so it's best to create a ticket or discussion on GitHub (mentioned above) if you really want a bug fix or new feature.

Unofficial

These areas are not moderated or maintained by the NetPanzer team. If looking for information about the game, always be sure to verify with official sources.

netpanzer's People

Contributors

andy5995 avatar dependabot[bot] avatar futes avatar jammyjamjamman avatar ph2708 avatar winrid avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar

netpanzer's Issues

Break apart README

I think the README is a bit long. Ok if I start breaking it up by moving the server info to docs/SERVER.md

Config file doesn't get created anymore

The game doesn't create a config file anymore. I removed my old '~/.netpanzer' directory a few days ago, and notice there's now nothing in the ~/.netpanzer/config directory (which did get created automatically), even though I've run the game several times.

Support for TTF Fonts

Added for historical record. This is done (mostly, only monospace fonts supported atm).

Server name is displayed as the value from player.name field in config

InfoSocket::InfoSocket(int p) : socket(nullptr)
{
    Address addr = Address::resolve( *GameConfig::server_bindaddress, p, false, true);
    socket = new network::UDPSocket(addr,this);

    // These parameters are fixed always
    // others I plan to be modifiable while game is running.
    std::stringstream s;
    s << "gamename\\netpanzer\\protocol\\" << NETPANZER_PROTOCOL_VERSION
      << "\\hostname\\" << *GameConfig::player_name
      << "\\gameversion\\" << Package::GetVersion();

WASM Build

Need to get WASM build working with Meson so I can put the game up on Netpanzer.io so you can play in-browser.

I will setup a build pipeline to publish the latest version when master is updated (handled in external build system ATM, I have this already).

So really just need to test and make code changes to get WASM working.

Slow, jerky movement when in full-screen, scrolling to the left

When in full-screen, and I move the mouse to the left, the movement is very slow and jerky.

Version c54b039
Manjaro Linux
Res: 1920x1080
Desktop: XFCE x11
Cpu Info: model name : Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz

01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050] (rev a1) (prog-if 00 [VGA controller])
	Subsystem: Gigabyte Technology Co., Ltd GP107 [GeForce GTX 1050]
	Flags: bus master, fast devsel, latency 0, IRQ 16
	Memory at de000000 (32-bit, non-prefetchable) [size=16M]
	Memory at c0000000 (64-bit, prefetchable) [size=256M]
	Memory at d0000000 (64-bit, prefetchable) [size=32M]
	I/O ports at e000 [size=128]
	Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
	Capabilities: [60] Power Management version 3
	Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
	Capabilities: [78] Express Legacy Endpoint, MSI 00
	Capabilities: [100] Virtual Channel
	Capabilities: [250] Latency Tolerance Reporting
	Capabilities: [128] Power Budgeting <?>
	Capabilities: [420] Advanced Error Reporting
	Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
	Capabilities: [900] Secondary PCI Express
	Kernel driver in use: nvidia
	Kernel modules: nouveau, nvidia_drm, nvidia

image

image

netpanzer-74.strace.log

Joining game leads to stack-buffer-overflow

I recompiled 0.9.0-RC6 with -fsanitize=address,undefined

After clicking "play" to join a game, I got the output:

rendering text Please wait... generating palettes
2024-01-07 11:55:32 Server IP received: [69.164.193.165:3031]
2024-01-07 11:55:32 Querying server [69.164.193.165:3031]
2024-01-07 11:55:32 Server IP received: [200.7.8.112:3031]
2024-01-07 11:55:32 Querying server [200.7.8.112:3031]
2024-01-07 11:55:32 Server IP received: [168.138.227.180:3031]
2024-01-07 11:55:32 Querying server [168.138.227.180:3031]
2024-01-07 11:55:32 Server IP received: [168.75.93.220:3031]
2024-01-07 11:55:32 Querying server [168.75.93.220:3031]
2024-01-07 11:55:32 Server IP received: [129.148.47.197:3031]
2024-01-07 11:55:32 Querying server [129.148.47.197:3031]
2024-01-07 11:55:32 Server IP received: [144.22.134.200:3031]
2024-01-07 11:55:32 Querying server [144.22.134.200:3031]
2024-01-07 11:55:33 Stopping queries to servers, no more servers
=================================================================
==24703==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7f1bbdf4d200 at pc 0x7f1bc0971003 bp 0x7fff75db4f10 sp 0x7fff75db46b8
READ of size 23 at 0x7f1bbdf4d200 thread T0
    #0 0x7f1bc0971002 in __interceptor_memcpy /usr/src/debug/gcc/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:899
    #1 0x558371cc9f69 in MapInterface::startMapLoad(char const*, char const*, bool, unsigned long) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x10d0f69) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #2 0x558371ce6031 in GameManager::startGameMapLoad(char const*, char const*, unsigned long) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x10ed031) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #3 0x558371cedfba in GameManager::startClientGameSetup(NetMessage const*, int*) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x10f4fba) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #4 0x558371c15119 in ClientConnectDaemon::connectFsm(NetMessage const*) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x101c119) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #5 0x558371c3ad97 in ClientMessageRouter::routeMessage(NetPacket const*) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x1041d97) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #6 0x558371c3b4d3 in ClientMessageRouter::routeMessages() (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x10424d3) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #7 0x558371d767dc in BaseGameManager::simLoop() (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x117d7dc) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #8 0x558371d74f33 in BaseGameManager::mainLoop() (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x117bf33) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #9 0x558371d69822 in PlayerGameManager::mainLoop() (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x1170822) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #10 0x558371c6d746 in netpanzer_main(int, char**) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x1074746) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #11 0x7f1bbfa6eccf  (/usr/lib/libc.so.6+0x27ccf) (BuildId: 8bfe03f6bf9b6a6e2591babd0bbc266837d8f658)
    #12 0x7f1bbfa6ed89 in __libc_start_main (/usr/lib/libc.so.6+0x27d89) (BuildId: 8bfe03f6bf9b6a6e2591babd0bbc266837d8f658)
    #13 0x558371b35314 in _start (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0xf3c314) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)

Address 0x7f1bbdf4d200 is located in stack of thread T0 at offset 512 in frame
    #0 0x558371cc9b4f in MapInterface::startMapLoad(char const*, char const*, bool, unsigned long) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x10d0b4f) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)

  This frame has 34 object(s):
    [48, 49) '<unknown>'
    [64, 65) '<unknown>'
    [80, 81) '<unknown>'
    [96, 97) '<unknown>'
    [112, 113) '<unknown>'
    [128, 129) '<unknown>'
    [144, 145) '<unknown>'
    [160, 161) '<unknown>'
    [176, 177) '<unknown>'
    [192, 193) '<unknown>'
    [208, 209) '<unknown>'
    [224, 225) '<unknown>'
    [240, 241) '<unknown>'
    [256, 257) '<unknown>'
    [272, 273) '<unknown>'
    [288, 289) '<unknown>'
    [304, 305) '<unknown>'
    [320, 321) '<unknown>'
    [336, 337) '<unknown>'
    [352, 384) '<unknown>'
    [416, 448) 'stpath' (line 55)
    [480, 512) 'tsname' (line 56) <== Memory access at offset 512 overflows this variable
    [544, 576) 'tsnamesub' (line 64)
    [608, 640) 'basepath' (line 66)
    [672, 704) '<unknown>'
    [736, 768) '<unknown>'
    [800, 832) 'cfgnamepath' (line 69)
    [864, 896) '<unknown>'
    [928, 960) '<unknown>'
    [992, 1024) '<unknown>'
    [1056, 1088) '<unknown>'
    [1120, 1144) 'subbuff' (line 58)
    [1184, 1440) 'path' (line 45)
    [1504, 1760) 'tile_set_path' (line 46)
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow /usr/src/debug/gcc/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:899 in __interceptor_memcpy
Shadow bytes around the buggy address:
  0x7f1bbdf4cf80: 00 00 00 00 f3 f3 f3 f3 00 00 00 00 00 00 00 00
  0x7f1bbdf4d000: f1 f1 f1 f1 f1 f1 f8 f2 f8 f2 f8 f2 01 f2 01 f2
  0x7f1bbdf4d080: 01 f2 01 f2 01 f2 01 f2 01 f2 01 f2 01 f2 01 f2
  0x7f1bbdf4d100: 01 f2 01 f2 01 f2 01 f2 01 f2 01 f2 f8 f8 f8 f8
  0x7f1bbdf4d180: f2 f2 f2 f2 00 00 00 00 f2 f2 f2 f2 00 00 00 00
=>0x7f1bbdf4d200:[f2]f2 f2 f2 00 00 00 00 f2 f2 f2 f2 00 00 00 00
  0x7f1bbdf4d280: f2 f2 f2 f2 00 00 00 00 f2 f2 f2 f2 00 00 00 00
  0x7f1bbdf4d300: f2 f2 f2 f2 00 00 00 00 f2 f2 f2 f2 00 00 00 00
  0x7f1bbdf4d380: f2 f2 f2 f2 00 00 00 00 f2 f2 f2 f2 00 00 00 00
  0x7f1bbdf4d400: f2 f2 f2 f2 00 00 00 00 f2 f2 f2 f2 00 00 00 f2
  0x7f1bbdf4d480: f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==24703==ABORTING

Clang build failing when C++ flag is used to compile C

Note the clang build fails at https://github.com/netpanzer/netpanzer/actions/runs/7390619698/job/20105882173#step:6:2657

clang -o build/release/src/Lib/lua/lopcodes.o -c -DPACKAGE_VERSION=\"0.9.0-RC6\" -std=c++17 -O2 -s -Wall -Isrc/Lib/lua src/Lib/lua/lopcodes.c
clang: warning: argument unused during compilation: '-s' [-Wunused-command-line-argument]
error: invalid argument '-std=c++17' not allowed with 'C'
scons: *** [build/release/src/Lib/lua/lopcodes.o] Error 1

UI Component Library

Switch to a nice library of third party components for UI inputs, buttons, tables, etc.

Build Pipeline

Once dev is merged into master, we should work on having an automatic build pipeline for windows and linux.

Add Issue Template

It might be useful to add an issue template that prompts the user to enter info that's needed to report bugs, such as

  • Windowing system (x11, wayland, other)
  • Desktop
  • OS
  • SDL version

Along with instructions for running utilities that output info about their video hardware.

Implement map ping

There should be a way to ping a location on the map, to make it "flare" briefly so that only your teammates can see.

Redo Bot AI

Someone should look into improving some things about bots:

  1. Bot turrets don't need to turn to shoot at you. They can do the equivalent of an immediate 180 in an FPS game.
  2. Bots could be more human-like. This could be a fun project.

Community/Discord Notifications

Assuming at some point there could be a "netpanzer discord" chat server, we could have a discord integration that posts to a chat room saying when someone joins a game.

The game itself would not be tied directly to Discord, but the server could support a configurable "notifications" endpoint to send events to, which could be used to build these kinds of things.

Using scons with the datadir option is broken

This will be fixed if I can get #71 working.

Using the datadir option with meson is being worked on in #71. It's supposed to already work scons, as is mentioned in the README.

On the master branch, it seems netpanzer can't find the datadir when built with scons:

scons -j 4 datadir=$HOME/.local/share/netpanzer

mkdir ~/.local/share/netpanzer

cp -a {cache,fonts,maps,pics,powerups,scripts,sound,wads} ~/.local/share/netpanzer

cp netpanzer ~/.local/bin

cd ~/.local/bin

[andy@prometheus bin]$ ./netpanzer 
Could not renderText() Please wait... generating palettes Passed a NULL pointer
netpanzer: src/Lib/2D/Surface.cpp:353: void Surface::blt(Surface&, int, int) const: Assertion `getDoesExist()' failed.
Received signal SIGABRT(6)
aborting and trying to shutdown.
Aborted (core dumped)

Refactor code that finds the datadir

This should fix #58 and the problem mentioned with the appimage in #60

Something like this might be useful

Ultimate goal:

  1. Absolute paths ok, but no hard-coded paths
  2. If getenv(APPDIR) != NULL, prepend $APPDIR to datadir
  3. if getenv(NETPANZER_DATADIR) != NULL, use it (can be either a relative or absolute path)
  4. implement --datadir cli option for netpanzer binary

TBH, I'm not sure yet if number 3 is really needed. Though probably easy to implement after the rest is done.

Using del or backspace when editing name field leads to memory overlap

I recompiled 0.9.0-RC6 with -fsanitize=address,undefined

To Reproduce

I clicked "Join" and then clicked in the field several times, then typed a few characters and pressed the 'del' key

Output was

rendering text Please wait... generating palettes
2024-01-07 11:50:52 Server IP received: [69.164.193.165:3031]
2024-01-07 11:50:52 Querying server [69.164.193.165:3031]
2024-01-07 11:50:52 Server IP received: [200.7.8.112:3031]
2024-01-07 11:50:52 Querying server [200.7.8.112:3031]
2024-01-07 11:50:52 Server IP received: [168.138.227.180:3031]
2024-01-07 11:50:52 Querying server [168.138.227.180:3031]
2024-01-07 11:50:52 Server IP received: [168.75.93.220:3031]
2024-01-07 11:50:52 Querying server [168.75.93.220:3031]
2024-01-07 11:50:52 Server IP received: [129.148.47.197:3031]
2024-01-07 11:50:52 Querying server [129.148.47.197:3031]
2024-01-07 11:50:52 Server IP received: [144.22.134.200:3031]
2024-01-07 11:50:52 Querying server [144.22.134.200:3031]
2024-01-07 11:50:52 Stopping queries to servers, no more servers
=================================================================
==23056==ERROR: AddressSanitizer: memcpy-param-overlap: memory ranges [0x6030000389b4,0x6030000389bb) and [0x6030000389b5, 0x6030000389bc) overlap
    #0 0x7f925a4efe16 in __interceptor_memcpy /usr/src/debug/gcc/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:899
    #1 0x5617452feebc in cInputField::addExtendedChar(int) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x1417ebc) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #2 0x5617452df719 in View::processEvents() (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x13f8719) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #3 0x56174527c3e7 in Desktop::manage(int, int, int) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x13953e7) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #4 0x5617450569ae in PlayerGameManager::inputLoop() (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x116f9ae) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #5 0x5617450630cc in BaseGameManager::mainLoop() (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x117c0cc) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #6 0x561745057822 in PlayerGameManager::mainLoop() (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x1170822) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #7 0x561744f5b746 in netpanzer_main(int, char**) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x1074746) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)
    #8 0x7f92595edccf  (/usr/lib/libc.so.6+0x27ccf) (BuildId: 8bfe03f6bf9b6a6e2591babd0bbc266837d8f658)
    #9 0x7f92595edd89 in __libc_start_main (/usr/lib/libc.so.6+0x27d89) (BuildId: 8bfe03f6bf9b6a6e2591babd0bbc266837d8f658)
    #10 0x561744e23314 in _start (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0xf3c314) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)

0x6030000389b4 is located 4 bytes inside of 21-byte region [0x6030000389b0,0x6030000389c5)
allocated by thread T0 here:
    #0 0x7f925a571182 in operator new[](unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:98
    #1 0x5617452faac1 in cInputFieldString::init(char const*, int, int) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x1413ac1) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)

0x6030000389b5 is located 5 bytes inside of 21-byte region [0x6030000389b0,0x6030000389c5)
allocated by thread T0 here:
    #0 0x7f925a571182 in operator new[](unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:98
    #1 0x5617452faac1 in cInputFieldString::init(char const*, int, int) (/home/andy/src/netpanzer/netpanzer-0.9.0-RC-6/netpanzer+0x1413ac1) (BuildId: 178ad7a81f83f5cdda90544113090cf53b08f21c)

SUMMARY: AddressSanitizer: memcpy-param-overlap /usr/src/debug/gcc/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:899 in __interceptor_memcpy
==23056==ABORTING

NodeJS MasterServer Server Library

We need a server-side library for NodeJS that allows getting the server list.

  1. Create new Repo: api-clients
  2. Create new NodeJS Library

We can create clients for other languages in the future, like PHP. Node is picked here as an upcoming site will be in NodeJS, and also our Discord bot will be too.

Remove a few lines from the credits screen and fix URL

Ok if I do some work on the Credits screen?

// Is having the game description here really necessary? And isn't
// the version info already available at the main menu?
char line[512];
insert("");
snprintf (line, sizeof line, " This is %s v. %s, a massively multiplayer", Package::GetName().c_str(), Package::GetVersion().c_str());
insert(line);
insert(" tank battle game.");
insert("");
insert(" This application is free software under the terms of the");
insert(" Gnu General Public license (GPL). See the COPYING file for details.");
insert("");
insert(" Source and binaries at: http://netpanzer.sourceforge.net/");
insert("");
insert(" Please visit www.NETPANZER.info");
insert(" - for binaries, maps, flags, related tools and news");
insert(" - and don't forget to register your nickname for the ranking");
insert("");
insert(" Current Development Team");
insert(" - Devon Winrick (winrid)");
insert(" - Fulvio Testi (fu)");
insert("");

The URL is still SourceForge.

I'd like to remove the description and version because it seems like it's not necessary (goal is to reduce code maintenance). I feel that if someone is looking at the credits screen, they've already read the game description somewhere else.

As for the URL, should I make a Package::GetUrl function?

Change main menu

Discussed in #96

Originally posted by andy5995 January 10, 2024
I'm not fond of this bright red screen. Are there plans for this screen? Like an image? Or can we reduce the brightness of that REDness?

image

Windows Build

Get compiling Windows build working to distribute 0.9.0-RC binary since people are asking to play. Does not require build flow for this task, just get manual build working first.

Bugs reported

Release 0.9.0-RC-5

Operational System: Windows 10 Pro

1º When changing the resolution, the mouse sometimes no longer moves, having to close the game and open it again.

2º In the chat, the alignment of the player's flag and the text are not aligned.

3º Blurry letters.

Screenshot_1 Screenshot_2 Screenshot_3

Fix Potential Overflows

src/NetPanzer/Views/Game/VehicleSelectionView.cpp: In static member function ‘static void VehicleSelectionView::drawMiniProductionStatus(Surface&)’:
src/NetPanzer/Views/Game/VehicleSelectionView.cpp:593:53: warning: ‘%s’ directive writing up to 255 bytes into a region of size 249 [-Wformat-overflow=]
  593 |                 sprintf(outpostUserNameBuf, "Owner: %s...", strBuf);
      |                                                     ^~      ~~~~~~
src/NetPanzer/Views/Game/VehicleSelectionView.cpp:593:24: note: ‘sprintf’ output between 11 and 266 bytes into a destination of size 256
  593 |                 sprintf(outpostUserNameBuf, "Owner: %s...", strBuf);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/NetPanzer/Views/Game/VehicleSelectionView.cpp:611:40: warning: ‘...’ directive writing 3 bytes into a region of size between 1 and 256 [-Wformat-overflow=]
  611 |             sprintf(outpostNameBuf, "%s...",  strBuf);
      |                                        ^~~
src/NetPanzer/Views/Game/VehicleSelectionView.cpp:611:20: note: ‘sprintf’ output between 4 and 259 bytes into a destination of size 256
  611 |             sprintf(outpostNameBuf, "%s...",  strBuf);

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.