Coder Social home page Coder Social logo

etrun / etrun Goto Github PK

View Code? Open in Web Editor NEW
20.0 4.0 7.0 17.19 MB

ETrun is a Wolfenstein: Enemy Territory game modification based on ET-GPL. The objective of this mod is to bring timeruns support to it. Visit our website for more information.

Home Page: https://timeruns.net

License: GNU General Public License v3.0

C 99.45% Shell 0.26% CMake 0.22% GLSL 0.08%
enemy-territory mod speedrun timeruns

etrun's Introduction

ETrun - The W:ET timerun mod

Build Status Coverity Status Build status

ETrun is a Wolfenstein: Enemy Territory game modification based on ET-GPL. The objective of this mod is to bring timeruns support to it.

Visit https://timeruns.net for more information.

Video

Link to the video

Compatibility

Windows

Game modules require Microsoft Visual C++ 2013 Redistributable Package to run properly. Works (tested) on Windows 7, 8, 8.1, 10 with ET 2.60b.

Linux

Requires GLIBC >= 2.7. Works (tested) on Debian 6, Linux Mint 12 with ET 2.60b and ET: Legacy.

MacOS

Not compatible with ET 2.60d. Works (tested) on MacOS 10.13 with ET: Legacy.

Documentation

ETrun documentation.

Building ETrun

Get ETrun source code with its submodule:

$ git clone --recursive [email protected]:ETrun/ETrun.git

Then run the build script:

$ ./make.sh -h
$ ./make.sh [OPTIONS]

Alternatively you can point the CMake GUI tool to the CMakeLists.txt file and generate platform specific build project or IDE workspace.

Docker

Docker can be used to build the mod for Linux:

$ docker build -f Dockerfile.build -t etrun-build .
$ docker run --rm -v "$PWD":/code -w /code etrun-build ./make.sh [OPTIONS]

Testing

There are test scripts for Windows and Linux / MacOS located in test directory. Before using them you need to setup your config file. Make a copy of the *.config.example file corresponding to your OS and run the following command to know all available options:

$ ./test/unix/test.sh -h

Credits

  • TJMod developers
  • Racesow project
  • ETLegacy project
  • iodfe project

etrun's People

Contributors

boutetnico avatar dinius avatar rokx avatar suburbski avatar

Stargazers

 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

etrun's Issues

Mac OS server crash

Crash when running a command using API (timeruns.net)

Thread 8 Crashed:
0 com.apple.CoreGraphics 0x907b033d CGGStateGetFlatness + 9
1 com.apple.CoreGraphics 0x907b02e3 CGGStateClipToPath + 65
2 com.apple.CoreGraphics 0x907b0239 clip + 121
3 com.apple.QD 0x928aadf8 ClipCGContextToRegion + 110
4 com.apple.QD 0x928ab78d ClipCGSContextToQDClip + 77
5 com.apple.HIToolbox 0x912149ba HIView::CreateDrawContext(CGContext_) + 188
6 com.apple.HIToolbox 0x91290b4e HIScrollBar::DrawSelf(short, HIShape const, CGContext) + 42
7 com.apple.HIToolbox 0x9119deac HIView::DrawCacheOrSelf(short, HIShape const, CGContext) + 364
8 com.apple.HIToolbox 0x9119dba9 HIView::SendDraw(short, OpaqueGrafPtr_, HIShape const, CGContext) + 125
9 com.apple.HIToolbox 0x9122b15d HIView::RecursiveDrawNonComposited(short, OpaqueGrafPtr_, OpaqueRgnHandle_, unsigned char, unsigned char, unsigned char) + 551
10 com.apple.HIToolbox 0x9122a1a9 HIView::DrawNonComposited(short, OpaqueGrafPtr_, OpaqueRgnHandle_, unsigned long) + 333
11 com.apple.HIToolbox 0x91229ac6 HIView::Draw(short, OpaqueGrafPtr*, unsigned long) + 150
12 com.apple.HIToolbox 0x9122bada HIView::Enable(unsigned char) + 164
13 com.apple.HIToolbox 0x91219b85 EnableControl + 42
14 com.apple.HIToolbox 0x913af75c CScrollBar::Enable(unsigned char) + 28
15 com.apple.HIToolbox 0x913af6b1 OpaqueTXNObject::ActivateScrollBars(unsigned char) + 65
16 com.apple.HIToolbox 0x913afa81 OpaqueTXNObject::Focus(unsigned char) + 73
17 com.apple.HIToolbox 0x9139f26e TXNFocus + 206
18 com.activision.rtcw_et 0x000e5ea0 0x1000 + 937632
19 com.activision.rtcw_et 0x000e6955 0x1000 + 940373
20 com.activision.rtcw_et 0x00079230 0x1000 + 492080
21 com.activision.rtcw_et 0x0007934f 0x1000 + 492367
22 com.activision.rtcw_et 0x000cc77b 0x1000 + 833403
23 com.activision.rtcw_et 0x0006ed23 0x1000 + 449827
24 qagame_mac 0x0f68c228 trap_Printf + 40
25 qagame_mac 0x0f64ceda G_Printf + 106
26 qagame_mac 0x0f6b401d 0xf60d000 + 684061
27 libsystem_c.dylib 0x94990557 _pthread_start + 344
28 libsystem_c.dylib 0x9497acee thread_start + 34

