OpenArena Message Boards

id Tech 3 => Engine => Topic started by: stigmha on January 16, 2014, 06:41:43 AM



Title: Does the engine even build anymore?
Post by: stigmha on January 16, 2014, 06:41:43 AM
Hi

I have spent quite some time attempting to build the engine on various modern platforms with different results, and I would truly appreciate any help.

Background

I started off by being lazy and doing things the wrong way; skimming through the Wiki and by downloading a copy of the game engine source and the QVM's source. I quickly found the Visual Studio project in /misc/msvc/ioq3.sln and opened it in Visual Studio 2012 on a Windows 8 machine. It converted the project to VS12 format and I eventually managed to get the engine to build and run (I later got it to work in VS13 too). I made a few modifications to the engine with positive results, but problems arise once I started working on the source of the VMs in the VS12 project. I managed to compile them in to dlls and made the engine load them on launch, but I experienced multiple bugs. One being that every bot renamed to "scoreboard" and became a spectator immediately after connecting to the game. I delved into the code, found the source of the problem and decided to compare this file with its equivalent in the QVMs project; they were different. I realized that the QVM code in the engine's Visual Studio project are terrible outdated, and that the VS project (.sln file) is leftovers from ioquake3. I will suggest to remove it from the source of OA, as it is merely useless and leads to confusion.

I decided to do it the right way from now on and started to read your forums in detail.

Windows 7/8

I followed all your instructions on the Coding section of the DO NOT LINK[/b]) h t t p s : / / openarena . wikia . com/wiki/DeveloperFAQ#Coding]DeveloperFAQ (http://([b); Installed MinGW with the specified packages, modified the cross-make-mingw.sh, and entered the engine's root directory in a "MinGW Shell" instance. I then ran "sh cross-make-mingw.sh". It compiled successfully, but the linker (LD) gives the following errors:

Code:
LD build/release-mingw32-x86/openarena.x86.exe
code/libs/win32/libcurl.a(strequal.o):strequal.c:(.text+0x14): undefined reference to 'strcasecmp'
code/libs/win32/libcurl.a(strequal.o):strequal.c:(.text+0x48): undefined reference to 'strncasecmp'
collect2.exe: error: ld returned 1 exit status

I spent almost a day Googling, reading and attempting to fix this issue with no luck. The only references I found to the functions strcasecmp and strncasecmp in the engine's source are the prototypes defined in /code/libcurl/curl/stdcheaders.h. So I disassembled libcurl.a and found a call to _strcasecmp in the function _curl_strequal and _strncasecmp in _curl_strnequal, none which are implemented in the libcurl.a itself. I have currently no clue on how to fix this, anyone?

OSX Mavericks (10.9.1)

I had already installed the latest version of XCode with the command line tools installed. There is a XCode project file available in the project's source but it also looks like some ioquake3 leftovers that haven't been modified to be compliant with OpenArena, so I ignored it. I yet again followed the Wiki and ran "make". Result:

