From b194fa3bdc697dbeac4efaceeda69daaffb159cf Mon Sep 17 00:00:00 2001 From: Filip Wandzio Date: Tue, 27 Jan 2026 01:01:50 +0100 Subject: Initial commit for server config files Signed-off-by: Filip Wandzio --- .gitignore | 10 + Dockerfile | 41 +++ README.md | 45 +++ baseq3/common.cfg | 6 + baseq3/server.cfg | 19 ++ baseq3/server_ctf.cfg | 14 + baseq3/server_ffa.cfg | 11 + baseq3/server_tdm.cfg | 14 + compose.yml | 19 ++ entrypoint.sh | 12 + fetchpk3.sh | 19 ++ q3plus/autoexec.cfg | 1 + q3plus/conf/INSTAGIB.cfg | 257 ++++++++++++++ q3plus/conf/callvote.txt | 505 +++++++++++++++++++++++++++ q3plus/conf/maplist.cfg | 24 ++ q3plus/conf/philw.cfg | 872 +++++++++++++++++++++++++++++++++++++++++++++++ q3plus/conf/rotation.cfg | 24 ++ q3plus/description.txt | 1 + 18 files changed, 1894 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 baseq3/common.cfg create mode 100644 baseq3/server.cfg create mode 100644 baseq3/server_ctf.cfg create mode 100644 baseq3/server_ffa.cfg create mode 100644 baseq3/server_tdm.cfg create mode 100644 compose.yml create mode 100755 entrypoint.sh create mode 100755 fetchpk3.sh create mode 100644 q3plus/autoexec.cfg create mode 100644 q3plus/conf/INSTAGIB.cfg create mode 100644 q3plus/conf/callvote.txt create mode 100644 q3plus/conf/maplist.cfg create mode 100644 q3plus/conf/philw.cfg create mode 100644 q3plus/conf/rotation.cfg create mode 100644 q3plus/description.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bdb431d --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.env +*.pk3 +q3plus/docs +q3plus/tools +q3plus/extras +q3plus/maps +q3plus/conf/bans.cfg +q3plus/conf/crontab.txt +q3plus/server.cfg +q3plus/conf/DEFAULT.cfg diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4fb0027 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +FROM debian:bookworm-slim AS builder + +RUN apt-get update && apt-get install -y --no-install-recommends \ + git build-essential cmake curl ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /build + +RUN git clone --depth 1 https://github.com/ioquake/ioq3.git . + +RUN cmake -S . -B build \ + -DBUILD_CLIENT=OFF \ + -DBUILD_SERVER=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DUSE_SDL2=OFF + +RUN cmake --build build --target ioq3ded -j$(nproc) +RUN strip build/Release/ioq3ded + + +FROM debian:bookworm-slim + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libstdc++6 libgcc-s1 \ + && rm -rf /var/lib/apt/lists/* \ + && useradd -m quake + +WORKDIR /q3 + +COPY --from=builder /build/build/Release/ioq3ded /q3/ioq3ded + +COPY entrypoint.sh /q3/entrypoint.sh + +RUN chmod 755 /q3/entrypoint.sh /q3/ioq3ded \ + && chown quake:quake /q3/entrypoint.sh /q3/ioq3ded + +USER quake + +EXPOSE 27960/udp + +HEALTHCHECK CMD pgrep ioq3ded || exit 1 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e71b3d2 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# Setup + +## Client +\r_mode -1 +\r_customwidth X +\r_customheight X + +\cl_allowdownload 1 +\cl_maxpackets 125 + +\cg_fov 100 +\cg_drawtimer 2 +\cg_delagweapons 15 +\cg_nobobbing 9 +\cg_ambient 0 +\cg_enemymodel keel\66666 + +\snaps 40 +\rate 50000 + +\vid_restart + +## Server + +### Bots (Only if you need them) +set bot_enable 1 +set bot_minplayers 6 +set g_spskill 4 + +set sv_maxclients 12 +set g_gametype 0 +set timelimit 15 +set fraglimit 30 + +### Networking +set sv_fps 100 +set sv_maxRate 25000 +set sv_minRate 4000 +set sv_maxPing 200 +set sv_minPing 0 + +set g_doWarmup 0 +set g_warmup 0 +set match_latejoin 1 +set team_allowspec 1 diff --git a/baseq3/common.cfg b/baseq3/common.cfg new file mode 100644 index 0000000..df2ef2f --- /dev/null +++ b/baseq3/common.cfg @@ -0,0 +1,6 @@ +set bot_enable 1 +set dedicated 1 +set g_gametype 3 +set sv_pure 0 +set bot_minplayers 4 +set g_allowvote 1 diff --git a/baseq3/server.cfg b/baseq3/server.cfg new file mode 100644 index 0000000..d4b4f98 --- /dev/null +++ b/baseq3/server.cfg @@ -0,0 +1,19 @@ +set sv_hostname "Q3Plus 3v3 Philw Tournament Server" +set g_motd "GL & HF" + +set sv_maxclients "6" +set sv_fps "125" +set sv_timeout "200" + +set g_gametype "4" +set timelimit "20" +set fraglimit "0" + +set g_warmup "20" +set g_doWarmup "1" + +set sv_pure "1" +set sv_strictAuth "1" + + +map q3dm6 diff --git a/baseq3/server_ctf.cfg b/baseq3/server_ctf.cfg new file mode 100644 index 0000000..5d6ae80 --- /dev/null +++ b/baseq3/server_ctf.cfg @@ -0,0 +1,14 @@ +sv_maxclients 12 + +g_gametype 4 +g_weaponrespawn 15 +g_inactivity 3000 +g_forcerespawn 0 + +seta timelimit 15 +seta fraglimit 40 +set d1 "map q3ctf1 ; set nextmap vstr d2" +set d2 "map q3ctf2 ; set nextmap vstr d3" +set d3 "map q3ctf3 ; set nextmap vstr d4" +set d4 "map q3ctf4 ; set nextmap vstr d1" +vstr d1 diff --git a/baseq3/server_ffa.cfg b/baseq3/server_ffa.cfg new file mode 100644 index 0000000..cd2b479 --- /dev/null +++ b/baseq3/server_ffa.cfg @@ -0,0 +1,11 @@ +// free for all +seta g_gametype 0 // 0:FFA, 1:Tourney, 2:FFA, 3:TD, 4:CTF +seta timelimit 10 // Time limit in minutes +seta fraglimit 15 // Frag limit + +seta g_weaponrespawn 2 // weapon respawn in seconds + +seta bot_enable 1 // Allow bots on the server +seta bot_nochat 1 // Shut those fucking bots up +seta g_spskill 4 // Default skill of bots [1-5] +seta bot_minplayers 3 // This fills the server with bots to satisfy the minimum diff --git a/baseq3/server_tdm.cfg b/baseq3/server_tdm.cfg new file mode 100644 index 0000000..0a58928 --- /dev/null +++ b/baseq3/server_tdm.cfg @@ -0,0 +1,14 @@ +sv_maxclients 12 + +g_gametype 3 +g_weaponrespawn 15 +g_inactivity 3000 +g_forcerespawn 0 + +seta timelimit 15 +seta fraglimit 40 +set d1 "map q3dm17 ; set nextmap vstr d2" +set d2 "map q3dm6 ; set nextmap vstr d3" +set d3 "map q3dm16 ; set nextmap vstr d4" +set d4 "map q3dm19 ; set nextmap vstr d1" +vstr d1 diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..a5df554 --- /dev/null +++ b/compose.yml @@ -0,0 +1,19 @@ +services: + q3server: + build: . + container_name: q3-philw.dev + restart: unless-stopped + + ports: + - "27960:27960/udp" + + volumes: + - ./baseq3:/q3/baseq3:ro + - ./q3plus:/q3/q3plus:ro + + working_dir: /q3 + + env_file: + - .env + + entrypoint: /q3/entrypoint.sh diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..878ecb3 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +exec /q3/ioq3ded \ + +set fs_game "${FS_GAME:-baseq3}" \ + +set dedicated "${DEDICATED:-2}" \ + +set sv_maxclients "${SV_MAXCLIENTS:-16}" \ + +set vm_rtChecks "${VM_RTCHECKS:-0}" \ + +seta hunkmegs "${HUNKMEGS:-256}" \ + +seta vm_game "${VM_GAME:-2}" \ + +set rconpassword "${RCON_PASSWORD}" \ + +exec "${SERVER_CFG:-server.cfg}" diff --git a/fetchpk3.sh b/fetchpk3.sh new file mode 100755 index 0000000..7c2394e --- /dev/null +++ b/fetchpk3.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +. ./.env || { + echo ".env file not found or failed to load" + exit 1 +} + +mkdir -p "$DIR" + +wget -nc -nd -r -l1 --no-parent -A '*.pk3' -P "$DIR" "$URL" \ +|| { + echo "wget not present, fallback to curl..." + curl -s "$URL" \ + | grep -o 'href="[^"]*\.pk3"' \ + | cut -d'"' -f2 \ + | while read -r f; do + [ -f "$DIR/$f" ] || curl -# -o "$DIR/$f" "$URL/$f" + done +} diff --git a/q3plus/autoexec.cfg b/q3plus/autoexec.cfg new file mode 100644 index 0000000..0f6c1d4 --- /dev/null +++ b/q3plus/autoexec.cfg @@ -0,0 +1 @@ +seta cl_allowdownload "1" \ No newline at end of file diff --git a/q3plus/conf/INSTAGIB.cfg b/q3plus/conf/INSTAGIB.cfg new file mode 100644 index 0000000..bc70a0e --- /dev/null +++ b/q3plus/conf/INSTAGIB.cfg @@ -0,0 +1,257 @@ + + + +// ===== CFG INFO ============================================= + + +Config +{ + Name = "^0/ ^7Q^13^7Plus ^4instaGib^7"; + // Name = "^0/ ^x999999Q^xB500003^x999999plus"; + Version = "3"; + Date = "05/07/2020"; + Author = "Shtayga"; +} + + + +// ===== MAIN SETTINGS ======================================== + + +Misc +{ + $bot_challenge = 1; + $g_speed = 315; + $g_teamAutoJoin = 0; + $sv_floodProtect = 1; + $sv_holyshit = 1; + $sv_inactivityspectator = 90; + // $sv_maps = "conf/maplist_insta.cfg"; + $sv_matchmode = 3; + $sv_Physics = PHYSICS_AIR_STEPS | PHYSICS_STEP_JUMPS; + $sv_solids = no; + $sv_spawnsystem = 3; + $sv_suddendeath = 1; + $sv_unlagged = 1; + + Ammos = AM_NONE; + Armor = 50; + Armor Hard Limit = 200; + Armor Rot Rate = 0; + Armor Soft Limit = 49; + DM Flags = DM_INFINITE_AMMO | DM_NO_FALLING_DAMAGE | DM_DROP_FLAGS; + Drop Enable = DR_FLAG; + Health = 125; + Health Hard Limit = 200 + Health Rot Rate = 0; + Health Soft Limit = 124; + Hit Box = 1.1; + Hitbox Cylinder = yes; + Items = IT_NONE; + Powerups = PW_NONE; + Start Powerups = PW_NONE; + Start Weapon = WP_RAILGUN; + Start Weapons = WP_GAUNTLET | WP_RAILGUN; + Weapons = WP_NONE; +} + +World Damage +{ + Lava = 30; + Slime = 10; + Water = 15; +} + +Anti Camp +{ + Time = 12; + Radius = 500; + Damage = 50; +} + + + +// ===== WEAPONS ============================================== + + +Suicide +{ + Damage = 0; + Radius = 0; + Style = 0; +} + +Gauntlet +{ + Cycle = 400; + Damage = 999; + Knockback = 50; + Weight = 1.0; +} + +Railgun +{ + Bounce = no; + Cycle = 1500; + Damage = 999; + Knockback = 60; + Radius = 150; + Regen = no; + Self Knockback = 125; + Sky = no; + Splash Damage = 0; + Style = WPS_RAILTRAIL | WPS_IMPACT_RAIL; + Weight = 1.0; +} + + + +// ===== GAMETYPES ============================================ + +// ===== DUEL ================================================= + + +if ($g_gametype == GT_TOURNAMENT) +{ + $fraglimit = 15; + $g_warmup = 30; + $timelimit = 8; + + Spawn Protection = 1.7; +} + + + +// ===== FREE FOR ALL ========================================= + + +else if ($g_gametype == GT_FFA) +{ + $fraglimit = 60; + $g_warmup = 45; + $timelimit = 10; + + Spawn Protection = 0; +} + + + +// ===== TEAM DEATHMATCH ====================================== + + +else if ($g_gametype == GT_TEAM) +{ + $fraglimit = 0; + $g_friendlyFire = 0; + $g_warmup = 45; + $timelimit = 15; + + Spawn Protection = 1.7; +} + + + +// ===== FREEZE TAG =========================================== + + +else if ($g_gametype == GT_FTAG) +{ + $fraglimit = 10; + $g_friendlyFire = 0; + $g_warmup = 45; + $roundlimit = 0; + $timelimit = 20; + + Spawn Protection = 3; + +Freeze Tag +{ + Crushed Thaw Time = 1; + Damage Thaw = 0; + Lava Thaw Time = 3; + Movable = yes; + Round Delay = 1; + Self Thaw Time = 90; + Slime Thaw Time = 10; + Slithery = yes; + Teamkill Freeze = yes; + Teleport Thaw = yes; + Thaw Distance = 100; + Thaw Score = 2; + Thaw Time = -2; + Void Thaw Time = 3; + Water Thaw Time = 60; + +Round +{ + Reset Flags = RESET_ALL; +} + +} + +} + + + +// ===== CLAN ARENA =========================================== + + +else if ($g_gametype == GT_CA) +{ + $fraglimit = 10; + $g_warmup = 45; + $g_friendlyFire = 0; + $timelimit = 20; + + Spawn Protection = 3; + +Round +{ + Mode = MODE_INTERMISSION; + Reset Flags = RESET_ALL; + Warmup = no; + Warmup Respawn = WARMUPRESPAWN_PLAYERS; +} + +} + + + +// ===== CAPTURE THE FLAG ===================================== + + +else if ($g_gametype == GT_CTF) +{ + $capturelimit = 8; + $fraglimit = 0; + $g_friendlyFire = 0; + $g_warmup = 60; + $roundlimit = 0; + $sv_floodProtect = 0; + $sv_teambalance = 0; + $timelimit = 20; + + Spawn Protection = 0; + +CapturetheFlag +{ + DefendBase = 5; + DefendCarrier = 2; + DefendFlag = 2; + DefendHurtCarrier = 1; + FlagAssistFrag = 1; + FlagAssistReturn = 5; + FlagCapture = 50; + FlagReturn = 5; + FlagTime = 30; + SuicideReturn = false; + KillCarrier = 10; +} + + modifyItem(0, "team_CTF_redflag", "", ""); + modifyItem(0, "team_CTF_blueflag", "", ""); + modifyItem(0, "team_CTF_neutralflag", "", ""); + +} + + diff --git a/q3plus/conf/callvote.txt b/q3plus/conf/callvote.txt new file mode 100644 index 0000000..f4ace50 --- /dev/null +++ b/q3plus/conf/callvote.txt @@ -0,0 +1,505 @@ + +/* Advanced callvote and referee commands + * + * Use "/set sv_vote callvote.txt" and/or "/set sv_referee callvote.txt" to + * enable this file. + **/ + +config, conf { + // first argument + 1 { + // little helper, when using "/callvote config" it will show + // something like "usage: /callvote config " + // instead of "usage: /callvote config <*>" + argument = "fileName"; + + // any argument + * { + // "load" is special, it will only pass if the config is + // available/exists on the server + command = "load $"; + } + } + + description = "Loads a custom gameplay config."; +} + +restart, map_restart { + // no arguments + command = "map_restart"; + + description = "Restarts the current map."; +} + +nextmap, rotate { + command = "rotate"; + + description = "Forces the next map in server rotation to load."; +} + +gametype, g_gametype { + 1 { + // don't let them vote for the current gametype + + if ( $g_gametype != GT_FFA ) { + ffa, deathmatch, 0 { + // client might have used one of the alternatives like "ffa" + // explicit use the number "0" instead of the variable "$" + command = "set g_gametype 0"; + } + } + + // just the same for all other gametypes + if ( $g_gametype != GT_DUEL ) { + duel, tourney, tournament, 1 { + command = "set g_gametype 1"; + } + } + + if ( $g_gametype != GT_TDM ) { + tdm, team, 3 { + command = "set g_gametype 3"; + } + } + + if ( $g_gametype != GT_CTF ) { + ctf, capture, 4 { + command = "set g_gametype 4"; + } + } + + if ( $g_gametype != GT_RTF ) { + rtf, return, returnflag, 5 { + command = "set g_gametype 5"; + } + } + + if ( $g_gametype != GT_1FCTF ) { + onectf, 1ctf, 1flag, 1fctf, oneflag, 1flagctf, oneflagctf, 6 { + command = "set g_gametype 6"; + } + } + + if ( $g_gametype != GT_CA ) { + ca, clan, arena, clanarena, 7 { + command = "set g_gametype 7"; + } + } + + if ( $g_gametype != GT_FREEZE ) { + freeze, tag, ftag, freezetag, 8 { + command = "set g_gametype 8"; + } + } + + if ( $g_gametype != GT_PTL ) { + ptl, protect, leader, protectleader, 9 { + command = "set g_gametype 9"; + } + } + } + + // second argument is optional + 2 { + argument = "mapName"; + + // empty and "" is just the same + empty { + // just restart the map so the new gametype is enforced + command .= "; map_restart 0"; + } + + // assume a valid mapname + * { + // "map" command is special, it will only pass if the map is + // available/exists on the server + command .= "; map $"; + } + } +} + +map { + 1 { + argument = "mapName"; + + * { + // "map" command is special, it will only pass if the map is + // available/exists on the server + command = "map $"; + } + } +} + +if ( $g_gametype >= GT_TEAM ) { + teamBalance { + 1 { + empty, + FPH, 1 { + command = "teamBalance 1"; + } + + score, 2 { + command = "teamBalance 2"; + } + } + + description = "Balance the teams on the fly, without resetting the game score."; + } +} + +timelimit { + 1 { + // referee is god, while mere mortals are limited to a range between 5 and 20 + REF *, + 5..20 { + command = "set timelimit $"; + } + } +} + +if ( in($g_gametype, GT_CTF, GT_RTF, GT_ONEFLAG) ) { + capturelimit { + 1 { + REF *, + 5..50 { + command = "set roundlimit 0; set capturelimit $"; + } + } + } +} +else { + fraglimit { + 1 { + REF *, + 5..100 { + command = "set roundlimit 0; set fraglimit $"; + } + } + } +} + +roundlimit { + 1 { + REF *, + 0..100 { + command = "set roundlimit $"; + } + } +} + +physics, sv_physics { + 1 { + //baseq3 { + // command = "set sv_physics 0"; + //} + + bunnyhop, +bunnyhop { + command = "set sv_physics ". ( $sv_physics | PHYSICS_CONTROL_FORWARD | PHYSICS_CONTROL_SIDEWARD | PHYSICS_CONTROL_STOP ); + } + -bunnyhop { + command = "set sv_physics ". ( $sv_physics & ~(PHYSICS_CONTROL_FORWARD | PHYSICS_CONTROL_SIDEWARD | PHYSICS_CONTROL_STOP) ); + } + + // referee can set any value + REF * { + command = "set sv_physics $"; + } + } + + description = "Changes the movement physics."; +} + +unlagged, sv_unlagged { + 1 { + if ( $sv_unlagged ) { + off, 0 { + command = "set sv_unlagged 0"; + } + } + else { + on, 1 { + command = "set sv_unlagged 1"; + } + } + } +} + + + + +// Referee commands +REF warmup, REF g_warmup { + 1 { + on, 1 { + command = "set g_doWarmup 1"; + + if ( $g_warmup < 5 ) { + command .= "; set g_warmup 5"; + } + } + + off, 0 { + command = "set g_doWarmup 0"; + } + + 0..999 { + command = "set g_doWarmup 1; set g_warmup $"; + } + } +} + +if ( $g_gametype >= GT_TEAM ) { + REF friendlyFire, REF g_friendlyFire { + 1 { + on, 1 { + command = "set g_friendlyFire 1"; + } + + off, 0 { + command = "set g_friendlyFire 0"; + } + } + + description = "Allows hurting team members."; + } +} + +REF suddenDeath, REF sv_suddenDeath { + 1 { + on, 1 { + command = "set sv_suddenDeath 1"; + } + + off, 0 { + command = "set sv_suddenDeath 0"; + } + } +} + +REF forceTeam { + 1 { + 0..63 { + command = "forceteam $"; + } + + all { + command = "forceteam all"; + } + + bots, allbots { + command = "forceteam allbots"; + } + } + + 2 { + if ( $g_gametype >= GT_TEAM ) { + auto, a, free, f { + command .= " free"; + } + + red, r { + command .= " red"; + } + + blue, b { + command .= " blue"; + } + } + else { + free, f, auto, a { + command .= " free"; + } + } + + spec, s { + command .= " spectator"; + } + + away { + command .= " away"; + } + } +} + +REF matchMode, REF sv_matchMode { + 1 { + on, 1 { + command = "set sv_matchMode 1"; + } + + off, 0 { + command = "set sv_matchMode 0"; + } + } + + description = "Enables advanced clan war options like ^3/timeout^7, ^3/lock ^7etc."; +} + +if ( $sv_matchMode ) { + if ( $g_gametype >= GT_TEAM ) { + REF forceJoin { + 1 { + argument = "playerId"; + + 0..63 { + command = "forcejoin $"; + } + } + + 2 { + red, r { + command .= " red"; + } + + blue, b { + command .= " blue"; + } + + none, n { + command .= " none"; + } + } + } + + REF lock { + 1 { + all, a { + command = "lock all"; + } + + red, r { + command = "lock red"; + } + + blue, b { + command = "lock blue"; + } + } + } + + REF unlock { + 1 { + all, a { + command = "unlock all"; + } + + red, r { + command = "unlock red"; + } + + blue, b { + command = "unlock blue"; + } + } + } + } + + REF timeout { + command = "timeout"; + } + REF pause { + command = "pause"; + } + + REF timein { + command = "timein"; + } + REF ready { + command = "ready"; + } + REF unpause { + command = "unpause"; + } + + REF notready { + command = "notready"; + } +} + +REF mute { + 1 { + argument = "playerId"; + + 0..63 { + command = "mute $"; + } + } +} + +REF unmute { + 1 { + argument = "playerId"; + + 0..63 { + command = "unmute $"; + } + } +} + +REF status, REF s { + command = "s"; +} + +if ( $sv_userdb ) { + REF whois, REF w { + 1 { + argument = "playerId"; + + empty { + command = "w"; + } + + 0..63 { + command = "whois $"; + } + } + } +} + +REF kick, REF k { + 1 { + argument = "playerId"; + + 0..63 { + command = "k $+"; + } + } + + // just to show some valuable information for "/ref kick ?" + 2 { + argument = "duration"; + + REF empty, REF * {} + } + + 3 { + argument = "reason"; + + REF empty, REF * {} + } +} + +REF ban { + 1 { + argument = "playerId"; + + 0..63 { + command = "ban $+"; + } + } + + // just to show some valuable information for "/ref ban ?" + 2 { + argument = "duration"; + + REF empty, REF * {} + } + + 3 { + argument = "reason"; + + REF empty, REF * {} + } + + description = "Bans a player.\n\n^3duration ^7can be used for a temporary ban\nlike ^31w ^7for one week, ^32d ^7for two days,\n^33h ^7for three hours etc."; +} diff --git a/q3plus/conf/maplist.cfg b/q3plus/conf/maplist.cfg new file mode 100644 index 0000000..932a0ac --- /dev/null +++ b/q3plus/conf/maplist.cfg @@ -0,0 +1,24 @@ +^1Available Maps^7 + +^4- ^7almostlost ^4(aka proq3tourney7) +^4- ^7asylum +^4- ^7battleforged ^4(aka phantq3dm1) +^4- ^7bloodister ^4(ztn3dm1 retextured) +^4- ^7campgrounds ^4(aka q3dm6) +^4- ^7cobaltstation ^4(aka q3dm16) +^4- ^7deadandgone ^4(aka ra3map11b) +^4- ^7devilish ^4(aka storm3tourney8) +^4- ^7elder +^4- ^7eviscerated ^4(aka q3dm4) +^4- ^7hellsgate ^4(aka q3tourney3) +^4- ^7heroskeep ^4(aka q3dm9) +^4- ^7hiddenfortress ^4(aka pro-dcmap7) +^4- ^7lostworld ^4(aka q3dm13) +^4- ^7pro-t4_v2 ^4(q3tourney4 remix) +^4- ^7retribution ^4(aka q3dm7) +^4- ^7shifter ^4(from QW) +^4- ^7sokar3dm5 +^4- ^7threestory ^4(aka ra3map9a) +^4- ^7thunderstruck ^4(aka ra3map1b) + +^1Usage: ^7/callvote map ^1<^7mapName^1> diff --git a/q3plus/conf/philw.cfg b/q3plus/conf/philw.cfg new file mode 100644 index 0000000..65df561 --- /dev/null +++ b/q3plus/conf/philw.cfg @@ -0,0 +1,872 @@ +Config +{ + Name = "^0/ ^7Q^13^7Plus^4"; + Version = "3"; + Date = "Sept 2, 2022"; + Author = "Gibins with help from Foo"; +} + + + +// ===== MAIN SETTINGS ======================================== + + +Misc +{ + $bot_challenge = 1; + $g_autojoin = 0; + $g_speed = 320; + $g_quadfactor = 3.0; + $g_teamAutoJoin = 0; + $sv_holyshit = 1; + $sv_inactivityspectator = 120; + //$sv_maps = "conf/maplist.cfg"; + $sv_matchmode = 2; + $sv_Physics = 0; + $sv_solids = no; + $sv_spawnsystem = 2; + $sv_suddendeath = 1; + $sv_unlagged = 1; + + Hit Box = 1.0; + Hitbox Cylinder = No; + Start Powerups = PW_NONE; +} + + + +// ===== WEAPONS ============================================== + + +Suicide +{ + Damage = 0; + Radius = 0; + Style = 0; +} + +Gauntlet +{ + Cycle = 400; + Damage = 50; + Knockback = Damage; + Weight = 1.0; +} + +Machinegun +{ + AmmoLimit = 150; + Bounce = no; + Cycle = 100; + Damage = ( $g_gametype != GT_TEAM ? 7 : 5 ); + Knockback = Damage; + Radial = 1; + Radius = no; + Regen = no; + Self Knockback = 0; + Sky = no; + Splash Damage = 0; + Spread = 1; + Style = WPS_IMPACT_MACHINEGUN; + Weight = 1.0; +} + +Shotgun +{ + Ammo Limit = 25; + Bounce = no; + Cycle = 1000; + Damage = 10; + Firing Knockback = 0; + Firing Knockback HV = 0.8; + Firing Weight = 1.0; + FixedPattern = 2 | PATTERN_TIGHT; + Pellet Count = 11; + Radial = yes; + Radius = no; + Regen = no; + Self Damage = 0.5; + Self Knockback HV = 0.0; + Self Slide Factor = 1.0; + Sky = no; + Splash Damage = 0; + Spread = 700; + Style = WPS_IMPACT_SHOTGUN; + Time -> Ammo = 0; + Time -> Dropping = 0; + Time -> Raising = 0; + Time -> Shooting = 0; + Weight = 1.0; +} + +Grenade Launcher +{ + AmmoLimit = 25; + Bounce = -1; + Cycle = 800; + Damage = 100; + Gravity = yes; + Knockback = Damage; + Radius = 150; + Regen = no; + Self Damage = 0.5; + Self Knockback = Damage; + Sky = 0; + Speed = 700; + Splash Damage = 100; + Style = WPS_IMPACT_GRENADE; + Time to Live = 2.5; + Weight = 1.0; +} + +Rocket Launcher +{ + AmmoLimit = 50; + Bounce = no; + Cycle = 800; + Damage = 100; + Gravity = no; + Homing Factor = 0.3; + Knockback = Damage; + Radius = 120; + Regen = no; + Self Damage = 0.5; + Self Knockback = Damage; + Sky = 0; + Speed = 900; + Splash Damage = 100; + Style = WPS_IMPACT_ROCKET; + Time to Live = 30; + Weight = 1.0; +} + +Lightning Gun +{ + AmmoLimit = 150; + Bounce = no; + Cycle = 50; + Damage = 8; + Knockback = Damage; + Radius = no; + Range = 768; + Regen = no; + Self Knockback = 0; + Sky = no; + Splash Damage = 0; + Style = no; + Weight = 1.0; +} + +Railgun +{ + AmmoLimit = 25; + Bounce = no; + Cycle = 1500; + Damage = 100; + Knockback = Damage; + Radius = no; + Regen = no; + Self Knockback = 0; + Sky = no; + Splash Damage = 0; + Style = WPS_RAILTRAIL | WPS_IMPACT_RAIL; + Weight = 1.0; +} + +Plasma Gun +{ + AmmoLimit = 150; + Bounce = no; + Cycle = 100; + Damage = 20; + Gravity = no; + Knockback = Damage; + Radius = 20; + Regen = no; + Self Damage = 0.5; + Self Knockback = Damage; + Sky = no; + Speed = 2000; + Splash Damage = 14; + Spread = 300; + Style = WPS_IMPACT_PLASMA; + Time to Live = 30; + Weight = 1.0; +} + +BFG +{ + Ammo Limit = 50; + Bounce = no; + Cycle = 333; + Damage = 100; + Gravity = no; + KnockBack = Damage; + Radius = 80; + Regen = no; + Self Damage = 0.5; + SelfKnockBack = Damage; + Sky = no; + Speed = 2000; + Splash Damage = 100; + Style = WPS_IMPACT_BFG; + Time to Live = 30; + Weight = 1.0; +} + + + +// ===== ITEMS ETC. =========================================== + + +Items +{ + Shootable = no; +} + +Armor System +{ + System = 0; + Spawn Quality = IT_ARMOR_JACKET; + Jacket Limit = 200; + Combat Limit = 200; + Body Limit = 200; + Jacket Quality = 0.66; + Combat Quality = 0.66; + Body Quality = 0.66; +} + +Regen Factors +{ + Soft Health = 15; + Hard Health = Soft Health / 3; + Soft Armor = 0; + Hard Armor = 0; +} + +Suit Factors +{ + Direct = 0.75; + Splash = 0; +} + + + +// ===== GAMETYPES ============================================ + +// ===== DUEL ================================================= + + +if ($g_gametype == GT_TOURNAMENT) +{ + $fraglimit = 0; + $g_warmup = 0; + $sv_floodProtect = 0; + $sv_rotation = ""; + $sv_maps = "conf/maplist_1v1.cfg"; + $timelimit = 10; + + Ammos = AM_ALL & ~AM_BFG; + Armor = 0; + DM Flags = DM_DROP_WEAPONS; + Health = 125; + Items = IT_ALL & ~(IT_MEDKIT | IT_TELEPORTER); + Powerups = PW_NONE; + Spawn Protection = 0; + Start Weapons = WP_GAUNTLET | WP_MACHINEGUN; + Weapons = WP_ALL & ~(WP_BFG | WP_GRAPPLING_HOOK); + +World Damage +{ + Fall Medium = 5; + Fall Far = 10; + Lava = 30; + Slime = 10; + Water = 15; +} + + modifyItem(0, "weapon_machinegun", "", 5, 50); + modifyItem(0, "weapon_shotgun", "", 5, 10); + modifyItem(0, "weapon_grenadelauncher", "", 5, 10); + modifyItem(0, "weapon_rocketlauncher", "", 5, 10); + modifyItem(0, "weapon_lightning", "", 5, 100); + modifyItem(0, "weapon_railgun", "", 5, 10); + modifyItem(0, "weapon_plasmagun", "", 5, 50); + + modifyItem(0, "ammo_bullets", "", 40, 50); + modifyItem(0, "ammo_shells", "", 40, 5); + modifyItem(0, "ammo_grenades", "", 40, 5); + modifyItem(0, "ammo_rockets", "", 40, 5); + modifyItem(0, "ammo_lightning", "", 40, 50); + modifyItem(0, "ammo_slugs", "", 40, 5); + modifyItem(0, "ammo_cells", "", 40, 50); + + modifyItem(0, "item_health_small", "", 35, 5); + modifyItem(0, "item_health", "", 35, 25); + modifyItem(0, "item_health_large", "", 35, 50); + modifyItem(0, "item_health_mega", "", 35, 100); + + modifyItem(0, "item_armor_shard", "", 25, 5); + modifyItem(0, "item_armor_jacket", "", 25, 25); + modifyItem(0, "item_armor_combat", "", 25, 50); + modifyItem(0, "item_armor_body", "", 25, 100); + + modifyItem(0, "holdable_medkit", "", 60); + modifyItem(0, "holdable_teleporter", "", 60); + +} + + + +// ===== FREE FOR ALL ========================================= + + +else if ($g_gametype == GT_FFA) +{ + $fraglimit = 40; + $g_warmup = 1; + $sv_floodProtect = 1; + // $sv_maps = "conf/maplist_ffa.cfg"; + $timelimit = 10; + + Ammos = AM_ALL; + Armor = 0; + DM Flags = DM_DROP_WEAPONS | DM_DROP_HOLDABLES | DM_DROP_POWERUPS | DM_NO_QUAD_KNOCKBACK | DM_NO_FALLING_DAMAGE; + Health = 125; + Items = IT_ALL; + Powerups = PW_ALL; + Spawn Protection = 0; + Start Weapons = WP_GAUNTLET | WP_MACHINEGUN; + Weapons = WP_ALL; + +World Damage +{ + Fall Medium = 0; + Fall Far = 0; + Lava = 30; + Slime = 10; + Water = 15; +} + + modifyItem(0, "weapon_machinegun", "", 3, 50); + modifyItem(0, "weapon_shotgun", "", 3, 10); + modifyItem(0, "weapon_grenadelauncher", "", 3, 10); + modifyItem(0, "weapon_rocketlauncher", "", 3, 10); + modifyItem(0, "weapon_lightning", "", 3, 100); + modifyItem(0, "weapon_railgun", "", 3, 10); + modifyItem(0, "weapon_plasmagun", "", 3, 50); + modifyItem(0, "weapon_bfg", "", 30, 10); + + modifyItem(0, "ammo_bullets", "", 30, 50); + modifyItem(0, "ammo_shells", "", 30, 5); + modifyItem(0, "ammo_grenades", "", 30, 5); + modifyItem(0, "ammo_rockets", "", 30, 5); + modifyItem(0, "ammo_lightning", "", 30, 50); + modifyItem(0, "ammo_slugs", "", 30, 5); + modifyItem(0, "ammo_cells", "", 30, 50); + + modifyItem(0, "item_health_small", "", 35, 5); + modifyItem(0, "item_health", "", 35, 25); + modifyItem(0, "item_health_large", "", 35, 50); + modifyItem(0, "item_health_mega", "", 35, 100); + + modifyItem(0, "item_armor_shard", "", 25, 5); + modifyItem(0, "item_armor_jacket", "", 25, 25); + modifyItem(0, "item_armor_combat", "", 25, 50); + modifyItem(0, "item_armor_body", "", 25, 100); + + modifyItem(0, "item_quad", "", "", 31); + modifyItem(0, "item_enviro", "", "", 31); + modifyItem(0, "item_haste", "", "", 31); + modifyItem(0, "item_invis", "", "", 31); + modifyItem(0, "item_regen", "", "", 31); + modifyItem(0, "item_flight", "", "", 31); + + modifyItem(0, "holdable_medkit", "", 60); + modifyItem(0, "holdable_teleporter", "", 60); + +} + + + +// ===== TEAM DEATHMATCH ====================================== + + +else if ($g_gametype == GT_TEAM) +{ + $fraglimit = 50; + $g_friendlyFire = 1; + $g_warmup = 45; + $sv_floodProtect = 1; + $sv_rotation = ""; + $sv_maps = "conf/maplist_tdm.cfg"; + $sv_teambalance = 1; + $timelimit = 10; + + Ammos = AM_ALL & ~AM_BFG; + Armor = 0; + DM Flags = DM_DROP_WEAPONS | DM_DROP_HOLDABLES | DM_NO_QUAD_KNOCKBACK; + Drop Enable = DR_WEAPON; + Health = 125; + Items = IT_ALL; + Powerups = PW_QUAD | PW_REGEN | PW_BATTLESUIT; + Spawn Protection = 0; + Start Weapons = WP_GAUNTLET | WP_MACHINEGUN; + Weapons = WP_ALL & ~(WP_BFG | WP_GRAPPLING_HOOK); + +World Damage +{ + Fall Medium = 5; + Fall Far = 10; + Lava = 30; + Slime = 10; + Water = 15; +} + + modifyItem(0, "weapon_machinegun", "", 20, 50); + modifyItem(0, "weapon_shotgun", "", 20, 10); + modifyItem(0, "weapon_grenadelauncher", "", 20, 10); + modifyItem(0, "weapon_rocketlauncher", "", 20, 10); + modifyItem(0, "weapon_lightning", "", 20, 100); + modifyItem(0, "weapon_railgun", "", 20, 10); + modifyItem(0, "weapon_plasmagun", "", 20, 50); + + modifyItem(0, "ammo_bullets", "", 40, 50); + modifyItem(0, "ammo_shells", "", 40, 5); + modifyItem(0, "ammo_grenades", "", 40, 5); + modifyItem(0, "ammo_rockets", "", 40, 5); + modifyItem(0, "ammo_lightning", "", 40, 50); + modifyItem(0, "ammo_slugs", "", 40, 5); + modifyItem(0, "ammo_cells", "", 40, 50); + + modifyItem(0, "item_health_small", "", 35, 5); + modifyItem(0, "item_health", "", 35, 25); + modifyItem(0, "item_health_large", "", 35, 50); + modifyItem(0, "item_health_mega", "", 35, 100); + + modifyItem(0, "item_armor_shard", "", 25, 5); + modifyItem(0, "item_armor_jacket", "", 25, 25); + modifyItem(0, "item_armor_combat", "", 25, 50); + modifyItem(0, "item_armor_body", "", 25, 100); + + modifyItem(0, "item_quad", "", "", 31); + modifyItem(0, "item_enviro", "", "", 31); + modifyItem(0, "item_haste", "", "", 31); + modifyItem(0, "item_invis", "", "", 31); + modifyItem(0, "item_regen", "", "", 31); + modifyItem(0, "item_flight", "", "", 31); + + modifyItem(0, "holdable_medkit", "", 60); + modifyItem(0, "holdable_teleporter", "", 60); + +} + + + +// ===== FREEZE TAG =========================================== + + +else if ($g_gametype == GT_FTAG) +{ + $fraglimit = 10; + $g_friendlyFire = 0; + $g_warmup = 500; + $roundlimit = 0; + $sv_floodProtect = 0; + $sv_rotation = ""; + $sv_maps = "conf/maplist_ft.cfg"; + $sv_teambalance = 0; + $timelimit = 20; + + Ammos = AM_ALL & ~AM_BFG; + Armor = 138; + DM Flags = DM_DROP_WEAPONS | DM_DROP_HOLDABLES | DM_DROP_POWERUPS | DM_NO_FALLING_DAMAGE | DM_NO_SELF_DAMAGE; + Health = 108; + Items = IT_ALL; + Powerups = PW_ALL; + Spawn Protection = -2; + Start Weapon = WP_LAST_USED; + Start Weapons = WP_ALL & ~(WP_GRAPPLING_HOOK | WP_BFG); + Weapons = WP_ALL & ~(WP_GRAPPLING_HOOK | WP_BFG); + +Freeze Tag +{ + Crushed Thaw Time = 1; + Damage Thaw = 0; + Lava Thaw Time = 6; + Movable = yes; + Round Delay = 1; + Self Thaw Time = 90; + Slime Thaw Time = 10; + Slithery = no; + Teamkill Freeze = yes; + Teleport Thaw = no; + Thaw Distance = 100; + Thaw Score = 2; + Thaw Time = -2; + Void Thaw Time = 3; + Water Thaw Time = 60; + +World Damage +{ + Fall Medium = 0; + Fall Far = 0; + Lava = 30; + Slime = 10; + Water = 15; +} + +Round +{ + Reset Flags = RESET_NONE; + Mode = 2; + Warmup = 8; +} + +Machinegun +{ + Ammo = 100 +} + +Shotgun +{ + Ammo = 10; +} + +Grenade Launcher +{ + Ammo = 10; +} + +Rocket Launcher +{ + Ammo = 15; +} + +Lightning Gun +{ + Ammo = 100; +} + +Railgun +{ + Ammo = 10; +} + +Plasma Gun +{ + Ammo = 50; +} + +} + + modifyItem(0, "weapon_machinegun", "", 5, 50); + modifyItem(0, "weapon_shotgun", "", 5, 10); + modifyItem(0, "weapon_grenadelauncher", "", 5, 10); + modifyItem(0, "weapon_rocketlauncher", "", 5, 10); + modifyItem(0, "weapon_lightning", "", 5, 100); + modifyItem(0, "weapon_railgun", "", 5, 10); + modifyItem(0, "weapon_plasmagun", "", 5, 50); + + modifyItem(0, "ammo_bullets", "", 40, 50); + modifyItem(0, "ammo_shells", "", 40, 5); + modifyItem(0, "ammo_grenades", "", 40, 5); + modifyItem(0, "ammo_rockets", "", 40, 5); + modifyItem(0, "ammo_lightning", "", 40, 50); + modifyItem(0, "ammo_slugs", "", 40, 5); + modifyItem(0, "ammo_cells", "", 40, 50); + + modifyItem(0, "item_health_small", "", 35, 5); + modifyItem(0, "item_health", "", 35, 25); + modifyItem(0, "item_health_large", "", 35, 50); + modifyItem(0, "item_health_mega", "", 35, 100); + + modifyItem(0, "item_armor_shard", "", 25, 5); + modifyItem(0, "item_armor_jacket", "", 25, 25); + modifyItem(0, "item_armor_combat", "", 25, 50); + modifyItem(0, "item_armor_body", "", 25, 100); + + modifyItem(0, "item_quad", "", "", 31); + modifyItem(0, "item_enviro", "", "", 31); + modifyItem(0, "item_haste", "", "", 31); + modifyItem(0, "item_invis", "", "", 31); + modifyItem(0, "item_regen", "", "", 31); + modifyItem(0, "item_flight", "", "", 31); + + modifyItem(0, "holdable_medkit", "", 60); + modifyItem(0, "holdable_teleporter", "", 60); + +} + + + +// ===== CLAN ARENA =========================================== + + +else if ($g_gametype == GT_CA) +{ + $fraglimit = 10; + $g_warmup = 500; + $g_friendlyFire = 0; + $sv_floodProtect = 0; + $sv_rotation = ""; + $sv_maps = "conf/maplist_ca.cfg"; + $sv_teambalance = 0; + $timelimit = 20; + Ammos = AM_NONE; + Armor = 120; + DM Flags = DM_NO_SELF_DAMAGE | DM_NO_FALLING_DAMAGE; + Health = 200; + Items = IT_NONE; + Powerups = PW_NONE; + Spawn Protection = -10; + Start Weapon = WP_LAST_USED; + Start Weapons = WP_ALL & ~(WP_GRAPPLING_HOOK | WP_BFG); + Weapons = WP_NONE; + +Round +{ + Mode = 2; + Reset Flags = RESET_ALL; + Warmup = 10; + Warmup Respawn = WARMUPRESPAWN_PLAYERS; +} + +World Damage +{ + Fall Medium = 0; + Fall Far = 0; + Lava = 30; + Slime = 10; + Water = 15; +} + +Machinegun +{ + Ammo = 100 +} + +Shotgun +{ + Ammo = 50; + AmmoLimit =50; +} + +Grenade Launcher +{ + Ammo = 25; +} + +Rocket Launcher +{ + Ammo = 50; +} + +Lightning Gun +{ + Ammo = 150; +} + +Railgun +{ + Ammo = 25; +} + +Plasma Gun +{ + Ammo = 100; +} + +} + + + +// ===== CAPTURE THE FLAG ===================================== + + +else if ($g_gametype == GT_CTF) +{ + $capturelimit = 5; + Respawn Time Suicide = 5; + Respawn Time = 1.7; + $fraglimit = 0; + $g_friendlyFire = 0; + $g_warmup = 900; + $roundlimit = 0; + $sv_floodProtect = 0; + $sv_maps = "conf/maplist_ctf.cfg"; + $sv_teambalance = 1; + $timelimit = 10; + + Ammos = AM_ALL & ~AM_BFG; + Armor = 0; + DM Flags = DM_DROP_WEAPONS | DM_DROP_HOLDABLES | DM_DROP_POWERUPS | DM_DROP_FLAGS | DM_NO_QUAD_KNOCKBACK; + Drop Enable = DR_FLAG | DR_WEAPON; + Health = 125; + Items = IT_ALL; + Powerups = PW_ALL; + Spawn Protection = 0; + Start Weapons = WP_GAUNTLET | WP_MACHINEGUN; + Weapons = WP_ALL & ~(WP_GRAPPLING_HOOK | WP_BFG); + +CapturetheFlag +{ + DefendBase = 10; + DefendCarrier = 5; + DefendFlag = 5; + DefendHurtCarrier = 2; + FlagAssistFrag = 2; + FlagAssistReturn = 10; + FlagCapture = 100; + FlagReturn = 10; + FlagTime = 30; + KillCarrier = 20; + SuicideReturn = false; +} + +World Damage +{ + Fall Medium = 5; + Fall Far = 10; + Lava = 30; + Slime = 10; + Water = 15; +} + + modifyItem(0, "weapon_machinegun", "", 5, 50); + modifyItem(0, "weapon_shotgun", "", 5, 10); + modifyItem(0, "weapon_grenadelauncher", "", 5, 10); + modifyItem(0, "weapon_rocketlauncher", "", 5, 10); + modifyItem(0, "weapon_lightning", "", 5, 100); + modifyItem(0, "weapon_railgun", "", 5, 10); + modifyItem(0, "weapon_plasmagun", "", 5, 50); + + modifyItem(0, "ammo_bullets", "", 40, 50); + modifyItem(0, "ammo_shells", "", 40, 5); + modifyItem(0, "ammo_grenades", "", 40, 5); + modifyItem(0, "ammo_rockets", "", 40, 5); + modifyItem(0, "ammo_lightning", "", 40, 50); + modifyItem(0, "ammo_slugs", "", 40, 5); + modifyItem(0, "ammo_cells", "", 40, 50); + + modifyItem(0, "item_health_small", "", 35, 5); + modifyItem(0, "item_health", "", 35, 25); + modifyItem(0, "item_health_large", "", 35, 50); + modifyItem(0, "item_health_mega", "", 35, 100); + + modifyItem(0, "item_armor_shard", "", 25, 5); + modifyItem(0, "item_armor_jacket", "", 25, 25); + modifyItem(0, "item_armor_combat", "", 25, 50); + modifyItem(0, "item_armor_body", "", 25, 100); + + modifyItem(0, "item_quad", "", "", 31); + modifyItem(0, "item_enviro", "", "", 31); + modifyItem(0, "item_haste", "", "", 31); + modifyItem(0, "item_invis", "", "", 31); + modifyItem(0, "item_regen", "", "", 31); + modifyItem(0, "item_flight", "", "", 31); + + modifyItem(0, "holdable_medkit", "", 60); + modifyItem(0, "holdable_teleporter", "", 60); + + modifyItem(0, "team_CTF_redflag", "", ""); + modifyItem(0, "team_CTF_blueflag", "", ""); + modifyItem(0, "team_CTF_neutralflag", "", ""); + +} + + + +// ===== 1 FLAG CTF ===================================== + + +else if ($g_gametype == GT_1CTF) +{ + $capturelimit = 8; + Respawn Time Suicide = 5; + Respawn Time = 1.7; + $fraglimit = 0; + $g_friendlyFire = 0; + $g_warmup = 60; + $roundlimit = 0; + $sv_floodProtect = 0; + $sv_maps = "conf/maplist_ctf.cfg"; + $sv_teambalance = 1; + $timelimit = 20; + + Ammos = AM_ALL & ~AM_BFG; + Armor = 0; + DM Flags = DM_DROP_WEAPONS | DM_DROP_HOLDABLES | DM_DROP_POWERUPS | DM_DROP_FLAGS | DM_NO_QUAD_KNOCKBACK; + Drop Enable = DR_FLAG | DR_WEAPON; + Health = 125; + Items = IT_ALL; + Powerups = PW_ALL; + Spawn Protection = 0; + Start Weapons = WP_GAUNTLET | WP_MACHINEGUN; + Weapons = WP_ALL & ~(WP_GRAPPLING_HOOK | WP_BFG); + +CapturetheFlag +{ + DefendBase = 10; + DefendCarrier = 5; + DefendFlag = 5; + DefendHurtCarrier = 2; + FlagAssistFrag = 2; + FlagAssistReturn = 10; + FlagCapture = 100; + FlagReturn = 10; + FlagTime = 30; + KillCarrier = 20; + SuicideReturn = false; +} + +World Damage +{ + Fall Medium = 5; + Fall Far = 10; + Lava = 30; + Slime = 10; + Water = 15; +} + + modifyItem(0, "weapon_machinegun", "", 5, 50); + modifyItem(0, "weapon_shotgun", "", 5, 10); + modifyItem(0, "weapon_grenadelauncher", "", 5, 10); + modifyItem(0, "weapon_rocketlauncher", "", 5, 10); + modifyItem(0, "weapon_lightning", "", 5, 100); + modifyItem(0, "weapon_railgun", "", 5, 10); + modifyItem(0, "weapon_plasmagun", "", 5, 50); + + modifyItem(0, "ammo_bullets", "", 40, 50); + modifyItem(0, "ammo_shells", "", 40, 5); + modifyItem(0, "ammo_grenades", "", 40, 5); + modifyItem(0, "ammo_rockets", "", 40, 5); + modifyItem(0, "ammo_lightning", "", 40, 50); + modifyItem(0, "ammo_slugs", "", 40, 5); + modifyItem(0, "ammo_cells", "", 40, 50); + + modifyItem(0, "item_health_small", "", 35, 5); + modifyItem(0, "item_health", "", 35, 25); + modifyItem(0, "item_health_large", "", 35, 50); + modifyItem(0, "item_health_mega", "", 35, 100); + + modifyItem(0, "item_armor_shard", "", 25, 5); + modifyItem(0, "item_armor_jacket", "", 25, 25); + modifyItem(0, "item_armor_combat", "", 25, 50); + modifyItem(0, "item_armor_body", "", 25, 100); + + modifyItem(0, "item_quad", "", "", 31); + modifyItem(0, "item_enviro", "", "", 31); + modifyItem(0, "item_haste", "", "", 31); + modifyItem(0, "item_invis", "", "", 31); + modifyItem(0, "item_regen", "", "", 31); + modifyItem(0, "item_flight", "", "", 31); + + modifyItem(0, "holdable_medkit", "", 60); + modifyItem(0, "holdable_teleporter", "", 60); + + modifyItem(0, "team_CTF_redflag", "", ""); + modifyItem(0, "team_CTF_blueflag", "", ""); + modifyItem(0, "team_CTF_neutralflag", "", ""); + +} diff --git a/q3plus/conf/rotation.cfg b/q3plus/conf/rotation.cfg new file mode 100644 index 0000000..b2740a8 --- /dev/null +++ b/q3plus/conf/rotation.cfg @@ -0,0 +1,24 @@ +$timelimit = 10; +$fraglimit = 40; +$g_gametype = GT_FFA; + +$sv_config = "default"; + + + +q3dm1 { + $fraglimit = 50; +} + +q3dm2 +pro-q3dm6 + +q3ctf1 { + $g_gametype = GT_CTF; + $timelimit = 15; + $capturelimit = 10; + + $sv_config = "q3plus"; +} + +q3ctf4 diff --git a/q3plus/description.txt b/q3plus/description.txt new file mode 100644 index 0000000..5cdc8a6 --- /dev/null +++ b/q3plus/description.txt @@ -0,0 +1 @@ + ^7q^13^7plus \ No newline at end of file -- cgit v1.2.3