Giter VIP home page Giter VIP logo

betterspades's Introduction

Build Status Discord GPL DonateBTC

GPL v3

BetterSpades

  • Replicate of the great game Ace of Spades (classic voxlap)
  • runs on very old systems back to OpenGL 1.1 (OpenGL ES support too)
  • shares similar if not even better performance to voxlap
  • can run on "embedded" systems like a Steam Link

Why should I use this instead of ...?

  • free of any Jagex code, they can't shut it down
  • open for future expansion
  • easy to use
  • no hidden bugs

Quick usage guide

As of right now, you can download the newest stable version from the releases page.

You can get nightly builds here.

You can either:

  • use the client temporarily by extracting the downloaded zip into a new directory.
  • extract all contents to your current Ace of Spades installation directory (normally found at C:/Ace of Spades/), effectively replacing the old voxlap version

System requirements

Type min. requirement
OS Windows 98 or Linux
CPU 1 GHz single core processor
GPU 64MB VRAM, Mobile Intel 945GM or equivalent
RAM 256MB
Display 800x600px
Others Keyboard and mouse
Dial up network connection

Build requirements

This project uses the following libraries and files:

Name License Usage GitHub
GLFW3 ZLib OpenGL context Link
OpenAL soft LGPL-2.1 3D sound environment Link
inih BSD-3.Clause .INI file parser Link
stb_truetype Public domain TrueType font renderer Link
dr_wav Public domain wav support Link
http Public domain http client library Link
LodePNG MIT png support Link
libdeflate MIT decompression of maps Link
enet MIT networking library Link
parson MIT JSON parser Link
log.c MIT logger Link
GLEW MIT OpenGL extensions Link
hashtable MIT hashtable Link
libvxl MIT access VXL format Link
microui MIT user interface Link

You will need to compile the following by yourself, or get hold of precompiled binaries:

  • GLFW3
  • GLEW
  • OpenAL soft (only needed on Windows)
  • libdeflate
  • enet

Follow the instructions on their project page, then place produced static libraries in deps/.

All other requirements of the above list (like single file libs) will be downloaded by CMake automatically and don't need to be taken care of. Because state of copyright of 0.75 assets is unknown, CMake will also download additional assets from here which are not part of this repository.

Windows

This project uses CMake to generate all Makefiles automatically. It's best to use MinGW-w64 for GCC on Windows. You can generate the required files by opening cmd.exe in the build/ directory and typing:

cmake -G "MinGW Makefiles" ..
mingw32-make

If everything went well, the client should be in the build/BetterSpades/ subfolder.

When starting client.exe, you will be greeted by a server list. Select a server on it to start playing! You can also start the client the same way as you did with the voxlap version by opening cmd and putting an aos:// link in as the first argument:

client.exe -aos://16777343:32887 //Connects to a local server

Linux

Compilation now works the same on Linux. Just change the build system to Unix Makefiles or leaving it as default will work too (cmake ..).

You can build each library yourself, or install them with your distro's package manager:

sudo apt install libgl1-mesa libgl1-mesa-dev libopenal1 libopenal-dev libglfw-dev libenet-dev libglew-dev

(this does not include libdeflate which is a requirement too, see Wiki/Building for more details)

Start the client e.g. with the following inside the build/bin/ directory:

./client

Or connect directly to localhost:

./client -aos://16777343:32887

macOS

The same instructions for Linux work on macOS aside from some minor differences. First, use Homebrew or MacPorts to grab dependencies:

brew install glfw enet

The development headers for OpenAL and OpenGL don't have to be installed since they come with macOS by default. libdeflate should be installed and placed manually in a way similar to Linux. See Wiki/Building for more details.

Gallery


quite old

hiesville

grenade fun

falling block animation

sniping on normandie

betterspades's People

Contributors

calinou avatar dany-on-demand avatar feikname avatar groggone avatar haxk20 avatar iamgreaser avatar kuunikal avatar notafile avatar teodor6140 avatar vuolen avatar win8linux avatar xtreme8000 avatar yvt avatar

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

betterspades's Issues

Technical Support help (load and save .vxl maps):

Hello, it's a technical question. With this, i want to know how the vxl engine that uses betterspades to load and save maps work... because i want to load ".vxl" maps in my project called Battlexel (https://github.com/Edgamer63/Battlexel), to load ".vxl" maps into map editor (my project)... I think i know that AoS (Original) & BetterSpades uses maps dimensions of [x,y,z]: 512,512,64...