Code:
error: unknown target CPU 'prescott'
>:(

I Googled it, found this in the Makefile: "OPTIMIZEVM += -march=prescott -mfpmath=sse" and changed prescott to native: "OPTIMIZEVM += -march=native -mfpmath=sse". So I ran make again and everything seemed to work until:

Code:
code/qcommon/vm_x86.c:86:23: error: initializer element is not a compile-time constant
static  int             ftolPtr = (int)qftol0F7F;

(http://data2.whicdn.com/images/57879386/desk_20flip_thumb.jpg)

I played a bit in the code and Googled the error, but without any success. I honestly didn't gave it much effort as I was quite sick of these issues, I wanted to try Linux next. Any OSX gurus out there who know a quick fix?

Ubuntu 13.10

Yet again back to your wiki, and I made sure all dependencies in your list were installed before I tried to build it. I did find it a bit strange that your Wiki states libsdl2-dev when I knew OA uses SDL 1.2 and not SDL 2, but I decided to try anyways. "make" resulted in duplicate errors as code/SDL12/include/SDL_config_minimal.h declares typedef unsigned int size_t which is already declared in one of the includes. My quick fix was to comment out this line, but then I got compilation errors on unknown type size_t :o! So I decided to include the file stddef.h which worked and the compilation went well. The linker failed however badly complaining about the SDL calls which it couldn't find. I then installed SDL 1.2 ("sudo apt-get install libsdl1.2-dev"), tried again and it worked! I also reverted my changes to the SDL_config_minimal.h file and it worked. You should definitely fix the Wiki to say "libsdl1.2-dev" instead of "libsdl2-dev"!

--------------

Summary: any help on Windows and OSX is highly appreciated. I don't currently care for Solaris, but it's probably not a walk in the park there either. Thank you for your time.



Title: Re: Does the engine even build anymore?
Post by: Neon_Knight on January 16, 2014, 08:31:18 AM
I have sent a PM to sago007, who knows about the code. He may help you.


Title: Re: Does the engine even build anymore?
Post by: grey matter on January 16, 2014, 04:00:42 PM
On a sidenote, does the current ioquake3 source code (https://github.com/ioquake/ioq3) build without problems on Windows with VisualStudio? Afaik the VS project files are not really being used.
All the other platforms should work fine with ioq3 as well. If you can confirm this, it might be easier to use ioq3 to fix oa's crufty codebase.

P.S.: ioq3 has a SDL2 branch.


Title: Re: Does the engine even build anymore?
Post by: Gig on January 17, 2014, 02:03:04 AM
For building engine from OSX, you may send a PM to Jackoverfull, linking this thread. He created OSX executables.
But I don't know if he's also used to compiling QVM.


Title: Re: Does the engine even build anymore?
Post by: stigmha on January 17, 2014, 05:53:46 AM
I have sent a PM to sago007, who knows about the code. He may help you.

Thanks :D

On a sidenote, does the current ioquake3 source code (https://github.com/ioquake/ioq3) build without problems on Windows with VisualStudio? Afaik the VS project files are not really being used.

Good idea, I cloned it and opened it in VisualStudio 2013 which converts it into a VS13 project. It did not build "out of the box" as the project contained old references to their renderer, which they now has separated into two subdirectories; renderergl1 and renderergl2. I honestly think the names says it all, but I replaced the references to the old renderer directory to renderergl2. Compilation went fine, but the linker is unhappy:

Code:
Error 261 error LNK2026: module unsafe for SAFESEH image. C:\~\ioq3\misc\msvc10\ftola.obj quake3
Error 262 error LNK2026: module unsafe for SAFESEH image. C:\~\ioq3\misc\msvc10\snapvector.obj quake3
Error 264 error LNK2005: _Com_Error already defined in common.obj C:\~\ioq3\misc\msvc10\tr_subs.obj quake3
Error 265 error LNK2005: _Com_Printf already defined in common.obj C:\~\ioq3\misc\msvc10\tr_subs.obj quake3
Error 267 error LNK1281: Unable to generate SAFESEH image. C:\~\ioq3\build\quake3_debug\ioquake3.x86.exe quake3


I checked LNK2026 at MSDN (http://msdn.microsoft.com/en-us/library/100ezk17.aspx) and it means: "/SAFESEH was specified, but a module was not compatible with the safe exception handling feature. If you want to use this module with /SAFESEH, then you will need to recompile the module using the Visual C++ .NET 2003 (or later) compiler.". Not so weird as it is programmed in C with the project set to use the C compiler (/TC flag), and not the Visual C++ compiler. I disabled /SAFESEH by opening the quake3 project's Property Pages then expanded Configuration Properties->Linker->Advanced and changed "Image Has Safe Exception Handlers" to "No (/SAFESEH:NO)". I rebuilt it and that specific error was gone. LNK2005 remained, but I also got tons of linking errors from the rendering system  :RIP:. So I included the files in renderecommon to the project. It gave me the same errors. I removed all the renderer files from the project, and tried the renderegl1 instead combined with the renderecommon files. It fixed the rendering linker errors. LNK2005 next.

Both Com_Error's and Com_Printf's prototypes are defined in qshared.h, while the implementations are defined the following places:
  • cg_main.c l.441 (client)
  • g_main.c l.540 (server)
  • ui_atoms.c l.33 (user interface)
  • tr_subs.c l.38 (renderer)
  • common.c l.260 (engine)

The line numbers points to the Com_Error functions with the Com_Printf's right above. I commented out the one in the renderer as it leads to a duplicate in the engine. Clean, rebuild, and 318 warnings later; success! I then tried to run it setting "Command Arguments" to "+set fs_basepath "C:\Program Files (x86)\openarena-0.8.8\"". I also made sure to change the Linker settings to display the console, so I could see the program output ("Property Pages"->"Configuration Properties"->"Linker"->"System": set "SubSystem" to "Console (/SUBSYSTEM:CONSOLE)"). I got the following pop-up:

Code:
---------------------------
Error
---------------------------
"pak0.pk3" is missing. Please copy it from your legitimate Q3 CDROM. Point Release files are missing. Please re-install the 1.32 point release. Also check that your ioq3 executable is in the correct place and that every file in the "baseq3" directory is present and readable. Copy console log to clipboard?
---------------------------
Ja   Nei  
---------------------------

Console says "0 files in pk3 files". I obviously have to change the "baseoa" directorie's name to "baseq3". New attempt, "computer says no":

Code:
**************************************************
WARNING: baseq3/pak0.pk3 is present but its checksum (3235491247)
is not correct. Please re-copy pak0.pk3 from your
legitimate Q3 CDROM.
**************************************************

I patched this by commenting out the function calls to FS_CheckPak0() at line 3901 and 3936 in files.c. Game launched and worked well with OpenArena! :D But I am not sure whether I'll continue with ioquake3 as the engine since it worked just as well With Visual Studio using OA's engine. I haven't tested it on any other platforms yet, but I honestly want the OA MinGW procedure to work as it is the "proper" OA way of doing it.

For building engine from OSX, you may send a PM to Jackoverfull, linking this thread. He created OSX executables.

Thanks, PM has been sent. :) I might experiment using ioquake3's Makefiles to see if I can get it to work in OA as well.

But I don't know if he's also used to compiling QVM.

I haven't really focused on compiling the QVMs yet, but I have successfully managed to compile the QVMs on both Windows and Linux using the provided scripts in the QVM projects. OSX complains: Unknown target CPU 'prescott', which I guess I can fix the same way as with the engine. But my first priority is to get the engine to compile as the QVMs are portable.

FYI: Linux seems to compile the QVMs as dynamic libraries (*.so) rather than QVMs (*.qvm).


Title: Re: Does the engine even build anymore?
Post by: Neon_Knight on January 17, 2014, 05:55:16 AM
I thought the QVMs could be compiled with the batch script Sago has included into that SDK.


Title: Re: Does the engine even build anymore?
Post by: stigmha on January 17, 2014, 06:04:57 AM
Compiling the QVMs isn't a big issue. The scripts provided in the QVM download works perfectly well on Windows and Linux. It's the engine that won't build the "proper" way on Windows and OSX.


Title: Re: Does the engine even build anymore?
Post by: jackoverfull on January 17, 2014, 07:36:54 AM
Here I am…

No, never compiled QVMs in my life…And I haven't been doing this in a long time, actually…Nor ever used Mavericks yet.

Right about the XCode project, that's probably pathetically outdated and I never used it. What I can recommend is trying to build ioq3, then, once it works, see what's different in OA and try to work around the differences.


Title: Re: Does the engine even build anymore?
Post by: fromhell on January 17, 2014, 05:43:57 PM
Most OA's changes should be mostly platform independent though... particularly the renderer gets the most changes for cosmetic things (specular, envmap, flares and bloom) and additional compatibility fallbacks - and then there's videoflags which enforces visual balance.


Title: Re: Does the engine even build anymore?
Post by: jackoverfull on January 18, 2014, 04:00:53 AM
"Should be"…But I always had to tinker a bit to get the sources compile on OS X in the past.  ;)


Title: Re: Does the engine even build anymore?
Post by: fromhell on January 18, 2014, 05:03:41 AM
Most of my new compatibility fallback changes aren't even relevant for the Mac since no Apple OSX-powered computer ever sold with a video card far too crap for id Tech 3.  Every OS X machine sold is technically ideal.  


Title: Re: Does the engine even build anymore?
Post by: sago007 on January 18, 2014, 01:59:50 PM
Based on the error message I imagine that a new version of libcurl.a would solve the problem.


Title: Re: Does the engine even build anymore?
Post by: stigmha on January 19, 2014, 12:48:11 PM
Thanks for your input so far, I'll try to figure something out and I will get back to you. Here's my first attempt of a naive make on OSX Mavericks with the pure ioquake3 source;

Code:
code/tools/lcc/src/dag.c:252:27: error: expected expression
                        assert(flab == 0),
                                         ^
code/tools/lcc/src/dag.c:254:9: error: expected expression
                      else if (flab) {
                      ^
code/tools/lcc/src/dag.c:533:34: error: expected expression
                                                assert(k < LONG_MAX),
                                                                    ^
code/tools/lcc/src/dag.c:560:25: error: expected expression
                        assert(p->count == 0),

make clean and ./make-macosx.sh x86. Same errors plus:

Code:
code/tools/lcc/src/enode.c:107:13: error: expected expression
                assert(t3),
                          ^
code/tools/lcc/src/enode.c:111:2: error: expected expression
        else {

x86_64 gave me the same results. Running ./make-macosx-app.sh release requires the binaries that failed, and the final ./make-macosx-ub.sh is to build for other platforms.

NB: it is not my intention to spam you with info, I do it to document and track the progress.


Title: Re: Does the engine even build anymore?
Post by: jackoverfull on January 20, 2014, 04:04:26 AM
First of all, forget about the sh script for a start, begin with a standard make as if you were on linux. The shell script automatizes a few things like building a .app bundle, optimizing and doing universal binaries but also adds complexity. I _always_ had to edit it to make it work eventually. Start getting the basic thing to build, then you can work into fixing the script.


Then, I'd look into code/tools/lcc/src/dag.c:252:27 and see what goes wrong there…


Attaching the make-macosx-ub.sh edited for oa 8.8. I sent it at the time but I have no idea if it eventually went into the sources.



Title: Re: Does the engine even build anymore?
Post by: grey matter on January 20, 2014, 01:13:52 PM
https://github.com/ioquake/ioq3/pull/32 as well as https://github.com/ioquake/ioq3/pull/31 might be of interest for OA devs (there might be a ticket on https://bugzilla.icculus.org/ as well).


Title: Re: Does the engine even build anymore?
Post by: andrewj on January 21, 2014, 12:00:57 AM
Firstly, you don't need 'lcc' to make an engine binary -- it is the tool for compiling qvms.

Secondly, I guess that platform assert() macro is messing up how the LCC code uses it.  You can either make the LCC code better -- instead of "if (xxx) assert(yyy), zzz;" then have "if (xxx) { assert(yyy); zzz; }" -- which may be painful if that idiom is used a lot.

Or else stick something like the following in c.h (after #include <assert.h>) :
Code:
#undef assert
#define assert(x)  do {} while  (0)


Title: Re: Does the engine even build anymore?
Post by: Hitchhiker on January 21, 2014, 02:17:36 PM
I dont know if this helps? regarding the first error in the original post (undefined reference to `strcasecmp')
On Tremulous site they say this:
"I always remove the build directory, but that didn't help. I finally solved the problem switching to gcc v4.6.3, everything compiled right!
So, there must be some linking bug in gcc 4.8.1 with curl."


Title: Re: Does the engine even build anymore?
Post by: stigmha on January 23, 2014, 04:37:45 AM
Attaching the make-macosx-ub.sh edited for oa 8.8. I sent it at the time but I have no idea if it eventually went into the sources.
Thanks, might be handy!  :D

https://github.com/ioquake/ioq3/pull/32 as well as https://github.com/ioquake/ioq3/pull/31 might be of interest for OA devs (there might be a ticket on https://bugzilla.icculus.org/ as well).
Thanks for the input, but I haven't really had any problems related to that.

Andrewj: my inital goal was to be able to compile and build both the engine and the QVMs without modifying anything. More on that later in this post.

Hitchiker: good catch, this is probably the reason. I haven't tried it yet as I have been busy.

-------------------------------------------

The primary reason why I made this post was because I intentionally wanted to build both the engine and QVMs without any modifications what-so-ever and by following your official guidelines of building the game. So I was originally against modifying the code and project files, and only looking for tweaks for the build tools. My intention is to use the game for my Master's Thesis and I hoped that some of my later changes perhaps could be implemented in the game. Merging my changes with the code base will of course be more tricky if I've done lots of modifications to the build procedure and changes in the code only to make it build in the first place. I've selected to stay away from the SVN repo as my work requires a stable version of the game for the base.

I eventually decided not to spend any more time on this as I learned that source code available from your source downloads page (http://openarena.ws/page.php?14) is a mess. Firstly, splitting the QVM code from the engine makes it really difficult and cumbersome to debug the QVMs together with the engine. Especially when this project primarily focuses on building them as *.qvm files and not dynamic link libraries (dll). To make it even more confusing, the engine source project also contains the QVM source code, but it's really outdated and buggy - but you are at least able to debug them as dlls. Both projects also contains several unused leftovers from ioquake3, and there's very little documentation of what to use and what to not use.

This led me to the conclusion that I want one clean project/solution with both the latest version of the QVM sources and the engine without the confusing leftovers. I started from scratch with an empty Visual Studio project and manually merged the latest engine source with the source of the latest QVMs. I am now able to build the latest QVMs in Visual Studio as DLLs and to live debug them. I have also included the scripts/tools to build the QVMs as native *.qvm files. It is currently Windows and Visual Studio 2013 only. Support for MinGW, OSX and Linux should be implemented soon.

Please read the README in my Git repo for full details and changelog: https://bitbucket.org/shalvorsen/openarena-0.8.8-stigmha/ (https://bitbucket.org/shalvorsen/openarena-0.8.8-stigmha/).

I have probably broken several of your development principles by doing this, but at least I have a single stable and clean repo of the sources that works for my purposes. You can do whatever you want with it in terms of cloning and adapting modifications from it. I appreciate feedback/comments and any input and even help - except for with my thesis related work ofc, but engine maintenace and build procedures aren't really a part of that.

Thank you for your time.


Title: Re: Does the engine even build anymore?
Post by: jackoverfull on January 23, 2014, 01:26:58 PM
This could be very interesting actually, leading to some cleaning i the code, perhaps.


BTW
The script was attached to my previous post…


Title: Re: Does the engine even build anymore?
Post by: grey matter on January 23, 2014, 01:43:05 PM
My intention is to use the game for my Master's Thesis and I hoped that some of my later changes perhaps could be implemented in the game.
Is this due to the included GPLv2 assets? Regarding a maintained code base I'd rather go with ioquake3 itself, which also has a larger developer/maintainer count.
As of now you can also use the ioquake3 engine with OpenArena's game assets (i.e. game code as QVM from OA's pk3s) to play on regular OA servers.

Quote
Use the file manager to replace the QVMs in the vm subdirectory of the pk3 file with your new qvms.
I get that this is your research project, but modifying pk3s will prevent you from joining any pure online server (which is most of them).

Please try contributing your patches to ioquake3, which is the upstream not only for OA but quite a few other games.

re:libspeex. Speex is deprecated in favour of Opus.
re:Makefile. The current one supports building the game logic as QVM/so, which includes building lcc/q3asm for the QVM part. Not sure what you'd like to change about that?

Quote
It is the first part of my thesis work on the engine and currently allows a client to bypass the main menu and jump straight into a game
I didn't look at the related code, but you can do this currently via +exec, +map, +connect etc.

re:COPYING. lcc is not licensed under GPL.


Title: Re: Does the engine even build anymore?
Post by: stigmha on January 23, 2014, 03:23:02 PM
This could be very interesting actually, leading to some cleaning i the code, perhaps.


BTW
The script was attached to my previous post…

Yeah, that was my intention. I have downloaded your script  ;).

Is this due to the included GPLv2 assets?

Yes, at least partly... I've actually written a paper on open source games for computer scientific research, and Open Arena turned out to be one of the best candidates. It was the first part of my thesis so I will be able to defend my choice at the end. The paper was accepted for and presented at LSDVE 2013 (http://www.di.unipi.it/~ricci/LSDVE.html) in August, but the publishers, Springer, have been really slow so it isn't officially published yet - I'll let you know when.

Regarding a maintained code base I'd rather go with ioquake3 itself, which also has a larger developer/maintainer count.
As of now you can also use the ioquake3 engine with OpenArena's game assets (i.e. game code as QVM from OA's pk3s) to play on regular OA servers.

...

Please try contributing your patches to ioquake3, which is the upstream not only for OA but quite a few other games.

Are these your thoughts or how you're actually intending to maintain the engine for future releases? I will upgrade the engine of my solution to the latest stable version of ioquake3 if it is the case. I'll stick to the OA version otherwise as I'd like to contribute to you, not ioquake3.

I get that this is your research project, but modifying pk3s will prevent you from joining any pure online server (which is most of them).

Most of my planned modifications are engine features only, but I will modify the QVMs if I have to. I am then totally aware of that most servers will reject my client, but it will most likely changes explicitly related to specific parts of the thesis research - something that might not benefit OA.

re:libspeex. Speex is deprecated in favour of Opus.
re:Makefile. The current one supports building the game logic as QVM/so, which includes building lcc/q3asm for the QVM part. Not sure what you'd like to change about that?

Cool, I should change Speex to Opus in the README.

The reason why I don't like the Makefile is that it currently only works in Linux (at least for me) and that there are lots of ioquake3 leftover garbage which OA doesn't use, making the Makefile really huge and cumbersome to interpret. I also consider the MinGW, OSX, and Linux build tools (gcc, etc.) to be so similar now that I believe a much shorter and simpler approach can be done in the Makefile to achieve easy and user friendly cross-platform support. This is just my current opinion though.

I didn't look at the related code, but you can do this currently via +exec, +map, +connect etc.

re:COPYING. lcc is not licensed under GPL.

Nice, I haven't gotten all up-to-speed with all the commands yet. The commands you mention will work for similar functionality to what I have now, but I will later/soon implement virtual clients that are spawned based upon my commands. That's specialized functionality I do not want to mix with the already existing commands. Thanks for the input on LCC, I will add the proper licensing shortly... I'll soon have to go to bed.


Title: Re: Does the engine even build anymore?
Post by: grey matter on January 23, 2014, 04:00:20 PM
Are these your thoughts or how you're actually intending to maintain the engine for future releases? I will upgrade the engine of my solution to the latest stable version of ioquake3 if it is the case. I'll stick to the OA version otherwise as I'd like to contribute to you, not ioquake3.
I'm neither an OA dev nor an official ioq3 dev (more of a contributor and complainer :) ). What I tried to say is to provide general fixes you make for your (currently) Windows centric fork to the ioq3 crowd, as they're not really targeting Windows anyways (only cross-builds via mingw, that's why the VS files which are coming from ioq3 we're most likely broken to begin with). So any contribution for getting the VS Windows build up-to-speed would be highly appreciated, even more so if you find related linking/compiling issues.
I can understand if it's too much trouble trying to compare the outdated OA code-base to the ioq3 one to check whether those fixes are still needed at all.

Cool, I should change Speex to Opus in the README.
See https://github.com/ioquake/ioq3/pull/25 (by one of the official devs) and the note on http://www.speex.org/ itself.

The reason why I don't like the Makefile is that it currently only works in Linux (at least for me) and that there are lots of ioquake3 leftover garbage which OA doesn't use, making the Makefile really huge and cumbersome to interpret. I also consider the MinGW, OSX, and Linux build tools (gcc, etc.) to be so similar now that I believe a much shorter and simpler approach can be done in the Makefile to achieve easy and user friendly cross-platform support. This is just my current opinion though.
I was talking about the ioq3 Makefile, which should work on OSX as well (possibly using the make-macosx*.sh wrapper scripts) and which does support MinGW iirc.

The commands you mention will work for similar functionality to what I have now, but I will later/soon implement virtual clients that are spawned based upon my commands. That's specialized functionality I do not want to mix with the already existing commands.
Are those "virtual clients" different to the regular in-game bots? You can spawn those already using /addbot.


Title: Re: Does the engine even build anymore?
Post by: grey matter on January 23, 2014, 04:03:19 PM
The lonely ioq3 wiki has http://wiki.ioquake3.org/Building_ioquake3 http://wiki.ioquake3.org/Console_Reference
and http://wiki.ioquake3.org/Academic_Articles (note the bot section).


Title: Re: Does the engine even build anymore?
Post by: stigmha on January 23, 2014, 04:38:02 PM
Ok, thanks, I'll see what I can do to get the engine up to speed with the ioquake3 engine. I'll take a look at the Opus and Speex related resources you provided at the next opportunity. I will also eventually implement a Makefile for other platforms, probably basing it on the ioquake3 Makefile as you suggest. Thanks for the links to the ioquake3 resources, will investigate soon.

The problem with /addbot and the current bot setup is that they are all running in the server code, and not on the client. The entire purpose of virtual clients in the terms of research is to be able to simulate houndres or even thousands of virtual players in order to monitor the server's performance. The bots may not run on the server as it will affect it's processing capabilities. I will indeed use the already available bots, but I need to move them over to the client code, so I can simulate players. Yes, this can in worst case be used for cheating as they will in theory be able to connect to any server, but it is not my intention to include this in the actual game. It is entirely for the case of science ;P. I will create a separate branch for it.

This is my last post today as it's nearly midnight here, I truly appreciate all the feedback and interest so far. It is truly both valuable and motivating to hear from you! Fridays are currently reserved for writing the actual thesis and I seldom have time during weekends, but you'll hear from me soon enough.


Title: Re: Does the engine even build anymore?
Post by: grey matter on January 23, 2014, 05:04:39 PM
Ok, thanks, I'll see what I can do to get the engine up to speed with the ioquake3 engine. I'll take a look at the Opus and Speex related resources you provided at the next opportunity. I will also eventually implement a Makefile for other platforms, probably basing it on the ioquake3 Makefile as you suggest. Thanks for the links to the ioquake3 resources, will investigate soon.
I didn't mean to suggest you try fixing those things anytime soon. Speex/Opus will most likely be solved by the ioq3 devs themselves. I'd also leave the Makefile as is, given that your current VS solution seems to work and research projects tend to take a lot longer than estimated ;)

The problem with /addbot and the current bot setup is that they are all running in the server code, and not on the client. The entire purpose of virtual clients in the terms of research is to be able to simulate houndres or even thousands of virtual players in order to monitor the server's performance. The bots may not run on the server as it will affect it's processing capabilities. I will indeed use the already available bots, but I need to move them over to the client code, so I can simulate players.
Ah, I see where this is going to. You can either be lazy and just provide RMI for the botlib plus the existing connection/slot reservation functions or go the hard way and truly implement a client bot, which'll require some (realttime) computer vision plus the usual wallhack/aimbot logic.
Be aware that the engine has a harcoded MAX_CLIENTS limit, which is at 64, but even that doesn't work entirely (meaning there are some related bugs which do not properly obey this limit). In id Q3 one ran into problems with the old maximum of 32 clients already.


Title: Re: Does the engine even build anymore?
Post by: stigmha on February 04, 2014, 03:10:04 AM
Sorry for the long wait, but I've been busy.

libcurl issue

I eventually found a solution to the libcurl issue which was as simple as upgrading the library, both the include files and the *.a files. It could have been done by downgrading my version of GCC as well, but I am not a big fan of that kind of fallback solutions - at least not for an engine I'm supposed to get up to code. I then got a new and a bit cryptic error message which was related to a struct having a member variable with the same name as a #define, full details can be found on the official ioquake3 forums (http://community.ioquake.org/t/building-ioquake3-using-mingw-on-windows-7-fails/198).

OpenArena with the latest version of ioquake3

I have now managed to merge OpenArena with the latest version and updates from the ioquake3 game engine source (https://github.com/ioquake/ioq3/). The engine and QVMs can now be built using either the Make or Visual Studio 2013. It is currenlty only tested and confirmed working on Windows 7/8 using either Make through MinGW or the Visual Studio 2013 (http://www.visualstudio.com/downloads/download-visual-studio-vs#d-express-windows-desktop) project located in /misc/msvc/ioq3.sln. The Visual Studio project have been reconfigured to reflect the actual Makefile of ioquake3 and builds everything except *.qvm files.

I created a new Git repo for the merge, and I will continue working there instead of the previous posted branch: https://bitbucket.org/shalvorsen/ioquake3-oa (https://bitbucket.org/shalvorsen/ioquake3-oa). It has a dedicated ioquake3 (https://bitbucket.org/shalvorsen/ioquake3-oa/src/125dcd2e9adcd3c43d3aa6816fc0bcab0b171250/?at=ioquake3) branch that is purely intended for pulling engine updates from the official ioquake3 repository. The master branch (OpenArena branch) is to be merged with this branch occasionally.

UPDATE 1: Changes as of 04.02.2014 - 15:24 CET

  • MinGW now compiles the *.qvm files. It failed due to a slightly outdated bg_lib.
  • Make tested and confirmed working on OSX Mavericks, builds the *.qvms too.

Changes as of 03.02.2014

  • Created a new repository
  • Updated the Visual Studio project
    • Now Visual Studio 2013. You can download the Express edition for free from their official webpage (http://www.visualstudio.com/downloads/download-visual-studio-vs#d-express-windows-desktop).
    • Updated to contain and build the actual projects used by ioquake3:
      • cgame (client QVM)
      • game (server QVM)
      • q3_ui (ui QVM)
      • ioquake3 (engine exe)
      • ioquake3_dedicated (dedicated server edition of engine)
      • All three missionpacks
      • Standalone renderers; opengl1 and opengl2
    • I got lots of help doing this by reading Jonathan Young's (jpcy (https://github.com/jpcy)) custom https://github.com/jpcy/ioq3-mono/blob/master/misc/premake5.lua (https://github.com/jpcy/ioq3-mono/blob/master/misc/premake5.lua) script file. I originally wanted to use his Premake script to generate the project files, but it was too incomplete.
  • Fixed a build error in the engine caused by a deprecated Win32 API call (IsWindowsVersionOrGreater()) that checked if the client was Windows NT or older. It was fixed by adding a ``#pragma ignore'', but it should ideally be replaced with the newer Windows API calls. They require the C++ compiler, and won't be supported by our pure C project.
  • Added a patch setting video driver to "windib" for debug builds in Sys_GLimpInit() in sys_win32.c line 693. It was originally set to "directx" which actually enforces SDL to use the DirectX v.5 API. This caused a dead-lock like behavior when setting a breakpoint in Visual Studio, resulting in a freezed cursor and an unstable Visual Studio. It freezed the entire machine on OSX hardware.
  • Upgraded the cURL code to 1.34.1 (was 1.30.4). Contains many of fixes including patching multiple security vulnerabilities.
  • Added the QVM sources from the official OA source downloads.
  • Fixed some double to float truncation warnings in the QVMs

Known issues

  • Compiling the QVMs into *.qvm
    • MinGW: Q3ASM throws strange errors in cgame complaining about undefined symbols atoi, Q_vsnprintf, strcmp, and others. I haven't spent too much time trying to figure this out yet.
    • Visual Studio: does not compile the QVMs into *.qvm files yet. This can be done by adding post build steps.
  • OpenGL 2 renderer fails to runtime compile a shader so it fails. Works in ioquake3 branch with Quake III Arena though. I haven't investigated this yet.
  • Makefile should be tested on all other supported platforms. Especially Linux and OSX.
  • XCode project haven't been touched and is really outdated.




Title: Re: Does the engine even build anymore?
Post by: hairball on February 04, 2014, 04:48:06 PM
Hi stigmha,

I took a look at your project.  It looks like you are only merging in the game code changes because I don't see tr_bloom.c or any other renderer changes.  Upstream renamed their renderer so that may be why you're missing the changes if you are trying to incorporate the engine changes too.

It looks like you applied a patch based on oax on top of ioquake3.  I wish it was that easy but it's not.  You're reverting a lot of changes that ioquake3 made on purpose.  Besides reverting the work, it will be a bigger pain to keep in sync in the future since you undid changes that they made.


Title: Re: Does the engine even build anymore?
Post by: stigmha on February 05, 2014, 03:44:00 AM
It looks like you applied a patch based on oax on top of ioquake3.  I wish it was that easy but it's not.  You're reverting a lot of changes that ioquake3 made on purpose.  Besides reverting the work, it will be a bigger pain to keep in sync in the future since you undid changes that they made.
Oh... :( ...thanks for the heads up! :) I recall reading that the latest version of ioquake3 was fully compatible with OpenArena, so I slight blindly merged the OA source QVM code with the latest ioquake3 engine and expected things to be good.

The reason why I choose to do this blind/naive approach was because not all changes to the QVMs in OpenArena (from ioquake3) are documented, and I was afraid to remove such additional functionality. Examples are your implementation of additional game modes and your changes to the UI where you have changed the text color and added an addtional "effects" bar on "Player Settings". An overview of such changes would be great to have. I could use various "diff" utilities as an attempt to track them all down, but it would be a really time consuming and painful task.

I haven't been that naive though, taken account for the following from your DO NOT LINK[/b]) h t t p s : / / openarena . wikia . com/wiki/DeveloperFAQ#Coding]DeveloperFAQ (http://([b).
  • Changed defines in q_shared.h (PRODUCT_NAME etc.)
  • Removed pak0 check from files.c (this by using the STANDALONE macro)
  • Changed defines in qcommon.h (PROTOCOL, AUTH server, UPDATE server and MASTER server)
  • Increased DEF_COMHUNKMEGS (56 is not enough for bloom)
  • Added g_humanplayers + g_needpass in client* and removed g_punkbuster from the same places
  • Changed the save path in sys/*. Replace "Quake3" with "OpenArena" and ".q3a" with ".oa"
So what I in theory need to do is to fix the following:
  • Implement the missing Bloom support
  • Add the extra protocols to comon.c
  • Patch snd_codec.c so the engine will look for ogg files if no wav is found.
  • Change default sound from sound/feedback/hit.wav to sound/misc/silence.wav (so missing sounds are not to annoying
  • Change ".oa" to ".openarena" in the save settings.
I have two options now:
  • 1. "Start from scratch" by using my working and updated ioquake3 branch, implementing the changes mentioned at the DO NOT LINK[/b]) h t t p s : / / openarena . wikia . com/wiki/DeveloperFAQ#Coding]DeveloperFAQ (http://([b).
  • 2. Continue from where I am, attempting to revert some of the deprecated AO stuff and to add the missing OA features.
I personally think #1 is the best option. :P


Title: Re: Does the engine even build anymore?
Post by: Gig on February 05, 2014, 04:00:07 AM
Note: I can guess that list in "developerfaq" may be incomplete/outdated. I think it's a lot of time Sago or Fromhell do not edit that page. For example, it does not mention 0.8.8 GLSL support...


Title: Re: Does the engine even build anymore?
Post by: hairball on February 05, 2014, 04:29:39 PM
I have two options now:
  • 1. "Start from scratch" by using my working and updated ioquake3 branch, implementing the changes mentioned at the DO NOT LINK[/b]) h t t p s : / / openarena . wikia . com/wiki/DeveloperFAQ#Coding]DeveloperFAQ (http://([b).
  • 2. Continue from where I am, attempting to revert some of the deprecated AO stuff and to add the missing OA features.
I personally think #1 is the best option. :P
You have more options than that. :)  Recent ioquake3 builds are capable of being used by standalone games without any modification unless the game is heavily modified which OA isn't.  You can set everything through +set command line options.  If it doesn't detect the quake3arena pk3 files, it enables standalone mode.  It won't have bloom or any of the modified parts of OpenArena but those don't prevent you from playing the game.

p.s. I'm also working on migrating the OA 0.8.8 engine code to ioquake3 trunk.  The FAQ is missing items.


Title: Re: Does the engine even build anymore?
Post by: stigmha on February 06, 2014, 02:33:37 PM
p.s. I'm also working on migrating the OA 0.8.8 engine code to ioquake3 trunk.  The FAQ is missing items.

Let me know if I can help you out.  :) I am actually almost done merging in the OA stuff into the engine. sago007 (http://openarena.ws/board/index.php?action=profile;u=387) mentioned undeadzy's git repo (https://github.com/undeadzy/openarena_engine) in the Gitorious post (http://openarena.ws/board/index.php?topic=4309), so I found undeadzy's initial commit (https://github.com/undeadzy/openarena_engine/commit/41cf8d7f204f8b2850b9b7fc1401f1e5e097658d) and merged everything but the renderer stuff with my working and up to date ioquake3 git branch (https://bitbucket.org/shalvorsen/ioquake3-oa/src/125dcd2e9adcd3c43d3aa6816fc0bcab0b171250/?at=ioquake3). Then I went through his commit history (after the initial post) and merged what I found relevant from his non-ioquake3 merges. There were ~4-5 in total.

My last change was to copy his latest renderer_oa directory and used WinDiff (http://www.grigsoft.com/download-windiff.htm) to extract the OA specific render changes and implement them into the opengl1 renderer from ioquake3 - yes, this includes bloom, GLSL, and the other changes. I currently have to fix some errors in the renderering, and I will be done with the engine stuff. The errors are posted at the end at this post for your interest, but I will be able to figure them out on my own later... I'm not doing more today. Once fixed, I will start diffing the QVMS and hopefully be able to merge things in place. My current progress is available in my OpenArena git branch (https://bitbucket.org/shalvorsen/ioquake3-oa/src/8a13552135ff8e2035de41aa53c0ff2771855f6f/?at=OpenArena).

NB: all my merges have been done manually.

The current errors are:

Code:
In file included from code/renderergl1/../renderercommon/tr_common.h:27:0,
                 from code/renderergl1/tr_local.h:31,
                 from code/renderergl1/tr_animation.c:23:
code/renderergl1/../renderercommon/qgl.h:487:29: error: conflicting types for 'q
glVertexAttrib4fvARB'
 extern void     (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *);
                             ^
In file included from code/renderergl1/../renderercommon/tr_common.h:27:0,
                 from code/renderergl1/tr_local.h:31,
                 from code/renderergl1/tr_animation.c:23:
code/renderergl1/../renderercommon/qgl.h:108:26: note: previous declaration of '
qglVertexAttrib4fvARB' was here
 extern GLvoid (APIENTRYP qglVertexAttrib4fvARB) (GLuint index, GLfloat *v);
                          ^
In file included from code/renderergl1/tr_animation.c:23:0:
code/renderergl1/tr_local.h:87:16: error: redefinition of 'struct image_s'
 typedef struct image_s {
                ^
In file included from code/renderergl1/tr_local.h:31:0,
                 from code/renderergl1/tr_animation.c:23:
code/renderergl1/../renderercommon/tr_common.h:50:16: note: originally defined h
ere
 typedef struct image_s {
                ^
In file included from code/renderergl1/tr_animation.c:23:0:
code/renderergl1/tr_local.h:103:3: error: conflicting types for 'image_t'
 } image_t;
   ^
In file included from code/renderergl1/tr_local.h:31:0,
                 from code/renderergl1/tr_animation.c:23:
code/renderergl1/../renderercommon/tr_common.h:65:3: note: previous declaration
of 'image_t' was here
 } image_t;
   ^
In file included from code/renderergl1/tr_animation.c:23:0:
code/renderergl1/tr_local.h:1384:11: error: conflicting types for 'R_FindImageFi
le'
 image_t  *R_FindImageFile( const char *name, qboolean mipmap, qboolean allowPic
mip, int glWrapClampMode );
           ^
In file included from code/renderergl1/tr_local.h:31:0,
                 from code/renderergl1/tr_animation.c:23:
code/renderergl1/../renderercommon/tr_common.h:123:14: note: previous declaratio
n of 'R_FindImageFile' was here
 image_t     *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flag
s );
              ^
In file included from code/renderergl1/tr_animation.c:23:0:
code/renderergl1/tr_local.h:1386:11: error: conflicting types for 'R_CreateImage
'
 image_t  *R_CreateImage( const char *name, const byte *pic, int width, int heig
ht, qboolean mipmap
           ^
In file included from code/renderergl1/tr_local.h:31:0,
                 from code/renderergl1/tr_animation.c:23:
code/renderergl1/../renderercommon/tr_common.h:124:10: note: previous declaratio
n of 'R_CreateImage' was here
 image_t *R_CreateImage( const char *name, byte *pic, int width, int height, img
Type_t type, imgFlags_t flags, int internalFormat );
          ^
In file included from code/renderergl1/tr_animation.c:23:0:
code/renderergl1/tr_local.h:1417:11: error: conflicting types for 'RE_RegisterSh
aderFromImage'
 qhandle_t RE_RegisterShaderFromImage(const char *name, int lightmapIndex, image
_t *image, qboolean mipRawImage);
           ^
In file included from code/renderergl1/tr_local.h:31:0,
                 from code/renderergl1/tr_animation.c:23:
code/renderergl1/../renderercommon/tr_common.h:130:11: note: previous declaratio
n of 'RE_RegisterShaderFromImage' was here
 qhandle_t RE_RegisterShaderFromImage(const char *name, int lightmapIndex, image
_t *image, qboolean mipRawImage);
           ^
In file included from code/renderergl1/tr_animation.c:23:0:
code/renderergl1/tr_local.h:1926:22: error: unknown type name 'md4Surface_t'
 void RB_SurfaceAnim( md4Surface_t *surfType );
                      ^
code/renderergl1/tr_animation.c: In function 'R_AddAnimSurfaces':
code/renderergl1/tr_animation.c:42:2: error: unknown type name 'md4Header_t'
  md4Header_t  *header;
  ^
code/renderergl1/tr_animation.c:43:2: error: unknown type name 'md4Surface_t'
  md4Surface_t *surface;
  ^
code/renderergl1/tr_animation.c:44:2: error: unknown type name 'md4LOD_t'
  md4LOD_t  *lod;
  ^
code/renderergl1/tr_animation.c:48:12: error: 'md4Header_t' undeclared (first us
e in this function)
  header = (md4Header_t *) tr.currentModel->modelData;
            ^
code/renderergl1/tr_animation.c:48:12: note: each undeclared identifier is repor
ted only once for each function it appears in
code/renderergl1/tr_animation.c:48:25: error: expected expression before ')' tok
en
  header = (md4Header_t *) tr.currentModel->modelData;
                         ^
code/renderergl1/tr_animation.c:49:9: error: 'md4LOD_t' undeclared (first use in
 this function)
  lod = (md4LOD_t *)( (byte *)header + header->ofsLODs );
         ^
code/renderergl1/tr_animation.c:49:19: error: expected expression before ')' tok
en
  lod = (md4LOD_t *)( (byte *)header + header->ofsLODs );
                   ^
code/renderergl1/tr_animation.c:51:13: error: 'md4Surface_t' undeclared (first u
se in this function)
  surface = (md4Surface_t *)( (byte *)lod + lod->ofsSurfaces );
             ^
code/renderergl1/tr_animation.c:51:27: error: expected expression before ')' tok
en
  surface = (md4Surface_t *)( (byte *)lod + lod->ofsSurfaces );
                           ^
code/renderergl1/tr_animation.c:52:23: error: request for member 'numSurfaces' i
n something not a structure or union
  for ( i = 0 ; i < lod->numSurfaces ; i++ ) {
                       ^
code/renderergl1/tr_animation.c:53:40: error: request for member 'shaderIndex' i
n something not a structure or union
   shader = R_GetShaderByHandle( surface->shaderIndex );
                                        ^
code/renderergl1/tr_animation.c:55:28: error: expected expression before ')' tok
en
   surface = (md4Surface_t *)( (byte *)surface + surface->ofsEnd );
                            ^
code/renderergl1/tr_animation.c: At top level:
code/renderergl1/tr_animation.c:64:22: error: unknown type name 'md4Surface_t'
 void RB_SurfaceAnim( md4Surface_t *surface ) {
                      ^


Title: Re: Does the engine even build anymore?
Post by: hairball on February 06, 2014, 03:49:22 PM
sago007 (http://openarena.ws/board/index.php?action=profile;u=387) mentioned undeadzy's git repo (https://github.com/undeadzy/openarena_engine) in the Gitorious post (http://openarena.ws/board/index.php?topic=4309), so I found undeadzy's initial commit (https://github.com/undeadzy/openarena_engine/commit/41cf8d7f204f8b2850b9b7fc1401f1e5e097658d) and merged everything but the renderer stuff with my working and up to date ioquake3 git branch (https://bitbucket.org/shalvorsen/ioquake3-oa/src/125dcd2e9adcd3c43d3aa6816fc0bcab0b171250/?at=ioquake3). Then I went through his commit history (after the initial post) and merged what I found relevant from his non-ioquake3 merges. There were ~4-5 in total.
FYI I am also undeadzy. ;)  I went by undeadzy in Urban Terror and hairball in OpenArena.  I'm only hairball now.  UrT's competitive scene completely imploded and there aren't many players left.  I played off and on since UrT 2.5 and this is the first time there hasn't been at least one North American league.

Since I'm already off-topic, I don't see a lot of the OpenArena people that I used to know. :(  I haven't seen a /V/ or oaN person in a server in a while now.

My current progress is available in my OpenArena git branch (https://bitbucket.org/shalvorsen/ioquake3-oa/src/8a13552135ff8e2035de41aa53c0ff2771855f6f/?at=OpenArena).
I'll take a look.  I finished merging the client/server changes and was testing it yesterday.  I regenerated a diff of the changes in OA 0.8.8 and a diff of my old openarena_engine against ioquake3 to see if I missed anything.

I plan on pushing the changes to the new OpenArena engine (https://github.com/OpenArena/engine.git) repository tonight (experimental branch).  There's still some work to do with making sure it builds on non-Unix systems.

I haven't done too much with the QVM/game code yet.  I'm waiting to see what Sago wants to do with oax.  He may want to continue using the current code rather than rebasing on top of ioquake3.


Title: Re: Does the engine even build anymore?
Post by: hairball on February 06, 2014, 06:15:21 PM
NB: all my merges have been done manually.
I took a look again at it.  I think there are still too many changes that you don't want to maintain or need to revert.

This one reverts a change that has a helpful gcc attribute which catches format string bugs:

Code:
@@ -1199,8 +1386,8 @@ extern    vmCvar_t                cg_obeliskRespawnDelay;
 const char *CG_ConfigString( int index );
 const char *CG_Argv( int arg );
 
-void QDECL CG_Printf( const char *msg, ... ) __attribute__ ((format (printf, 1, 2)));
-void QDECL CG_Error( const char *msg, ... ) __attribute__ ((noreturn, format (printf, 1, 2)));
+void QDECL CG_Printf( const char *msg, ... );
+void QDECL CG_Error( const char *msg, ... ) __attribute__((noreturn));
 
 void CG_StartMusic( void );
 

This one looks like the introduction of a bug.  It removes where, follownext and followprev.  It correctly adds getmappage which is OpenArena specific but it removed stuff it shouldn't have.  In this case, I don't know for sure whether the #ifdef checks were removed appropriately or not.  I'd have to look into it more since a number of them are intentionally removed in oax:

Code:
@@ -552,7 +595,6 @@ void CG_InitConsoleCommands( void ) {
        trap_AddCommand ("say");
        trap_AddCommand ("say_team");
        trap_AddCommand ("tell");
-#ifdef MISSIONPACK
        trap_AddCommand ("vsay");
        trap_AddCommand ("vsay_team");
        trap_AddCommand ("vtell");
@@ -560,20 +602,17 @@ void CG_InitConsoleCommands( void ) {
        trap_AddCommand ("vosay");
        trap_AddCommand ("vosay_team");
        trap_AddCommand ("votell");
-#endif
        trap_AddCommand ("give");
        trap_AddCommand ("god");
        trap_AddCommand ("notarget");
        trap_AddCommand ("noclip");
-       trap_AddCommand ("where");
        trap_AddCommand ("team");
        trap_AddCommand ("follow");
-       trap_AddCommand ("follownext");
-       trap_AddCommand ("followprev");
        trap_AddCommand ("levelshot");
        trap_AddCommand ("addbot");
        trap_AddCommand ("setviewpos");
        trap_AddCommand ("callvote");
+       trap_AddCommand ("getmappage");
        trap_AddCommand ("vote");
        trap_AddCommand ("callteamvote");
        trap_AddCommand ("teamvote");

Those 3 traps that are deleted above were added in ioquake3 to fix missing completion entries:

Code:
commit 2834a586000566ce7b2094215493e0708cae693b
Author: Zack Middleton <zturtleman@gmail.com>
Date:   Mon Jun 18 16:11:35 2012 +0000

    add missing commands to autocompletition
    
    found by Ensiform

diff --git a/code/cgame/cg_consolecmds.c b/code/cgame/cg_consolecmds.c
index c0421b5..0d29588 100644
--- a/code/cgame/cg_consolecmds.c
+++ b/code/cgame/cg_consolecmds.c
@@ -563,8 +563,11 @@ void CG_InitConsoleCommands( void ) {
        trap_AddCommand ("god");
        trap_AddCommand ("notarget");
        trap_AddCommand ("noclip");
+       trap_AddCommand ("where");
        trap_AddCommand ("team");
        trap_AddCommand ("follow");
+       trap_AddCommand ("follownext");
+       trap_AddCommand ("followprev");
        trap_AddCommand ("levelshot");
        trap_AddCommand ("addbot");
        trap_AddCommand ("setviewpos");



Title: Re: Does the engine even build anymore?
Post by: fromhell on February 06, 2014, 07:39:54 PM
Do we really need ioq3's cgame/game/ui qvm code?


Title: Re: Does the engine even build anymore?
Post by: hairball on February 06, 2014, 10:56:12 PM
fromhell: It's up to you. :)  I think having the client/server updated and in sync with ioquake3 is important because of all the changes.  I haven't read the cgame/game/ui code changes to know if it's worth it.

Stigmha: I updated my changes (client/server only) to github (https://github.com/OpenArena/engine.git).


Title: Re: Does the engine even build anymore?
Post by: fromhell on February 07, 2014, 12:39:02 AM
yeah i wasn't a big fan of ztm when he removed 16-bit color support....


Title: Re: Does the engine even build anymore?
Post by: fromhell on February 07, 2014, 01:37:15 AM
SUCCESS - I have compiled that openarena/engine github sources with mingw and it is working in Windows 7.  renderer_openarena1 shows my envmode/specmode changes.

There was a bit of trouble getting libogg and libvorbis to work however since those are static now?


Title: Re: Does the engine even build anymore?
Post by: hairball on February 07, 2014, 01:58:08 AM
I'm not sure why they don't handle it better.  I can't cross-compile OA on Debian to Windows because of the ogg/vorbis problem in the tree.  If I add USE_CODEC_VORBIS=0, then it cross-compiles fine.  In the past, OA had extra files/Makefile entries to help with ogg.  I think upstream ioquake3 should fix it though since it's not OA specific.

I didn't fix any of the compiler warnings except for the memset problem from OA 0.8.8 that gcc 4.8.2 reported.  Trying to keep minimal changes until it gets more widespread testing.


Title: Re: Does the engine even build anymore?
Post by: Neon_Knight on February 07, 2014, 02:38:05 AM
I do see a lot of complaints about the Wiki not being updated, but... do you know Gig and I aren't the only ones who can update the Wiki? And that we don't know everything about OA? I'm a mapper, not a coder, and Gig is a "jack of all trades" but even then there are things even he doesn't know at all.

What if the coders themselves also help us to update the wiki?


Title: Re: Does the engine even build anymore?
Post by: Gig on February 07, 2014, 02:45:20 AM
I know more or less nothing about coding. I know more or less nothing about modeling. I do not have knowledge about many shader commands. There are tons and tons of things I don't know about the game, especially about how it works internally. I just try to help how I can.  :)


Title: Re: Does the engine even build anymore?
Post by: Neon_Knight on February 07, 2014, 02:47:01 AM
Well, that's even more reason of why they should help us in that regard!


Title: Re: Does the engine even build anymore?
Post by: stigmha on February 07, 2014, 05:37:37 AM
FYI I am also undeadzy. ;)

Cool, both nice to meet you and to learn some OA history.  ;)

I took a look again at it.  I think there are still too many changes that you don't want to maintain or need to revert.

Thanks, I might have been a bit too quick, but I think I'll use your Git repo as base from now on.

---------------

Do we really need ioq3's cgame/game/ui qvm code?

I would consider it a huge advantage both for easier debugging, maintenance (including stability) and for tidiness. There are probably tons of bugfixes waiting to be merged from ioquake3.

---------------

There was a bit of trouble getting libogg and libvorbis to work however since those are static now?
I can't cross-compile OA on Debian to Windows because of the ogg/vorbis problem in the tree.  If I add USE_CODEC_VORBIS=0, then it cross-compiles fine.  In the past, OA had extra files/Makefile entries to help with ogg.  I think upstream ioquake3 should fix it though since it's not OA specific.

I contacted Zack Middleton (zturtleman), an ioquake3 maintainer,  regarding this issue yesterday. I wrote the following to him:

Quote from: stigmha
I know you have kept the USE_CODEC_VORBIS option for backwards compatibilities, but you have removed the vorbis headers, thus enabling it will make the build fail; grep -r "#include <vorbis/vorbis.h" ./code/* reveals that ./code/client/snd_codec_ogg.c attempts to use the missing header if the macro is set.

He replied:

Quote
USE_CODEC_VORBIS=1 has always required installing the libvorbis and libvorbisfile headers and libraries outside of ioquake3. Some standalone games use it.

---------------

What if the coders themselves also help us to update the wiki?

I would love to help, but I thought you didn't like strangers (unofficial devs) editing stuff there. :P

---------------

I recall reading somewhere you have an official IRC channel, may I be lazy and ask for the details here?


Title: Re: Does the engine even build anymore?
Post by: Gig on February 07, 2014, 06:05:29 AM
I recall reading somewhere you have an official IRC channel, may I be lazy and ask for the details here?
The official one is this one:
irc://irc.anynet.org/#openarena

There are also some unofficial channels, you can give a look here:
(DO NOT LINK) h t t p s : / / openarena . wikia . com/wiki/Main_Page#IRC

PS: The wiki is open to everyone. Of course, working as registered users instead of IPs is better, however IPs are allowed, too.
Some hints for who wants to edit the wiki in this page: (DO NOT LINK) h t t p s : / / openarena . wikia . com/wiki/WikiWorks
And the forum thread for talking about the wiki: http://openarena.ws/board/index.php?topic=4046.0


Title: Re: Does the engine even build anymore?
Post by: Neon_Knight on February 07, 2014, 07:21:22 AM
What if the coders themselves also help us to update the wiki?

I would love to help, but I thought you didn't like strangers (unofficial devs) editing stuff there. :P
Where did you get that impression?


Title: Re: Does the engine even build anymore?
Post by: stigmha on February 07, 2014, 07:29:12 AM
It's just in my polite nature. ;) You are a well established open source community with various routines and unwritten rules that I have no idea of. I would almost consider it rude to be an external guy just showing up from nowhere one day, starting to edit your Wiki and demand change. :P I'll correct the changes I've suggested for the Wiki so far.

Btw, can't really find you in anyone of the IRC channels. Do you have different nicks there or are you just not using them?


Title: Re: Does the engine even build anymore?
Post by: fromhell on February 07, 2014, 07:43:10 AM
I don't do IRC period.


Title: Re: Does the engine even build anymore?
Post by: Neon_Knight on February 07, 2014, 08:20:02 AM
It's just in my polite nature. ;) You are a well established open source community with various routines and unwritten rules that I have no idea of. I would almost consider it rude to be an external guy just showing up from nowhere one day, starting to edit your Wiki and demand change. :P I'll correct the changes I've suggested for the Wiki so far.

Btw, can't really find you in anyone of the IRC channels. Do you have different nicks there or are you just not using them?
Oh, in that case, no problem!

I was asking because people in the IRC seems to have a strong tendency to badmouth us because of many reasons, among them that DO NOT LINK (http://([b)) h t t p s : / / openarena . wikia . com/wiki/DeveloperFAQ]OA has its own set[/url] of DO NOT LINK[/b]) h t t p s : / / openarena . wikia . com/wiki/NOTTODO]development rules (http://([b) and DO NOT LINK[/b]) h t t p s : / / openarena . wikia . com/wiki/GoodPractices]direction (http://([b)[/b] and some demand us to break that and that "What shell be done is determined and who does it is already determined (http://openarena.ws/board/index.php?topic=4711.msg48810#msg48810)" (which is plainly wrong, though OA not being anymore a "throw everything you can find on the net as long as it's free" project is a good thing; that mentality by a certain past contributor who isn't here anymore made the 0.x versions the mess OA is today, so OA3 is about fixing that).

Just thought you may know this.


Title: Re: Does the engine even build anymore?
Post by: hairball on February 07, 2014, 04:34:10 PM
He replied:
Quote
USE_CODEC_VORBIS=1 has always required installing the libvorbis and libvorbisfile headers and libraries outside of ioquake3. Some standalone games use it.
Ok, in this case let's bundle it in OA's git.  I would like for this to properly cross-compile so I can make sure it works for Windows users.


Title: Re: Does the engine even build anymore?
Post by: wing0 on April 14, 2014, 08:01:20 AM
Cloned, build, tried, got error 'game mismatch'.
Enabled LEGACY_PROTOCOL, re-build, got an error like 'server parse string'.

Is this a known issue?

If you like, contact me in #openarenahelp @quakenet I know how to write c code and modded some things too.


Title: Re: Does the engine even build anymore?
Post by: fromhell on April 14, 2014, 04:24:48 PM
There shouldn't be a game mismatch.  I have it working with VMs from OA 088, OA3 and even Q3A 1.32