Doublejump bug

For some reasons, doublejump is not working sometimes. You need to /kill to get it back.

Handle specific map settings

Some maps require specific settings:

-strict save/load (=save2/load2)
-overbounce,
-drowning,
-doors hold open
-enable certain map entities

Add servers banners

Server banners are message periodically displayed to players.
They should be setup on the website and sent via API or setup in server cfg.

  • g_bannerX X from 1 to 10

Add a tutorial mode

Add a cvar, that will help new players by giving them extra information like:

  • the need to login and how to login

min start jump speed cvar

Add a client side cvar that specify a minimum start speed of a run. When player triggers start trigger, if its start speed is lower than the one in cvar, change color of start speed in info panel to red.

Server crash

Happens when someone gets kicked for flooded userinfo, a NULL src in Q_strncpyz cause an error.

Log example 1:

SV packet 213.108.29.23:60490 : getstatus
SV packet 195.248.254.195:27960 : getinfo
SV packet 80.57.249.123:27960 : getinfo
Item: 3 item_health
clientCommand: ^zeT^>|^7ren^>. : 914 : load
notify_timerun_stop(7, 0)
clientCommand: ^zeT^>|^7ren^>. : 915 : score
SV packet 88.199.137.10:27960 : getinfo
SV packet 62.108.174.55:62966 : getinfo
target_starttimer_use: client = 7
notify_timerun_start(7)
Sending a timerun_check to client 3
Sending a timerun_check_spec to client 4
SV packet 94.224.197.141:27960 : getchallenge
SV packet 94.224.197.141:27960 : connect
SVC_DirectConnect ()
Client 0 connecting with 150 challenge ping
Cvar_Set2: com_errorMessage Q_strncpyz: NULL src


ERROR: Q_strncpyz: NULL src


Log example 2:

ClientBegin: 2
Dropping client 2: flooded userinfo
ClientDisconnect: 2
broadcast: print "^l�^o���^l�^Q�^l��^o��^Q�^l��^o�^Q�^7 entered the game\n"
ClientBegin: 2
Client 123 connecting with 100 challenge ping


ERROR: Q_strncpyz: NULL src


----- Server Shutdown -----

Log example 3:

SV packet 83.22.217.239:7130 : getinfo
SV packet 83.22.217.239:7130 : getstatus
SV packet 83.22.217.239:7130 : getstatus
SV packet 83.22.217.239:7130 : OGP
bad connectionless packet from 83.22.217.239:7130:
OGP
SV packet 83.22.217.239:7130 : OGP
bad connectionless packet from 83.22.217.239:7130:
OGP
SV packet 83.22.217.239:7130 : getstatus
SV packet 213.108.29.23:51671 : getstatus
SV packet 94.224.197.141:60993 : getstatus
SV packet 83.22.217.239:7130 : getstatus
SV packet 77.248.7.118:27960 : getchallenge
SV packet 77.248.7.118:27960 : connect
SVC_DirectConnect ()
Client 27 connecting with 400 challenge ping
Cvar_Set2: com_errorMessage Q_strncpyz: NULL src


ERROR: Q_strncpyz: NULL src