What i want to know from a simple map (vxl), is the count of total blocks in map, the position of all ones [x,y,z], and the color (24 bit (RGB)).

And how to save to vxl map.

I have an example of how my map engine save maps more easily to understand and with a very smaller size.


for example, the block id here is 70:

The high, in this case, is the "Z" position.

color_x and color_y are based on colors of block palette (i will implement RGB colors Support anyways xD):

X
Y

vxl_70_high="0"
vxl_70_color_y="2"
vxl_70_color_x="4"
vxl_70_y="6"
vxl_70_x="12"

in this case the block have a high of 0 (floor), position x,y : (12,6) and color red .

Well, this applies to all items in a map... because it can be used for intels locations, base locations, even choppers, tanks and mg xD.

For example:

Base_1_x = "50"
Base_1_y = "50"
Base_1_high = "3"
Base_1_team = "2"

Base pos is [x,y] = 50,50, with high of 3 blocks and team is "2" (Green).


Thats it, could you help me? :3 , i still being newbie in programming hahah ... but all i want to do, is to expand the game more... because i think my project would support very big huge maps created by community.

Can I get edit rights to the Wiki?

I would like to create some wiki pages regarding controls and compilation/installation on linux. Please invite me as a member of the repository or make the wiki public.

Suggestion! Add new shadow option for models

Well, this is an idea to make BetterSpades more beautiful... to add an option to load non super shading kv6 models to next release in the year or when you want. xD

image

Pls reply... I really want to help with ideas :) Keep up your work friend! :D

PS: I thought of this idea, just because I made Deuce graphics like this and more, but not using Ken Silverman's engine. In my own Project that I dev for years, (and I keep doing) called : "Battlexel" โ„ข (AoS related but in 2D!)

Using data types as per the C99 standard

