baconET v0.4.1


(bacon) #1

This release is server-side.

FIXED: Poisoned syringe now gives you correct stats (IE. kills + XP + damage given), and has a MOD message.
FIXED: When poisoned, picking up a medpack will cure you.
FIXED: XP is reset on round2 of Stopwatch.
FIXED: Fixed the bug where a disguised covert ops would sometimes not lose his disguise when killed.
FIXED: Spread when firing repeatedly is not as random (see http://bani.anime.net/banimod/forums/viewtopic.php?t=3381).
ADDED: Players can pickup any weapon (cvar: b_pickupweap).
ADDED: Admins can control the protection time (cvar: b_protection).

Not much finished in this release, there’s a lot of half-implemented features. I’ll finish them before another release.

Download


(Ramoonus) #2

big fixes
keep up :smiley:


(thegnat) #3

Hey bacon,

we’ve tried to get your mod running on our server, but it keeps exiting with the following error message:

Sys_LoadDll(server27962/baconet/qagame.mp.i386.so)...
Sys_LoadDll(server27962/baconet/qagame.mp.i386.so) failed:
"server27962/baconet/qagame.mp.i386.so: cannot open shared object file: No such file or directory"
Sys_LoadDll(/CLEANEDPATH/server27962/baconet/qagame.mp.i386.so)...
Sys_LoadDll(/CLEANEDPATH/server27962/baconet/qagame.mp.i386.so) failed:
"/lib/libc.so.6: version `GLIBC_2.3' not found (required by /CLEANEDPATH/server27962/baconet/qagame.mp.i386.so)"
Sys_LoadDll(qagame) failed dlopen() completely!
----- Server Shutdown -----

Maybe you can fix that, so some serveradmins are able to get your mod running.
:drink:


(MindLink) #4

It seems that you’re linking to shared libraries (which are different on each linux version), so these .so’s won’t run on most Linux systems. Please try to do static linking (i.E. all needed library functions are compiled into the .so’s). I don’t remember the necessary compiler switches right now, but I’m sure somebody can fill you in on that.


(SCDS_reyalP) #5

ldd will show you which .so files are required


(Rain) #6

You can compile binaries that work with older glibc versions by forcing gcc to use older headers (I use glibc 2.2 headers when I do Linux etpro builds.) The headers choose the correct symbol to use for certain functions, and the linker will then stamp on the appropriate version for that symbol, so if your headers only use the glibc 2.2-specific stuff, you’ll avoid the glibc 2.3 dependency.

Quick example:
glibc 2.3’s ctype functions (e.g. tolower(), toupper()) use some special helper functions that previous versions of glibc didn’t provide (which are called from the tolower() function defined in ctype.h), so when using the glibc 2.3 headers you end up requiring glibc 2.3:

  required from libc.so.6:
    0x0d696911 0x00 06 GLIBC_2.1
    0x09691f73 0x00 05 GLIBC_2.1.3
    0x0d696913 0x00 04 GLIBC_2.3
    0x0d696910 0x00 02 GLIBC_2.0

[...]
SYMBOL TABLE:
[...]
00000000       F *UND*  00000071              __ctype_tolower_loc@@GLIBC_2.3
00000000       F *UND*  00000071              __ctype_toupper_loc@@GLIBC_2.3
00000000       F *UND*  00000071              __ctype_b_loc@@GLIBC_2.3

If you use glibc 2.2’s headers to compile, the newer ctype functions aren’t used, the symbols for the helper functions aren’t referenced, and you get a build that’ll work on older systems:

  required from libc.so.6:
    0x0d696911 0x00 05 GLIBC_2.1
    0x09691f73 0x00 03 GLIBC_2.1.3
    0x0d696910 0x00 02 GLIBC_2.0

[...]
SYMBOL TABLE:
[...]
00000000       O *UND*  00000004              __ctype_tolower@@GLIBC_2.0
00000000       O *UND*  00000004              __ctype_toupper@@GLIBC_2.0

You can tell gcc to use a different set of system headers like so:

gcc -nostdinc -I/path/to/alternate/glibc/headers -I/path/to/gcc/headers

…and you can easily find the path of gcc’s own headers (for e.g. stdinc.h) with:

gcc --print-file-name=include

I do something like this in the etpro makefiles:

ifeq ($(BUILDHOST)-$(WIN32),portal-0)
        CFLAGS_COMMON += -nostdinc -I/usr/local/glibc-2.2-headers -I$(GCC_HEADERS)
ifeq ($(GCC3),1)
        CFLAGS_COMMON += -pedantic -std=c99
endif
endif

[...]

GCC_HEADERS=$(shell $(CC) --print-file-name=include)

There is one caveat to this: when generating dependencies, gcc -MM won’t work as expected (it’ll work like gcc -M), because it won’t treat the glibc 2.2 headers as “systemâ€? headers.


(thegnat) #7

Maybe some contents of this thread should be put into the “Linux Compile Sticky” because we noticed this error with bobots too. It might help some modders to get their mods spread better, because more admins are able to run them on their servers.