----- Server Shutdown -----

Log example 4:

broadcast: print "^D#^W>:3^7 entered the game\n"
ClientBegin: 2
Kill: 2 2 37: ^D#^W>:3 killed ^D#^W>:3 by MOD_SUICIDE
Kill: 2 2 37: ^D#^W>:3 killed ^D#^W>:3 by MOD_SUICIDE
Kill: 2 2 37: ^D#^W>:3 killed ^D#^W>:3 by MOD_SUICIDE
Kill: 2 2 37: ^D#^W>:3 killed ^D#^W>:3 by MOD_SUICIDE
Kill: 2 2 37: ^D#^W>:3 killed ^D#^W>:3 by MOD_SUICIDE
Kill: 2 2 37: ^D#^W>:3 killed ^D#^W>:3 by MOD_SUICIDE
broadcast: print "^D#^W>:3^7 called a vote. Voting for: Load Random Map \n"
ClientDisconnect: 2
Vote Failed: Load Random Map (voter ^D#^W>:3 switched teams)
Sending heartbeat to etmaster.idsoftware.com
Sending heartbeat to master.gamespy.com:27900
Sending heartbeat to master0.gamespy.com
Sending heartbeat to clanservers.net
Sending heartbeat to master0.etmaster.net
Client 17 connecting with 200 challenge ping
88.203.92.98:27960:reconnect


ERROR: Q_strncpyz: NULL src


----- Server Shutdown -----

Log example 5:

ClientBegin: 3
Dropping client 3: flooded userinfo
ClientDisconnect: 3
broadcast: print "^9Sky^7ence^9.^7 entered the game\n"
ClientBegin: 3
Client 9 connecting with 400 challenge ping


ERROR: Q_strncpyz: NULL src


----- Server Shutdown -----
Sending heartbeat to etmaster.idsoftware.com
Sending heartbeat to master.gamespy.com:27900
Sending heartbeat to master0.gamespy.com
Sending heartbeat to clanservers.net
Sending heartbeat to master0.etmaster.net
==== ShutdownGame ====

ShutdownGame:

ETrun: API module unloaded!

Hitch warning: 1038 msec frame time
WARNING: watchdog will trigger in 4 seconds
Idle Server with no map - triggering watchdog

Bug in scoreboard

Sometimes the "Status" field of the SB acts weird and display 2 x L and 2 x R

Add a cvar to enable daily log files

Add:

  • a server side cvar to enable daily/weekly/monthly logs: g_rotateLogs
  • a server side cvar to specify how much days of logs to keep: g_keepLogs

Crash

Cvar_Set2: com_errorMessage NET_SendPacket: bad address type

Check user supplied settings

Limit following cvars:

  • snaps
  • rate
  • name (check its not empty, example: ^= ^=)
  • check cg_uinfo values (signed/unsigned)

OSX client crash

Dyld Error Message:
Symbol not found: _SHA1Reset
Referenced from: /Users/USER/Library/Caches/*/cgame_mac.bundle/Contents/MacOS/cgame_mac
Expected in: flat namespace

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 dyld 0x8fec30b5 dyld_fatal_error + 1
1 dyld 0x8fec601b dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 150
2 libdyld.dylib 0x92d2a76c dyld_stub_binder_ + 20
3 cgame_mac 0x1799a6b8 0x17920000 + 501432
4 cgame_mac 0x1799a87c CG_setClientFlags + 236
5 cgame_mac 0x1799a140 CG_RegisterCvars + 384
6 cgame_mac 0x179a0b50 CG_Init + 576
7 cgame_mac 0x17999dfd vmMain + 205

Add serverside demos

Added as an idea but it seems it's not possible to do that in mod code and it has to be done in engine.

Add strictSaveLoad cvar

Has only effect in VET (physics = 0), default value is 1 (enabled)

When enabled (g_strictSaveLoad 1)

When timer is inactive:

  • you can save
  • you can load

When timer is active:

  • you can't save
  • you can load, it resets your timer

When your timer gets active:

  • your save slots are kept

When disabled (g_strictSaveLoad 0)

When timer is inactive:

  • you can save
  • you can load

When timer is active:

  • you can save
  • you can load, it doesn't reset your timer

When your timer gets active:

  • your save slots are resetted

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.