The project already uses features defined in the C99 standard such as single line comments (// comment). Some required 3rd party libraries already use C99 data types. Thus using them in BetterSpades itself would make sense.

stdbool.h defines the boolean type and macros for true and false
stdint.h defines fixed width integer types

For example the code uses the unsigned char type on multiple occasions to indicate a single byte number between 0-255. The corresponding standard type would be uint8_t which would document the contents of the variable since it is not a character as a char would imply.

Please add support for Version Get and Version Send packets

Those are extensions to the 0.75 protocol supported by PySnip and piqueserver (perhaps even pyspades) that allow the server to query the client name and version and a few other things, as specified here.

While not very useful right now, except for statistical purposes, it can be used in the future to improve UX and for new features via feature flags while optionally remaining backwards compatible (e.g. an "all vs boss" server checking if a given client supports Entity packets as you proposed and otherwise kicking the player)

I can't compile this program

I installed all the libraries, manually moved, renamed, and uncommented all the things you needed me to, and it still does not compile.

Here's the console output I get when I try to run make:

[  3%] Linking C executable bin/client
CMakeFiles/client.dir/src/window.c.o: In function `window_fromsettings':
window.c:(.text+0x518): undefined reference to `glfwSetWindowMonitor'
window.c:(.text+0x54f): undefined reference to `glfwSetWindowMonitor'
CMakeFiles/client.dir/src/main.c.o: In function `keys':
main.c:(.text+0x18fd): undefined reference to `glfwSetWindowMonitor'
main.c:(.text+0x1950): undefined reference to `glfwSetWindowMonitor'
CMakeFiles/client.dir/src/config.c.o: In function `config_reload':
config.c:(.text+0x1dcf): undefined reference to `ini_parse'
CMakeFiles/client.dir/src/hud.c.o: In function `hud_controls_render':
hud.c:(.text+0x4d06): undefined reference to `glfwGetKeyName'
hud.c:(.text+0x4d1f): undefined reference to `glfwGetKeyName'
CMakeFiles/client.dir/src/hud.c.o: In function `hud_serverlist_render':
hud.c:(.text+0x98bc): undefined reference to `json_parse_string'
hud.c:(.text+0x98c4): undefined reference to `json_value_get_array'
hud.c:(.text+0x98d0): undefined reference to `json_array_get_count'
hud.c:(.text+0x9930): undefined reference to `json_array_get_object'
hud.c:(.text+0x9969): undefined reference to `json_object_get_number'
hud.c:(.text+0x9999): undefined reference to `json_object_get_number'
hud.c:(.text+0x99c9): undefined reference to `json_object_get_number'
hud.c:(.text+0x99f1): undefined reference to `json_object_get_string'
hud.c:(.text+0x9a14): undefined reference to `json_object_get_string'
hud.c:(.text+0x9a37): undefined reference to `json_object_get_string'
hud.c:(.text+0x9a5a): undefined reference to `json_object_get_string'
CMakeFiles/client.dir/src/network.c.o: In function `read_PacketStateData':
network.c:(.text+0x142b): undefined reference to `libdeflate_alloc_decompressor'
network.c:(.text+0x1468): undefined reference to `libdeflate_zlib_decompress'
network.c:(.text+0x151a): undefined reference to `libdeflate_crc32'
network.c:(.text+0x1588): undefined reference to `libdeflate_free_decompressor'
CMakeFiles/client.dir/src/sound.c.o: In function `sound_load':
sound.c:(.text+0x929): undefined reference to `drwav_open_and_read_file_s16'
collect2: error: ld returned 1 exit status
CMakeFiles/client.dir/build.make:718: recipe for target 'bin/client' failed
make[2]: *** [bin/client] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/client.dir/all' failed
make[1]: *** [CMakeFiles/client.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Everything it needs is installed or in the src folder outside of build/. There's no reason on my end for it to fail, at least not one that I can see. What am I doing wrong?

Switching tools while reloading doesn't cancel the reload process

To reproduce this bug simply start reloading a gun and switch, for example to grenades or any other tool.

After the reload time elapsed and you switched back to the gun, it's already reloaded, but it shouldn't be because the reload process should have been canceled when you choose another tool during the reload process.

There is no way to enter custom server addresses anymore

Previously, it was possible to do ./client -<address> to connect to private servers (unlisted, localhost, LAN party, etc), but now this is no longer possible.

I suggest re-adding both the old method and a new user input textbox in the server browser.

Weapon Packets Bug

Well i see a really important Bug in the Last Release, that is a Weapon-Packet Error, or imprecisions.

https://youtu.be/Av72lmX5xBc

well, this happens after I tried to change my weapon, so it does, but... this is the bug that happens, and i'm not really sure why, but i notice it because it will improve a bit more the game performance.

It's really strange, it suddenly change from SMG, to the last weapon , that in this case is RIFLE.

Well, Keep Going on with this amazing work :D , i will support you as i can.

cannot compile on rpi 3B raspbian

UPDATE: i added -ldeflate to link.txt in build/CMakeFiles/client.dir/link.txt and now deflate issues is gone but it still fails at drwav:

CMakeFiles/client.dir/src/sound.c.o: In function sound_load': sound.c:(.text+0x908): undefined reference to drwav_open_and_read_file_s16'
collect2: error: ld returned 1 exit status

line 9 in dr_wav.h is not the #define statement and the file also has deprecation warning in it
(drwav_open_and_read_s16() should be drwav_open_and_read_pcm_frames_s16() according to it)

Chat beta v0.1.3

I'm playing normally more every time I'm going to type something in the chat the first letter does not appear but only appears from the 2nd onwards only this happened weird

I suggest 2 things :3

if(local_player_ammo==0) {

Hello my friend! :D ...

  • I suggest to write the "reload" text, more upper, because the weapon aim, like "smg.png" are drawn on the text, and normal player will not be allowed to see the text of "Reload". In this example, you could see only "Eloa", and not the whole word "Reload".

  • And, I don't know where the keyboard checking is, but... I recommend to delete the first char in a lapse after the key checking of the chat message, because if you press the "T"(Global Message by default), shows the message line, but with an unwanted letter "t" on first character. Also on the Team message it is the same case, but with letter "y". That's why I recommend to delete the first character.

Player velocity is not added to thrown grenade velocity

in the AoS classic and OpenSpades clients, grenade velocity is player orientation + player velocity.

for instance, this line (i think?)

g.vx = (g.fuse_length==0.0F)?0.0F:players[local_player_id].orientation.x;

should be something like
g.vx = (g.fuse_length==0.0F)?0.0F:(players[local_player_id].orientation.x+players[local_player_id].physics.velocity.x);

Use git submodules for dependencies

Having to check out everything manually and copy everything manually makes this a bit of a pain. I'm doing it right now but if you'd like I could help clean that up so nobody else has to put up with the somewhat fragile approach that has to be done at the moment.

Cannot build: glx.h:42:8: error: unknown type name ''

I am trying to build the newest version (0.1.3) and it gives me tons of errors regarding "glx.h".
I can't find anything related to this error online, and I was hoping for some help.

You can see the errors below:

C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:26:8: error: unknown type name 'PFNGLGENBUFFERSPROC'
 extern PFNGLGENBUFFERSPROC glGenBuffers;
        ^~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:27:8: error: unknown type name 'PFNGLDELETEBUFFERSPROC'
 extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
        ^~~~~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:28:8: error: unknown type name 'PFNGLBINDBUFFERPROC'
 extern PFNGLBINDBUFFERPROC glBindBuffer;
        ^~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:29:8: error: unknown type name 'PFNGLBUFFERDATAPROC'
 extern PFNGLBUFFERDATAPROC glBufferData;
        ^~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:31:8: error: unknown type name 'PFNGLCREATESHADERPROC'
 extern PFNGLCREATESHADERPROC glCreateShader;
        ^~~~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:32:8: error: unknown type name 'PFNGLSHADERSOURCEPROC'
 extern PFNGLSHADERSOURCEPROC glShaderSource;
        ^~~~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:33:8: error: unknown type name 'PFNGLCOMPILESHADERPROC'
 extern PFNGLCOMPILESHADERPROC glCompileShader;
        ^~~~~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:34:8: error: unknown type name 'PFNGLCREATEPROGRAMPROC'
 extern PFNGLCREATEPROGRAMPROC glCreateProgram;
        ^~~~~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:35:8: error: unknown type name 'PFNGLATTACHSHADERPROC'
 extern PFNGLATTACHSHADERPROC glAttachShader;
        ^~~~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:36:8: error: unknown type name 'PFNGLLINKPROGRAMPROC'
 extern PFNGLLINKPROGRAMPROC glLinkProgram;
        ^~~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:37:8: error: unknown type name 'PFNGLUSEPROGRAMPROC'
 extern PFNGLUSEPROGRAMPROC glUseProgram;
        ^~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:39:8: error: unknown type name 'PFNGLUNIFORM1FPROC'
 extern PFNGLUNIFORM1FPROC glUniform1f;
        ^~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:40:8: error: unknown type name 'PFNGLUNIFORM3FPROC'
 extern PFNGLUNIFORM3FPROC glUniform3f;
        ^~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:41:8: error: unknown type name 'PFNGLUNIFORMMATRIX4FVPROC'
 extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
        ^~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\Rosimeire\Downloads\BetterSpades-standalone (2)\BetterSpades-standalone\src\glx.h:42:8: error: unknown type name 'PFNGLGETUNIFORMLOCATIONPROC'
 extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;

How do I play it (after compiled)

Uhm, I have a question. It's simple, how do I play it after compiled?
I press F2 and the game shows like a normal aos, without any block and with an aqua background color, and a super-bugged SMG xD.

Compiler warning in `camera.c` regarding the uses of `abs` on FP values - potential bug

/Users/nyan/Programs/Games/BetterSpades/src/camera.c:224:18: warning: using integer absolute value function 'abs' when argument
      is of floating point type [-Wabsolute-value]
        int xr = abs(errx);
                 ^
/Users/nyan/Programs/Games/BetterSpades/src/camera.c:224:18: note: use function 'fabsf' instead
        int xr = abs(errx);
                 ^~~
                 fabsf
/Users/nyan/Programs/Games/BetterSpades/src/camera.c:225:18: warning: using integer absolute value function 'abs' when argument
      is of floating point type [-Wabsolute-value]
        int yr = abs(erry);
                 ^
/Users/nyan/Programs/Games/BetterSpades/src/camera.c:225:18: note: use function 'fabsf' instead
        int yr = abs(erry);
                 ^~~
                 fabsf
/Users/nyan/Programs/Games/BetterSpades/src/camera.c:226:18: warning: using integer absolute value function 'abs' when argument
      is of floating point type [-Wabsolute-value]
        int zr = abs(errz);
                 ^
/Users/nyan/Programs/Games/BetterSpades/src/camera.c:226:18: note: use function 'fabsf' instead
        int zr = abs(errz);
                 ^~~
                 fabsf
3 warnings generated.

Fonts not scaled properly

Even with default resolution, the larger Fixedsys font does not seem to be rendering at correct scale.

image

When the window is set to fullscreen, the same scaling problem occurs for the small chat font as well.

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.