From: Mario Date: Sat, 30 Apr 2016 07:35:34 +0000 (+0000) Subject: Merge branch 'sev/luma_update' into 'master' X-Git-Tag: xonotic-v0.8.2~944 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=669311cae7c93d70ff08fa2e3dd30cabdd2da8fa;hp=17595a841ddda1696fb771b9affd0a7c2a68828a Merge branch 'sev/luma_update' into 'master' Small luma update - Remove background color from menu gametype icons, because the gametype vote dialog now has its own background. - Slightly revise the shape of the buff icons - Make the detailed crosshairs (last row) less obtrusive. - Add new menu background image See merge request !304 --- diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 77d421436f..3cdd43f305 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,9 +17,14 @@ test_sv_game: - cd darkplaces && make sv-debug -j $(nproc) && export ENGINE="$PWD/darkplaces-dedicated -xonotic" - cd .. + - mkdir -p data/maps - wget -O data/g-23.pk3 http://beta.xonotic.org/autobuild-bsp/latest/g-23.pk3 + - wget -O data/maps/g-23.mapinfo https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/g-23.mapinfo + - wget -O data/maps/g-23.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/g-23.waypoints + - wget -O data/maps/g-23.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/g-23.waypoints.cache + - wget -O data/maps/g-23.waypoints.hardwired https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/g-23.waypoints.hardwired - make - - EXPECT=07fdfd9a19025920a599995730eb2a78 + - EXPECT=4bd5b0276cdd100c831c73f0400eca71 - HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg | tee /dev/stderr | grep '^:' diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..c2b8564351 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,78 @@ +cmake_minimum_required(VERSION 2.8.11) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +project(xonotic-data LANGUAGES ASM) + +include_directories(qcsrc) + +add_definitions(-DNDEBUG=1) + +find_package(Git REQUIRED) +execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --dirty=~ + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESC + OUTPUT_STRIP_TRAILING_WHITESPACE +) +add_definitions(-DWATERMARK=\"${GIT_DESC}\") + +set_source_files_properties( + qcsrc/client/progs.inc + qcsrc/server/progs.inc + qcsrc/menu/progs.inc + PROPERTIES + LANGUAGE ASM + HEADER_FILE_ONLY FALSE +) + +add_executable(csprogs qcsrc/client/progs.inc) +target_compile_definitions(csprogs PRIVATE -DCSQC) +add_dependencies(csprogs gmqcc) + +add_executable(progs qcsrc/server/progs.inc) +target_compile_definitions(progs PRIVATE -DSVQC) +add_dependencies(progs gmqcc) + +add_executable(menu qcsrc/menu/progs.inc) +target_compile_definitions(menu PRIVATE -DMENUQC) +add_dependencies(menu gmqcc) + +function(set_prelude target prelude) + get_target_property(MY_PROJECT_SOURCES target SOURCES) + foreach (source IN LISTS MY_PROJECT_SOURCES) + set_property( + SOURCE ${source} + APPEND PROPERTY COMPILE_FLAGS + "-include ${PROJECT_SOURCE_DIR}/${prelude}" + ) + endforeach () +endfunction() +# set_prelude(csprogs qcsrc/lib/_all.inc) + +function(copy prog) + add_custom_command(TARGET ${prog} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$/${prog}.dat" "${prog}.dat" + COMMAND ${CMAKE_COMMAND} -E copy "$/${prog}.lno" "${prog}.lno" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + VERBATIM) +endfunction() +copy(csprogs) +copy(progs) +copy(menu) + +function(pack prog) + add_custom_target(${prog}.pk3 + DEPENDS ${prog}-${GIT_DESC}.pk3 + ) + add_custom_command(OUTPUT ${prog}-${GIT_DESC}.pk3 + DEPENDS ${prog} + COMMAND ${CMAKE_COMMAND} -E echo "http://xonotic.org" > "${prog}-${GIT_DESC}.txt" + COMMAND ${CMAKE_COMMAND} -E copy "$/${prog}.dat" "${prog}-${GIT_DESC}.dat" + COMMAND ${CMAKE_COMMAND} -E copy "$/${prog}.lno" "${prog}-${GIT_DESC}.lno" + COMMAND ${CMAKE_COMMAND} -E tar "cfv" "${prog}-${GIT_DESC}.pk3" --format=zip + "${prog}-${GIT_DESC}.txt" + "${prog}-${GIT_DESC}.dat" + "${prog}-${GIT_DESC}.lno" + VERBATIM + ) +endfunction() +pack(csprogs) diff --git a/_hud_common.cfg b/_hud_common.cfg index 70900762f7..0fbf103d55 100644 --- a/_hud_common.cfg +++ b/_hud_common.cfg @@ -20,6 +20,31 @@ seta hud_colorset_kill_3 "4" "'good' or 'beneficial' text (you fragging someone, seta hud_colorset_background "7" "neutral/unimportant text" // general hud panel cvars (i.e. shouldn't be adjusted by a skin config) +seta hud_panel_weapons 1 "enable this panel" +seta hud_panel_ammo 1 "enable this panel" +seta hud_panel_powerups 1 "enable this panel" +seta hud_panel_healtharmor 1 "enable this panel" +seta hud_panel_notify 1 "enable this panel" +seta hud_panel_timer 1 "enable this panel" +seta hud_panel_radar 1 "enable this panel, 2 = also enable in non-teambased gamemodes" +seta hud_panel_score 1 "enable this panel" +seta hud_panel_racetimer 1 "enable this panel" +seta hud_panel_vote 1 "enable this panel" +seta hud_panel_modicons 1 "enable this panel" +seta hud_panel_pressedkeys 1 "enable this panel, 1 = show only when spectating other players, 2 = show always" +seta hud_panel_chat 1 "enable this panel" +seta hud_panel_engineinfo 0 "enable this panel" +seta hud_panel_infomessages 1 "enable this panel" +seta hud_panel_physics 3 "enable this panel, 1 = show if not observing, 2 = show always, 3 = show only in race/cts if not observing" +seta hud_panel_centerprint 1 "enable this panel" +seta hud_panel_minigameboard 1 "enable this panel" +seta hud_panel_minigamestatus 1 "enable this panel" +seta hud_panel_minigamehelp 1 "enable this panel" +seta hud_panel_minigamemenu 0 "enable this panel" +seta hud_panel_mapvote 1 "enable this panel" +seta hud_panel_itemstime 2 "enable this panel, 1 = show when spectating, 2 = even playing in warmup stage" +seta hud_panel_quickmenu 1 "enable this panel" + seta hud_panel_weapons_ammo_full_shells 60 "show 100% of the status bar at this ammo count" seta hud_panel_weapons_ammo_full_nails 320 "show 100% of the status bar at this ammo count" seta hud_panel_weapons_ammo_full_cells 180 "show 100% of the status bar at this ammo count" diff --git a/_hud_descriptions.cfg b/_hud_descriptions.cfg index 970d6ff7f3..de46317116 100644 --- a/_hud_descriptions.cfg +++ b/_hud_descriptions.cfg @@ -34,7 +34,6 @@ seta hud_configure_grid "" "snap to grid when moving/resizing panels" seta hud_configure_grid_xsize "" "snap to X * vid_conwidth" seta hud_configure_grid_ysize "" "snap to Y * vid_conheight" -seta hud_panel_weapons "" "enable/disable this panel" seta hud_panel_weapons_pos "" "position of this panel" seta hud_panel_weapons_size "" "size of this panel" seta hud_panel_weapons_bg "" "if set to something else than \"\" = override default background" @@ -67,7 +66,6 @@ seta hud_panel_weapons_onlyowned "" "show only owned weapons" seta hud_panel_weapons_noncurrent_alpha "" "alpha of noncurrent weapons" seta hud_panel_weapons_noncurrent_scale "" "scale of noncurrent weapons, relative to the current weapon" -seta hud_panel_ammo "" "enable/disable this panel" seta hud_panel_ammo_pos "" "position of this panel" seta hud_panel_ammo_size "" "size of this panel" seta hud_panel_ammo_onlycurrent "" "1 = show only current ammo type" @@ -85,7 +83,6 @@ seta hud_panel_ammo_progressbar_xoffset "" "percentage of mySize_x to offset pro seta hud_panel_ammo_progressbar_name "" "name of progressbar to use behind ammo icons" seta hud_panel_ammo_text "" "show text/icons in the ammo panel" -seta hud_panel_powerups "" "enable/disable this panel" seta hud_panel_powerups_pos "" "position of this panel" seta hud_panel_powerups_size "" "size of this panel" seta hud_panel_powerups_baralign "" "0 = align bars to the left, 1 = align bars to the right, 2 = align only left bar to the right, 3 = align only right bar to the right" @@ -99,9 +96,9 @@ seta hud_panel_powerups_bg_padding "" "if set to something else than \"\" = over seta hud_panel_powerups_progressbar "" "enable progressbar in panel" seta hud_panel_powerups_text "" "show text and icons in the powerups panel" -seta hud_panel_healtharmor "" "enable/disable this panel, 2 = combined health/armor display" seta hud_panel_healtharmor_pos "" "position of this panel" seta hud_panel_healtharmor_size "" "size of this panel" +seta hud_panel_healtharmor_combined "" "combined health/armor display" seta hud_panel_healtharmor_flip "" "flip health/armor positions" seta hud_panel_healtharmor_baralign "" "0 = align bars to the left, 1 = align bars to the right, 2 = align only left bar to the right, 3 = align only right bar to the right" seta hud_panel_healtharmor_iconalign "" "0 = align icons to the left, 1 = align icons to the right, 2 = align only left icon to the right, 3 = align only right icon to the right" @@ -118,7 +115,6 @@ seta hud_panel_healtharmor_progressbar_armor "" "progressbar image for armor" seta hud_panel_healtharmor_progressbar_gfx "" "enable graphic effects on the progressbars" seta hud_panel_healtharmor_progressbar_gfx_smooth "" "smooth changes of the progressbar when health/armor change at least by this amount; 0 disables the effect" -seta hud_panel_notify "" "enable/disable this panel" seta hud_panel_notify_pos "" "position of this base of the panel" seta hud_panel_notify_size "" "size of this panel with all notifications on" seta hud_panel_notify_bg "" "if set to something else than \"\" = override default background" @@ -133,7 +129,6 @@ seta hud_panel_notify_fadetime "" "fade out time" seta hud_panel_notify_time "" "time that a new entry stays until it fades out" seta hud_panel_notify_icon_aspect "" "aspect ratio of total drawing area per icon" -seta hud_panel_timer "" "enable/disable this panel" seta hud_panel_timer_pos "" "position of this base of the panel" seta hud_panel_timer_size "" "size of this panel" seta hud_panel_timer_bg "" "if set to something else than \"\" = override default background" @@ -143,7 +138,6 @@ seta hud_panel_timer_bg_alpha "" "if set to something else than \"\" = override seta hud_panel_timer_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_timer_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_radar "" "enable/disable this panel, 2 = also enable in non-teambased gamemodes" seta hud_panel_radar_pos "" "position of this base of the panel" seta hud_panel_radar_size "" "size of this panel" seta hud_panel_radar_bg "" "if set to something else than \"\" = override default background" @@ -161,7 +155,6 @@ seta hud_panel_radar_maximized_size "" "size of the radar when maximized" seta hud_panel_radar_maximized_rotation "" "rotation mode: you set what points up. 0 = player, 1 = west, 2 = south, 3 = east, 4 = north" seta hud_panel_radar_maximized_zoommode "" "zoom mode: 0 = zoomed by default, 1 = zoomed when +zoom, 2 = always zoomed, 3 = always zoomed out" -seta hud_panel_score "" "enable/disable this panel" seta hud_panel_score_pos "" "position of this base of the panel" seta hud_panel_score_size "" "size of this panel" seta hud_panel_score_bg "" "if set to something else than \"\" = override default background" @@ -172,7 +165,6 @@ seta hud_panel_score_bg_border "" "if set to something else than \"\" = override seta hud_panel_score_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" seta hud_panel_score_rankings "" "show rankings: 1 always show my own score; 2 pure rankings" -seta hud_panel_racetimer "" "enable/disable this panel" seta hud_panel_racetimer_pos "" "position of this base of the panel" seta hud_panel_racetimer_size "" "size of this panel" seta hud_panel_racetimer_bg "" "if set to something else than \"\" = override default background" @@ -182,7 +174,6 @@ seta hud_panel_racetimer_bg_alpha "" "if set to something else than \"\" = overr seta hud_panel_racetimer_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_racetimer_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_vote "" "enable/disable this panel" seta hud_panel_vote_pos "" "position of this base of the panel" seta hud_panel_vote_size "" "size of this panel" seta hud_panel_vote_alreadyvoted_alpha "" "alpha of the vote dialog after you have voted" @@ -193,7 +184,6 @@ seta hud_panel_vote_bg_alpha "" "if set to something else than \"\" = override d seta hud_panel_vote_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_vote_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_modicons "" "enable/disable this panel" seta hud_panel_modicons_pos "" "position of this base of the panel" seta hud_panel_modicons_size "" "size of this panel" seta hud_panel_modicons_bg "" "if set to something else than \"\" = override default background" @@ -206,7 +196,6 @@ seta hud_panel_modicons_ca_layout "" "2 possible layouts: 0) number of alive pla seta hud_panel_modicons_dom_layout "" "3 possible layouts: 0) only icons; 1) icons and percentage of average pps (points per second); 2) icons and average pps" seta hud_panel_modicons_freezetag_layout "" "2 possible layouts: 0) number of alive players; 1) icons and number of alive players" -seta hud_panel_pressedkeys "" "enable/disable this panel, 1 = show only when spectating other players, 2 = show always" seta hud_panel_pressedkeys_pos "" "position of this base of the panel" seta hud_panel_pressedkeys_size "" "size of this panel" seta hud_panel_pressedkeys_bg "" "if set to something else than \"\" = override default background" @@ -218,7 +207,6 @@ seta hud_panel_pressedkeys_bg_padding "" "if set to something else than \"\" = o seta hud_panel_pressedkeys_aspect "" "forced aspect on panel" seta hud_panel_pressedkeys_attack "" "show attack buttons too" -seta hud_panel_chat "" "enable/disable this panel" seta hud_panel_chat_pos "" "position of this base of the panel" seta hud_panel_chat_size "" "size of this panel" seta hud_panel_chat_bg "" "if set to something else than \"\" = override default background" @@ -228,7 +216,6 @@ seta hud_panel_chat_bg_alpha "" "if set to something else than \"\" = override d seta hud_panel_chat_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_chat_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_engineinfo "" "enable/disable this panel" seta hud_panel_engineinfo_pos "" "position of this base of the panel" seta hud_panel_engineinfo_size "" "size of this panel" seta hud_panel_engineinfo_bg "" "if set to something else than \"\" = override default background" @@ -240,7 +227,6 @@ seta hud_panel_engineinfo_bg_padding "" "if set to something else than \"\" = ov seta hud_panel_engineinfo_framecounter_decimals "" "amount of decimals to show" seta hud_panel_engineinfo_framecounter_time "" "time between framerate display updates" -seta hud_panel_infomessages "" "enable/disable this panel" seta hud_panel_infomessages_pos "" "position of this base of the panel" seta hud_panel_infomessages_size "" "size of this panel" seta hud_panel_infomessages_bg "" "if set to something else than \"\" = override default background" @@ -251,7 +237,6 @@ seta hud_panel_infomessages_bg_border "" "if set to something else than \"\" = o seta hud_panel_infomessages_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" seta hud_panel_infomessages_flip "" "1 = align the items to the right" -seta hud_panel_physics "" "enable/disable this panel, 1 = show if not observing, 2 = show always, 3 = show only in race/cts if not observing" seta hud_panel_physics_pos "" "position of this base of the panel" seta hud_panel_physics_size "" "size of this panel" seta hud_panel_physics_bg "" "if set to something else than \"\" = override default background" @@ -276,7 +261,6 @@ seta hud_panel_physics_speed_vertical "" "include the speed on the Z-axis" seta hud_panel_physics_topspeed "" "also show top speed" seta hud_panel_physics_topspeed_time "" "how many seconds the top speed takes to fade out" -seta hud_panel_centerprint "" "enable/disable this panel" seta hud_panel_centerprint_pos "" "position of this base of the panel" seta hud_panel_centerprint_size "" "size of this panel" seta hud_panel_centerprint_bg "" "if set to something else than \"\" = override default background" @@ -299,7 +283,6 @@ seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "" "minimum factor t seta hud_panel_centerprint_fade_subsequent_minfontsize "" "minimum factor for the font size from the subsequent fading effects" seta hud_panel_centerprint_fade_minfontsize "" "minimum factor for the font size from the fading in/out effects" -seta hud_panel_minigameboard "" "enable/disable this panel" seta hud_panel_minigameboard_pos "" "position of this panel" seta hud_panel_minigameboard_size "" "size of this panel" seta hud_panel_minigameboard_bg "" "if set to something else than \"\" = override default background" @@ -309,7 +292,6 @@ seta hud_panel_minigameboard_bg_alpha "" "if set to something else than \"\" = o seta hud_panel_minigameboard_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_minigameboard_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_minigamestatus "" "enable/disable this panel" seta hud_panel_minigamestatus_pos "" "position of this panel" seta hud_panel_minigamestatus_size "" "size of this panel" seta hud_panel_minigamestatus_bg "" "if set to something else than \"\" = override default background" @@ -319,7 +301,6 @@ seta hud_panel_minigamestatus_bg_alpha "" "if set to something else than \"\" = seta hud_panel_minigamestatus_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_minigamestatus_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_minigamehelp "" "enable/disable this panel" seta hud_panel_minigamehelp_pos "" "position of this panel" seta hud_panel_minigamehelp_size "" "size of this panel" seta hud_panel_minigamehelp_bg "" "if set to something else than \"\" = override default background" @@ -329,7 +310,6 @@ seta hud_panel_minigamehelp_bg_alpha "" "if set to something else than \"\" = ov seta hud_panel_minigamehelp_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_minigamehelp_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_minigamemenu "" "enable/disable this panel" seta hud_panel_minigamemenu_pos "" "position of this panel" seta hud_panel_minigamemenu_size "" "size of this panel" seta hud_panel_minigamemenu_bg "" "if set to something else than \"\" = override default background" @@ -339,7 +319,6 @@ seta hud_panel_minigamemenu_bg_alpha "" "if set to something else than \"\" = ov seta hud_panel_minigamemenu_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_minigamemenu_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_mapvote "" "enable/disable this panel" seta hud_panel_mapvote_pos "" "position of this panel" seta hud_panel_mapvote_size "" "size of this panel" seta hud_panel_mapvote_bg "" "if set to something else than \"\" = override default background" @@ -349,7 +328,6 @@ seta hud_panel_mapvote_bg_alpha "" "if set to something else than \"\" = overrid seta hud_panel_mapvote_bg_border "" "if set to something else than \"\" = override default size of border around the background" seta hud_panel_mapvote_bg_padding "" "if set to something else than \"\" = override default padding of contents from border" -seta hud_panel_itemstime "" "enable/disable this panel, it shows left time until important items (mega health, large armor, powerups, superweapons, etc...) respawn in the map: 1 when spectating, 2 even playing in warmup stage" seta hud_panel_itemstime_pos "" "position of this base of the panel" seta hud_panel_itemstime_size "" "size of this panel" seta hud_panel_itemstime_bg "" "if set to something else than \"\" = override default background" @@ -366,7 +344,6 @@ seta hud_panel_itemstime_text "" "show text" seta hud_panel_itemstime_ratio "" "ratio between space reserved for text and icon width of each item entry (min value is 2)" seta hud_panel_itemstime_dynamicsize "" "allow panel size reduction by removing spacing among items" -seta hud_panel_quickmenu "" "enable/disable this panel" seta hud_panel_quickmenu_pos "" "position of this base of the panel" seta hud_panel_quickmenu_size "" "size of this panel" seta hud_panel_quickmenu_bg "" "if set to something else than \"\" = override default background" diff --git a/cmake/CMakeASMCompiler.cmake.in b/cmake/CMakeASMCompiler.cmake.in new file mode 100644 index 0000000000..e18e9edf4a --- /dev/null +++ b/cmake/CMakeASMCompiler.cmake.in @@ -0,0 +1,8 @@ +set(CMAKE_ASM_COMPILER "@CMAKE_ASM_COMPILER@") +set(CMAKE_ASM_COMPILER_LOADED 1) + +set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS qc;qh;inc) +set(CMAKE_ASM_OUTPUT_EXTENSION .o) +set(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1) +set(CMAKE_ASM_LINKER_PREFERENCE 42) +set(CMAKE_ASM_COMPILER_ENV_VAR "QCC") diff --git a/cmake/CMakeASMInformation.cmake b/cmake/CMakeASMInformation.cmake new file mode 100644 index 0000000000..e4e7bd923f --- /dev/null +++ b/cmake/CMakeASMInformation.cmake @@ -0,0 +1,14 @@ +if (${CMAKE_VERSION} VERSION_LESS "3.4") + set(_CMAKE_ASM_INCLUDES "") +else() + set(_CMAKE_ASM_INCLUDES "") +endif() +mark_as_advanced(_CMAKE_ASM_INCLUDES) + +set(CMAKE_ASM_COMPILE_OBJECT " compile -DGMQCC ${_CMAKE_ASM_INCLUDES} ") +set(CMAKE_ASM_LINK_EXECUTABLE "env CMAKE_EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX} link -o ") + +set(CMAKE_INCLUDE_FLAG_ASM "-I") +set(CMAKE_INCLUDE_FLAG_ASM_SEP "") +set(CMAKE_EXECUTABLE_PREFIX_ASM "") +set(CMAKE_EXECUTABLE_SUFFIX_ASM ".dat") diff --git a/cmake/CMakeDetermineASMCompiler.cmake b/cmake/CMakeDetermineASMCompiler.cmake new file mode 100644 index 0000000000..e8e6976457 --- /dev/null +++ b/cmake/CMakeDetermineASMCompiler.cmake @@ -0,0 +1,5 @@ +set(CMAKE_ASM_COMPILER ${PROJECT_SOURCE_DIR}/cmake/qcc.sh) + +configure_file(cmake/CMakeASMCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeASMCompiler.cmake @ONLY) +set(CMAKE_ASM_COMPILER_ENV_VAR "QCC") diff --git a/cmake/CMakeTestASMCompiler.cmake b/cmake/CMakeTestASMCompiler.cmake new file mode 100644 index 0000000000..9d293a85aa --- /dev/null +++ b/cmake/CMakeTestASMCompiler.cmake @@ -0,0 +1 @@ +set(CMAKE_ASM_COMPILER_WORKS 1 CACHE INTERNAL "") diff --git a/cmake/qcc.sh b/cmake/qcc.sh new file mode 100755 index 0000000000..2e8ea70625 --- /dev/null +++ b/cmake/qcc.sh @@ -0,0 +1,19 @@ +#!/bin/bash +CPP=${CPP:-cpp} +QCC=${QCC:-$PWD/../../gmqcc/gmqcc${CMAKE_EXECUTABLE_SUFFIX}} +case $1 in + compile) + ${CPP} ${@:3} | sed 's/^#\(line\)\? \([[:digit:]]\+\) "\(.*\)".*/\n#pragma file(\3)\n#pragma line(\2)/g' > $2 + ;; + link) + ${QCC} \ + -std=gmqcc \ + -Ooverlap-locals \ + -O3 \ + -Werror -Wall \ + -Wno-field-redeclared \ + -flno -futf8 -fno-bail-on-werror \ + -frelaxed-switch -freturn-assignments \ + ${@:2} + ;; +esac diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 7ed41440f8..2056f15115 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -306,6 +306,7 @@ seta sv_precacheitems 0 set sv_spectator_speed_multiplier 1.5 seta sv_spectate 1 "if set to 1, new clients are allowed to spectate or observe the game, if set to 0 joining clients spawn as players immediately (no spectating)" seta sv_defaultcharacter 0 "master switch, if set to 1 the further configuration for replacing all player models, skins and colors is taken from the sv_defaultplayermodel, sv_defaultplayerskin and sv_defaultplayercolors variables" +seta sv_defaultcharacterskin 0 "if set to 1 the further configuration for replacing all skins is taken from the sv_defaultplayerskin variables" seta sv_defaultplayermodel "models/player/erebus.iqm" "default model selection, only works if sv_defaultcharacter is set to 1; you may append a : suffix to model names; you can specify multiple, separated by space, and a random one will be chosen" seta sv_defaultplayerskin 0 "each model has 1 or more skins (combination of model and skin = character), set which skin of the model you wish the default character to have, only works if sv_defaultcharacter is set to 1; can be overriden by : suffix in sv_defaultplayermodel" seta sv_defaultplayermodel_red "" "\"\" means see sv_defaultplayermodel" @@ -489,6 +490,7 @@ set g_tdm_on_dm_maps 0 "when this is set, all DM maps automatically support TDM" seta teamplay_mode 4 "default teamplay setting in team games. 1 = no friendly fire, self damage. 2 = friendly fire and self damage enabled. 3 = no friendly fire, but self damage enabled. 4 = obey the cvars g_mirrordamage*, g_friendlyfire* and g_teamdamage_threshold*" seta g_mirrordamage 0.700000 "for teamplay 4: mirror damage factor" seta g_mirrordamage_virtual 1 "for teamplay 4: do not actually apply mirror damage, just show graphics effect for it" +seta g_mirrordamage_onlyweapons 0 "for teamplay 4: only apply mirror damage if the attack was from a weapon" seta g_friendlyfire 0.500000 "for teamplay 4: fiendly fire factor" seta g_friendlyfire_virtual 1 "for teamplay 4: do not actually apply friendly fire, just show graphics effect for it" seta g_friendlyfire_virtual_force 1 "for teamplay 4: apply force even though damage was made virtual only" @@ -772,6 +774,17 @@ seta g_waypointsprite_turrets 1 "disable turret waypoints" seta g_waypointsprite_turrets_maxdist 5000 "max distace for turret sprites" seta g_waypointsprite_tactical 1 "tactical overlay on turrets when in a vehicle" +seta cl_damagetext "0" "Draw damage dealt where you hit the enemy" +seta cl_damagetext_format "-{total}" "How to format the damage text. {health}, {armor}, {total}" +seta cl_damagetext_color "1 1 0" "Damage text color" +seta cl_damagetext_color_per_weapon "0" "Damage text uses weapon color" +seta cl_damagetext_size "8" "Damage text font size" +seta cl_damagetext_alpha_start "1" "Damage text initial alpha" +seta cl_damagetext_alpha_lifetime "3" "Damage text lifetime in seconds" +seta cl_damagetext_velocity "0 0 20" "Damage text move direction" +seta cl_damagetext_offset "0 -40 0" "Damage text offset" +seta cl_damagetext_accumulate_range "30" "Damage text spawned within this range is accumulated" + set sv_itemstime 1 "enable networking of left time until respawn for items such as mega health and large armor" // so it can be stuffcmd-ed still @@ -795,6 +808,7 @@ seta menu_sounds 0 "enables menu sound effects. 1 enables click sounds, 2 also e seta menu_tooltips 1 "menu tooltips: 0 disabled, 1 enabled, 2 also shows cvar or console command (when available) changed or executed by the item" set menu_picmip_bypass 0 "bypass texture quality enforcement based on system resources, not recommended and may cause crashes!" set menu_showboxes 0 "show item bounding boxes (debug)" +set menu_cvarlist_onlymodified 0 "show only modified cvars in the cvar list" r_textbrightness 0.2 r_textcontrast 0.8 diff --git a/hud_luma.cfg b/hud_luma.cfg index 226af4c1bf..2ec91efca5 100644 --- a/hud_luma.cfg +++ b/hud_luma.cfg @@ -15,7 +15,7 @@ seta hud_dock_color "0 0 0" seta hud_dock_color_team "1" seta hud_dock_alpha "1" -seta hud_progressbar_alpha "0.600000" +seta hud_progressbar_alpha "0.6" seta hud_progressbar_strength_color "1 0.39 0" seta hud_progressbar_superweapons_color "0.77 0.67 0" seta hud_progressbar_shield_color "0.36 1 0.07" @@ -35,7 +35,6 @@ seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.005000" seta hud_configure_grid_ysize "0.005000" -seta hud_panel_weapons "1" seta hud_panel_weapons_pos "0.965000 0.125000" seta hud_panel_weapons_size "0.035000 0.770000" seta hud_panel_weapons_bg "border_default_east" @@ -46,7 +45,7 @@ seta hud_panel_weapons_bg_border "" seta hud_panel_weapons_bg_padding "0" seta hud_panel_weapons_accuracy "0" seta hud_panel_weapons_label "1" -seta hud_panel_weapons_label_scale "0.300000" +seta hud_panel_weapons_label_scale "0.3" seta hud_panel_weapons_complainbubble "1" seta hud_panel_weapons_complainbubble_padding "0" seta hud_panel_weapons_complainbubble_time "0" @@ -65,10 +64,9 @@ seta hud_panel_weapons_timeout_fadefgmin "0.4" seta hud_panel_weapons_timeout_speed_in "0.25" seta hud_panel_weapons_timeout_speed_out "0.75" seta hud_panel_weapons_onlyowned "1" -seta hud_panel_weapons_noncurrent_alpha "0.800000" -seta hud_panel_weapons_noncurrent_scale "0.900000" +seta hud_panel_weapons_noncurrent_alpha "0.8" +seta hud_panel_weapons_noncurrent_scale "0.9" -seta hud_panel_ammo "1" seta hud_panel_ammo_pos "0.315000 0.865000" seta hud_panel_ammo_size "0.370000 0.060000" seta hud_panel_ammo_bg "border_tab_south" @@ -78,15 +76,14 @@ seta hud_panel_ammo_bg_alpha "" seta hud_panel_ammo_bg_border "" seta hud_panel_ammo_bg_padding "4" seta hud_panel_ammo_onlycurrent "0" -seta hud_panel_ammo_noncurrent_alpha "0.600000" -seta hud_panel_ammo_noncurrent_scale "0.400000" +seta hud_panel_ammo_noncurrent_alpha "0.6" +seta hud_panel_ammo_noncurrent_scale "0.4" seta hud_panel_ammo_iconalign "0" seta hud_panel_ammo_progressbar "0" seta hud_panel_ammo_progressbar_name "progressbar" seta hud_panel_ammo_progressbar_xoffset "0" seta hud_panel_ammo_text "1" -seta hud_panel_powerups "1" seta hud_panel_powerups_pos "0.325000 0.815000" seta hud_panel_powerups_size "0.350000 0.055000" seta hud_panel_powerups_bg "border_shadow_south" @@ -100,7 +97,6 @@ seta hud_panel_powerups_baralign "3" seta hud_panel_powerups_progressbar "1" seta hud_panel_powerups_text "1" -seta hud_panel_healtharmor "1" seta hud_panel_healtharmor_pos "0.300000 0.925000" seta hud_panel_healtharmor_size "0.400000 0.070000" seta hud_panel_healtharmor_bg "border_default_south" @@ -109,6 +105,7 @@ seta hud_panel_healtharmor_bg_color_team "" seta hud_panel_healtharmor_bg_alpha "" seta hud_panel_healtharmor_bg_border "4" seta hud_panel_healtharmor_bg_padding "" +seta hud_panel_healtharmor_combined "0" seta hud_panel_healtharmor_flip "0" seta hud_panel_healtharmor_iconalign "3" seta hud_panel_healtharmor_baralign "3" @@ -119,7 +116,6 @@ seta hud_panel_healtharmor_progressbar_gfx "1" seta hud_panel_healtharmor_progressbar_gfx_smooth "2" seta hud_panel_healtharmor_text "1" -seta hud_panel_notify "1" seta hud_panel_notify_pos "0.730000 0.800000" seta hud_panel_notify_size "0.265000 0.200000" seta hud_panel_notify_bg "0" @@ -134,7 +130,6 @@ seta hud_panel_notify_time "10" seta hud_panel_notify_fadetime "3" seta hud_panel_notify_icon_aspect "1" -seta hud_panel_timer "1" seta hud_panel_timer_pos "0.456000 0" seta hud_panel_timer_size "0.088000 0.030000" seta hud_panel_timer_bg "border_plain_north" @@ -144,7 +139,6 @@ seta hud_panel_timer_bg_alpha "" seta hud_panel_timer_bg_border "" seta hud_panel_timer_bg_padding "0" -seta hud_panel_radar "1" seta hud_panel_radar_pos "0 0" seta hud_panel_radar_size "0.200000 0.250000" seta hud_panel_radar_bg "border_corner_northwest" @@ -162,7 +156,6 @@ seta hud_panel_radar_maximized_size "0.5 0.5" seta hud_panel_radar_maximized_rotation "1" seta hud_panel_radar_maximized_zoommode "3" -seta hud_panel_score "1" seta hud_panel_score_pos "0.880000 0" seta hud_panel_score_size "0.120000 0.080000" seta hud_panel_score_bg "border_corner_northeast" @@ -173,7 +166,6 @@ seta hud_panel_score_bg_border "" seta hud_panel_score_bg_padding "1" seta hud_panel_score_rankings "1" -seta hud_panel_racetimer "1" seta hud_panel_racetimer_pos "0.360000 0.110000" seta hud_panel_racetimer_size "0.280000 0.090000" seta hud_panel_racetimer_bg "0" @@ -183,7 +175,6 @@ seta hud_panel_racetimer_bg_alpha "" seta hud_panel_racetimer_bg_border "" seta hud_panel_racetimer_bg_padding "" -seta hud_panel_vote "1" seta hud_panel_vote_pos "0.740000 0.690000" seta hud_panel_vote_size "0.190000 0.090000" seta hud_panel_vote_bg " " @@ -192,9 +183,8 @@ seta hud_panel_vote_bg_color_team "" seta hud_panel_vote_bg_alpha "" seta hud_panel_vote_bg_border "" seta hud_panel_vote_bg_padding "" -seta hud_panel_vote_alreadyvoted_alpha "0.700000" +seta hud_panel_vote_alreadyvoted_alpha "0.7" -seta hud_panel_modicons "1" seta hud_panel_modicons_pos "0.370000 0.030000" seta hud_panel_modicons_size "0.260000 0.07000" seta hud_panel_modicons_bg "border_fading_north" @@ -207,7 +197,6 @@ seta hud_panel_modicons_ca_layout "1" seta hud_panel_modicons_dom_layout "1" seta hud_panel_modicons_freezetag_layout "1" -seta hud_panel_pressedkeys "1" seta hud_panel_pressedkeys_pos "0.445000 0.710000" seta hud_panel_pressedkeys_size "0.110000 0.090000" seta hud_panel_pressedkeys_bg " " @@ -216,10 +205,9 @@ seta hud_panel_pressedkeys_bg_color_team "" seta hud_panel_pressedkeys_bg_alpha "" seta hud_panel_pressedkeys_bg_border "" seta hud_panel_pressedkeys_bg_padding "1" -seta hud_panel_pressedkeys_aspect "1.600000" +seta hud_panel_pressedkeys_aspect "1.6" seta hud_panel_pressedkeys_attack "0" -seta hud_panel_chat "1" seta hud_panel_chat_pos "0.010000 0.700000" seta hud_panel_chat_size "0.460000 0.190000" seta hud_panel_chat_bg "0" @@ -229,7 +217,6 @@ seta hud_panel_chat_bg_alpha "" seta hud_panel_chat_bg_border "" seta hud_panel_chat_bg_padding "" -seta hud_panel_engineinfo "0" seta hud_panel_engineinfo_pos "0.930000 0.970000" seta hud_panel_engineinfo_size "0.070000 0.030000" seta hud_panel_engineinfo_bg "0" @@ -241,7 +228,6 @@ seta hud_panel_engineinfo_bg_padding "" seta hud_panel_engineinfo_framecounter_time "0.1" seta hud_panel_engineinfo_framecounter_decimals "0" -seta hud_panel_infomessages "1" seta hud_panel_infomessages_pos "0.720000 0.100000" seta hud_panel_infomessages_size "0.280000 0.080000" seta hud_panel_infomessages_bg "0" @@ -252,13 +238,12 @@ seta hud_panel_infomessages_bg_border "" seta hud_panel_infomessages_bg_padding "0" seta hud_panel_infomessages_flip "1" -seta hud_panel_physics "3" seta hud_panel_physics_pos "0.410000 0.625000" seta hud_panel_physics_size "0.180000 0.080000" seta hud_panel_physics_bg "0" seta hud_panel_physics_bg_color "" seta hud_panel_physics_bg_color_team "" -seta hud_panel_physics_bg_alpha "0.700000" +seta hud_panel_physics_bg_alpha "0.7" seta hud_panel_physics_bg_border "" seta hud_panel_physics_bg_padding "" seta hud_panel_physics_speed_unit_show "1" @@ -277,7 +262,6 @@ seta hud_panel_physics_acceleration_progressbar_nonlinear "0" seta hud_panel_physics_text "1" seta hud_panel_physics_text_scale "0.7" -seta hud_panel_centerprint "1" seta hud_panel_centerprint_pos "0.175000 0.220000" seta hud_panel_centerprint_size "0.650000 0.220000" seta hud_panel_centerprint_bg "0" @@ -300,7 +284,6 @@ seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5" seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75" seta hud_panel_centerprint_fade_minfontsize "0" -seta hud_panel_minigameboard "1" seta hud_panel_minigameboard_pos "0.22 0.15" seta hud_panel_minigameboard_size "0.50 0.60" seta hud_panel_minigameboard_bg "border_small" @@ -310,7 +293,6 @@ seta hud_panel_minigameboard_bg_alpha "" seta hud_panel_minigameboard_bg_border "" seta hud_panel_minigameboard_bg_padding "" -seta hud_panel_minigamestatus "1" seta hud_panel_minigamestatus_pos "0.74 0.15" seta hud_panel_minigamestatus_size "0.2 0.60" seta hud_panel_minigamestatus_bg "border_small" @@ -320,7 +302,6 @@ seta hud_panel_minigamestatus_bg_alpha "" seta hud_panel_minigamestatus_bg_border "" seta hud_panel_minigamestatus_bg_padding "" -seta hud_panel_minigamehelp "1" seta hud_panel_minigamehelp_pos "0.22 0.78" seta hud_panel_minigamehelp_size "0.50 0.20" seta hud_panel_minigamehelp_bg "" @@ -330,7 +311,6 @@ seta hud_panel_minigamehelp_bg_alpha "" seta hud_panel_minigamehelp_bg_border "" seta hud_panel_minigamehelp_bg_padding "" -seta hud_panel_minigamemenu "0" seta hud_panel_minigamemenu_pos "0 0.26" seta hud_panel_minigamemenu_size "0.2 0.49" seta hud_panel_minigamemenu_bg "border_small" @@ -340,7 +320,6 @@ seta hud_panel_minigamemenu_bg_alpha "" seta hud_panel_minigamemenu_bg_border "" seta hud_panel_minigamemenu_bg_padding "" -seta hud_panel_mapvote "1" seta hud_panel_mapvote_pos "0 0" seta hud_panel_mapvote_size "1 1" seta hud_panel_mapvote_bg "border_default" @@ -350,10 +329,9 @@ seta hud_panel_mapvote_bg_alpha "" seta hud_panel_mapvote_bg_border "" seta hud_panel_mapvote_bg_padding "" -seta hud_panel_itemstime "2" seta hud_panel_itemstime_pos "0.030000 0.260000" seta hud_panel_itemstime_size "0.070000 0.230000" -seta hud_panel_itemstime_bg "border_itemstime" +seta hud_panel_itemstime_bg "border_default" seta hud_panel_itemstime_bg_color "" seta hud_panel_itemstime_bg_color_team "" seta hud_panel_itemstime_bg_alpha "" @@ -367,7 +345,6 @@ seta hud_panel_itemstime_text "1" seta hud_panel_itemstime_ratio "2" seta hud_panel_itemstime_dynamicsize "1" -seta hud_panel_quickmenu "1" seta hud_panel_quickmenu_pos "0.600000 0.445000" seta hud_panel_quickmenu_size "0.220000 0.240000" seta hud_panel_quickmenu_bg "" diff --git a/hud_luminos.cfg b/hud_luminos.cfg index 04902e07f8..7badb25057 100644 --- a/hud_luminos.cfg +++ b/hud_luminos.cfg @@ -15,7 +15,7 @@ seta hud_dock_color "0 0.449576 0.860796" seta hud_dock_color_team "1" seta hud_dock_alpha "1" -seta hud_progressbar_alpha "0.500000" +seta hud_progressbar_alpha "0.5" seta hud_progressbar_strength_color "0 0 0.6" seta hud_progressbar_superweapons_color "0.6 0.3 0" seta hud_progressbar_shield_color "0.6 0 0.6" @@ -35,7 +35,6 @@ seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" seta hud_configure_grid_ysize "0.010000" -seta hud_panel_weapons "1" seta hud_panel_weapons_pos "0.930000 0.170000" seta hud_panel_weapons_size "0.070000 0.650000" seta hud_panel_weapons_bg "border_small_weapons" @@ -46,7 +45,7 @@ seta hud_panel_weapons_bg_border "" seta hud_panel_weapons_bg_padding "4" seta hud_panel_weapons_accuracy "1" seta hud_panel_weapons_label "1" -seta hud_panel_weapons_label_scale "0.500000" +seta hud_panel_weapons_label_scale "0.5" seta hud_panel_weapons_complainbubble "1" seta hud_panel_weapons_complainbubble_padding "-1" seta hud_panel_weapons_complainbubble_time "0" @@ -68,7 +67,6 @@ seta hud_panel_weapons_onlyowned "1" seta hud_panel_weapons_noncurrent_alpha "1" seta hud_panel_weapons_noncurrent_scale "1" -seta hud_panel_ammo "1" seta hud_panel_ammo_pos "0.330000 0.960000" seta hud_panel_ammo_size "0.350000 0.040000" seta hud_panel_ammo_bg "" @@ -78,7 +76,7 @@ seta hud_panel_ammo_bg_alpha "" seta hud_panel_ammo_bg_border "" seta hud_panel_ammo_bg_padding "" seta hud_panel_ammo_onlycurrent "0" -seta hud_panel_ammo_noncurrent_alpha "0.700000" +seta hud_panel_ammo_noncurrent_alpha "0.7" seta hud_panel_ammo_noncurrent_scale "1" seta hud_panel_ammo_iconalign "0" seta hud_panel_ammo_progressbar "0" @@ -86,7 +84,6 @@ seta hud_panel_ammo_progressbar_name "progressbar" seta hud_panel_ammo_progressbar_xoffset "0" seta hud_panel_ammo_text "1" -seta hud_panel_powerups "1" seta hud_panel_powerups_pos "0.360000 0.850000" seta hud_panel_powerups_size "0.290000 0.030000" seta hud_panel_powerups_bg "border_small_powerups" @@ -100,7 +97,6 @@ seta hud_panel_powerups_baralign "3" seta hud_panel_powerups_progressbar "1" seta hud_panel_powerups_text "1" -seta hud_panel_healtharmor "1" seta hud_panel_healtharmor_pos "0.320000 0.910000" seta hud_panel_healtharmor_size "0.370000 0.060000" seta hud_panel_healtharmor_bg "border_small_healtharmor" @@ -109,6 +105,7 @@ seta hud_panel_healtharmor_bg_color_team "" seta hud_panel_healtharmor_bg_alpha "" seta hud_panel_healtharmor_bg_border "" seta hud_panel_healtharmor_bg_padding "" +seta hud_panel_healtharmor_combined "0" seta hud_panel_healtharmor_flip "0" seta hud_panel_healtharmor_iconalign "3" seta hud_panel_healtharmor_baralign "3" @@ -119,7 +116,6 @@ seta hud_panel_healtharmor_progressbar_gfx "1" seta hud_panel_healtharmor_progressbar_gfx_smooth "2" seta hud_panel_healtharmor_text "1" -seta hud_panel_notify "1" seta hud_panel_notify_pos "0.710000 0.800000" seta hud_panel_notify_size "0.290000 0.190000" seta hud_panel_notify_bg "0" @@ -134,7 +130,6 @@ seta hud_panel_notify_time "10" seta hud_panel_notify_fadetime "3" seta hud_panel_notify_icon_aspect "2" -seta hud_panel_timer "1" seta hud_panel_timer_pos "0.800000 0.040000" seta hud_panel_timer_size "0.070000 0.040000" seta hud_panel_timer_bg "border_small_timer" @@ -144,16 +139,15 @@ seta hud_panel_timer_bg_alpha "" seta hud_panel_timer_bg_border "" seta hud_panel_timer_bg_padding "0" -seta hud_panel_radar "2" seta hud_panel_radar_pos "0 0" seta hud_panel_radar_size "0.200000 0.240000" seta hud_panel_radar_bg "border_small_radar" seta hud_panel_radar_bg_color "" seta hud_panel_radar_bg_color_team "" -seta hud_panel_radar_bg_alpha "0.800000" +seta hud_panel_radar_bg_alpha "0.8" seta hud_panel_radar_bg_border "" seta hud_panel_radar_bg_padding "-1" -seta hud_panel_radar_foreground_alpha "0.800000" +seta hud_panel_radar_foreground_alpha "0.8" seta hud_panel_radar_rotation "0" seta hud_panel_radar_zoommode "0" seta hud_panel_radar_scale "4096" @@ -162,7 +156,6 @@ seta hud_panel_radar_maximized_size "0.5 0.5" seta hud_panel_radar_maximized_rotation "1" seta hud_panel_radar_maximized_zoommode "3" -seta hud_panel_score "1" seta hud_panel_score_pos "0.890000 0.030000" seta hud_panel_score_size "0.100000 0.050000" seta hud_panel_score_bg "border_small_score" @@ -173,7 +166,6 @@ seta hud_panel_score_bg_border "" seta hud_panel_score_bg_padding "0" seta hud_panel_score_rankings "1" -seta hud_panel_racetimer "1" seta hud_panel_racetimer_pos "0.360000 0.110000" seta hud_panel_racetimer_size "0.280000 0.090000" seta hud_panel_racetimer_bg "0" @@ -183,18 +175,16 @@ seta hud_panel_racetimer_bg_alpha "" seta hud_panel_racetimer_bg_border "" seta hud_panel_racetimer_bg_padding "" -seta hud_panel_vote "1" seta hud_panel_vote_pos "0.720000 0.670000" seta hud_panel_vote_size "0.190000 0.090000" -seta hud_panel_vote_bg "border_vote" +seta hud_panel_vote_bg "border_default" seta hud_panel_vote_bg_color "" seta hud_panel_vote_bg_color_team "" seta hud_panel_vote_bg_alpha "" seta hud_panel_vote_bg_border "" seta hud_panel_vote_bg_padding "" -seta hud_panel_vote_alreadyvoted_alpha "0.500000" +seta hud_panel_vote_alreadyvoted_alpha "0.5" -seta hud_panel_modicons "1" seta hud_panel_modicons_pos "0.410000 0" seta hud_panel_modicons_size "0.180000 0.080000" seta hud_panel_modicons_bg "border_small_modicons" @@ -207,7 +197,6 @@ seta hud_panel_modicons_ca_layout "1" seta hud_panel_modicons_dom_layout "1" seta hud_panel_modicons_freezetag_layout "1" -seta hud_panel_pressedkeys "1" seta hud_panel_pressedkeys_pos "0.450000 0.720000" seta hud_panel_pressedkeys_size "0.110000 0.090000" seta hud_panel_pressedkeys_bg "0" @@ -216,10 +205,9 @@ seta hud_panel_pressedkeys_bg_color_team "" seta hud_panel_pressedkeys_bg_alpha "" seta hud_panel_pressedkeys_bg_border "" seta hud_panel_pressedkeys_bg_padding "" -seta hud_panel_pressedkeys_aspect "1.600000" +seta hud_panel_pressedkeys_aspect "1.6" seta hud_panel_pressedkeys_attack "0" -seta hud_panel_chat "1" seta hud_panel_chat_pos "0.010000 0.700000" seta hud_panel_chat_size "0.460000 0.190000" seta hud_panel_chat_bg "0" @@ -229,7 +217,6 @@ seta hud_panel_chat_bg_alpha "" seta hud_panel_chat_bg_border "" seta hud_panel_chat_bg_padding "" -seta hud_panel_engineinfo "0" seta hud_panel_engineinfo_pos "0.930000 0.970000" seta hud_panel_engineinfo_size "0.070000 0.030000" seta hud_panel_engineinfo_bg "0" @@ -241,7 +228,6 @@ seta hud_panel_engineinfo_bg_padding "" seta hud_panel_engineinfo_framecounter_time "0.1" seta hud_panel_engineinfo_framecounter_decimals "0" -seta hud_panel_infomessages "1" seta hud_panel_infomessages_pos "0.720000 0.100000" seta hud_panel_infomessages_size "0.280000 0.080000" seta hud_panel_infomessages_bg "0" @@ -252,7 +238,6 @@ seta hud_panel_infomessages_bg_border "" seta hud_panel_infomessages_bg_padding "0" seta hud_panel_infomessages_flip "1" -seta hud_panel_physics "3" seta hud_panel_physics_pos "0.420000 0.620000" seta hud_panel_physics_size "0.170000 0.080000" seta hud_panel_physics_bg "" @@ -277,7 +262,6 @@ seta hud_panel_physics_acceleration_progressbar_nonlinear "0" seta hud_panel_physics_text "1" seta hud_panel_physics_text_scale "0.7" -seta hud_panel_centerprint "1" seta hud_panel_centerprint_pos "0.175000 0.220000" seta hud_panel_centerprint_size "0.650000 0.220000" seta hud_panel_centerprint_bg "0" @@ -300,7 +284,6 @@ seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5" seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75" seta hud_panel_centerprint_fade_minfontsize "0" -seta hud_panel_minigameboard "1" seta hud_panel_minigameboard_pos "0.22 0.15" seta hud_panel_minigameboard_size "0.50 0.60" seta hud_panel_minigameboard_bg "border_small" @@ -310,7 +293,6 @@ seta hud_panel_minigameboard_bg_alpha "" seta hud_panel_minigameboard_bg_border "" seta hud_panel_minigameboard_bg_padding "" -seta hud_panel_minigamestatus "1" seta hud_panel_minigamestatus_pos "0.74 0.15" seta hud_panel_minigamestatus_size "0.2 0.60" seta hud_panel_minigamestatus_bg "border_small" @@ -320,7 +302,6 @@ seta hud_panel_minigamestatus_bg_alpha "" seta hud_panel_minigamestatus_bg_border "" seta hud_panel_minigamestatus_bg_padding "" -seta hud_panel_minigamehelp "1" seta hud_panel_minigamehelp_pos "0.22 0.78" seta hud_panel_minigamehelp_size "0.50 0.20" seta hud_panel_minigamehelp_bg "" @@ -330,7 +311,6 @@ seta hud_panel_minigamehelp_bg_alpha "" seta hud_panel_minigamehelp_bg_border "" seta hud_panel_minigamehelp_bg_padding "" -seta hud_panel_minigamemenu "0" seta hud_panel_minigamemenu_pos "0 0.26" seta hud_panel_minigamemenu_size "0.2 0.49" seta hud_panel_minigamemenu_bg "border_small" @@ -340,7 +320,6 @@ seta hud_panel_minigamemenu_bg_alpha "" seta hud_panel_minigamemenu_bg_border "" seta hud_panel_minigamemenu_bg_padding "" -seta hud_panel_mapvote "1" seta hud_panel_mapvote_pos "0 0" seta hud_panel_mapvote_size "1 1" seta hud_panel_mapvote_bg "0" @@ -350,10 +329,9 @@ seta hud_panel_mapvote_bg_alpha "" seta hud_panel_mapvote_bg_border "" seta hud_panel_mapvote_bg_padding "" -seta hud_panel_itemstime "2" seta hud_panel_itemstime_pos "0.030000 0.260000" seta hud_panel_itemstime_size "0.070000 0.230000" -seta hud_panel_itemstime_bg "border_itemstime" +seta hud_panel_itemstime_bg "border_default" seta hud_panel_itemstime_bg_color "" seta hud_panel_itemstime_bg_color_team "" seta hud_panel_itemstime_bg_alpha "" @@ -367,7 +345,6 @@ seta hud_panel_itemstime_text "1" seta hud_panel_itemstime_ratio "2" seta hud_panel_itemstime_dynamicsize "1" -seta hud_panel_quickmenu "1" seta hud_panel_quickmenu_pos "0.610000 0.450000" seta hud_panel_quickmenu_size "0.200000 0.210000" seta hud_panel_quickmenu_bg "" diff --git a/hud_luminos_minimal.cfg b/hud_luminos_minimal.cfg index 76214f4903..76edc7bc09 100644 --- a/hud_luminos_minimal.cfg +++ b/hud_luminos_minimal.cfg @@ -12,10 +12,10 @@ seta hud_panel_fg_alpha "1" seta hud_dock "0" seta hud_dock_color "0 0.449576 0.860796" -seta hud_dock_color_team "0.700000" +seta hud_dock_color_team "0.7" seta hud_dock_alpha "1" -seta hud_progressbar_alpha "0.500000" +seta hud_progressbar_alpha "0.5" seta hud_progressbar_strength_color "0 0 0.6" seta hud_progressbar_superweapons_color "0.6 0.3 0" seta hud_progressbar_shield_color "0.6 0 0.6" @@ -35,7 +35,6 @@ seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" seta hud_configure_grid_ysize "0.010000" -seta hud_panel_weapons "1" seta hud_panel_weapons_pos "0.350000 0.940000" seta hud_panel_weapons_size "0.300000 0.060000" seta hud_panel_weapons_bg "" @@ -68,7 +67,6 @@ seta hud_panel_weapons_onlyowned "1" seta hud_panel_weapons_noncurrent_alpha "1" seta hud_panel_weapons_noncurrent_scale "1" -seta hud_panel_ammo "1" seta hud_panel_ammo_pos "0.650000 0.890000" seta hud_panel_ammo_size "0.055000 0.110000" seta hud_panel_ammo_bg "" @@ -86,7 +84,6 @@ seta hud_panel_ammo_progressbar_name "progressbar" seta hud_panel_ammo_progressbar_xoffset "0" seta hud_panel_ammo_text "1" -seta hud_panel_powerups "1" seta hud_panel_powerups_pos "0.290000 0.890000" seta hud_panel_powerups_size "0.055000 0.110000" seta hud_panel_powerups_bg "0" @@ -100,7 +97,6 @@ seta hud_panel_powerups_baralign "1" seta hud_panel_powerups_progressbar "1" seta hud_panel_powerups_text "1" -seta hud_panel_healtharmor "1" seta hud_panel_healtharmor_pos "0.350000 0.890000" seta hud_panel_healtharmor_size "0.300000 0.050000" seta hud_panel_healtharmor_bg "" @@ -109,6 +105,7 @@ seta hud_panel_healtharmor_bg_color_team "" seta hud_panel_healtharmor_bg_alpha "" seta hud_panel_healtharmor_bg_border "" seta hud_panel_healtharmor_bg_padding "0" +seta hud_panel_healtharmor_combined "0" seta hud_panel_healtharmor_flip "0" seta hud_panel_healtharmor_iconalign "3" seta hud_panel_healtharmor_baralign "3" @@ -119,7 +116,6 @@ seta hud_panel_healtharmor_progressbar_gfx "1" seta hud_panel_healtharmor_progressbar_gfx_smooth "2" seta hud_panel_healtharmor_text "1" -seta hud_panel_notify "1" seta hud_panel_notify_pos "0 0" seta hud_panel_notify_size "0.210000 0.260000" seta hud_panel_notify_bg "0" @@ -134,7 +130,6 @@ seta hud_panel_notify_time "10" seta hud_panel_notify_fadetime "3" seta hud_panel_notify_icon_aspect "2" -seta hud_panel_timer "1" seta hud_panel_timer_pos "0.435000 0" seta hud_panel_timer_size "0.135000 0.060000" seta hud_panel_timer_bg "0" @@ -144,16 +139,15 @@ seta hud_panel_timer_bg_alpha "" seta hud_panel_timer_bg_border "" seta hud_panel_timer_bg_padding "0" -seta hud_panel_radar "2" seta hud_panel_radar_pos "0.810000 0" seta hud_panel_radar_size "0.190000 0.250000" -seta hud_panel_radar_bg "border_radar" +seta hud_panel_radar_bg "border_default" seta hud_panel_radar_bg_color "" seta hud_panel_radar_bg_color_team "" -seta hud_panel_radar_bg_alpha "0.500000" +seta hud_panel_radar_bg_alpha "0.5" seta hud_panel_radar_bg_border "0" seta hud_panel_radar_bg_padding "0" -seta hud_panel_radar_foreground_alpha "0.500000" +seta hud_panel_radar_foreground_alpha "0.5" seta hud_panel_radar_rotation "0" seta hud_panel_radar_zoommode "0" seta hud_panel_radar_scale "4096" @@ -162,7 +156,6 @@ seta hud_panel_radar_maximized_size "0.5 0.5" seta hud_panel_radar_maximized_rotation "1" seta hud_panel_radar_maximized_zoommode "3" -seta hud_panel_score "1" seta hud_panel_score_pos "0.465000 0.045000" seta hud_panel_score_size "0.090000 0.060000" seta hud_panel_score_bg "" @@ -173,7 +166,6 @@ seta hud_panel_score_bg_border "" seta hud_panel_score_bg_padding "" seta hud_panel_score_rankings "1" -seta hud_panel_racetimer "1" seta hud_panel_racetimer_pos "0.360000 0.090000" seta hud_panel_racetimer_size "0.280000 0.090000" seta hud_panel_racetimer_bg "0" @@ -183,7 +175,6 @@ seta hud_panel_racetimer_bg_alpha "" seta hud_panel_racetimer_bg_border "" seta hud_panel_racetimer_bg_padding "" -seta hud_panel_vote "1" seta hud_panel_vote_pos "0 0.890000" seta hud_panel_vote_size "0.170000 0.110000" seta hud_panel_vote_bg "" @@ -192,9 +183,8 @@ seta hud_panel_vote_bg_color_team "" seta hud_panel_vote_bg_alpha "" seta hud_panel_vote_bg_border "" seta hud_panel_vote_bg_padding "" -seta hud_panel_vote_alreadyvoted_alpha "0.800000" +seta hud_panel_vote_alreadyvoted_alpha "0.8" -seta hud_panel_modicons "1" seta hud_panel_modicons_pos "0.560000 0" seta hud_panel_modicons_size "0.050000 0.100000" seta hud_panel_modicons_bg "" @@ -207,7 +197,6 @@ seta hud_panel_modicons_ca_layout "1" seta hud_panel_modicons_dom_layout "1" seta hud_panel_modicons_freezetag_layout "1" -seta hud_panel_pressedkeys "1" seta hud_panel_pressedkeys_pos "0.450000 0.650000" seta hud_panel_pressedkeys_size "0.100000 0.110000" seta hud_panel_pressedkeys_bg "0" @@ -216,10 +205,9 @@ seta hud_panel_pressedkeys_bg_color_team "" seta hud_panel_pressedkeys_bg_alpha "" seta hud_panel_pressedkeys_bg_border "" seta hud_panel_pressedkeys_bg_padding "" -seta hud_panel_pressedkeys_aspect "1.600000" +seta hud_panel_pressedkeys_aspect "1.6" seta hud_panel_pressedkeys_attack "0" -seta hud_panel_chat "1" seta hud_panel_chat_pos "0 0.775000" seta hud_panel_chat_size "0.460000 0.110000" seta hud_panel_chat_bg "0" @@ -229,7 +217,6 @@ seta hud_panel_chat_bg_alpha "" seta hud_panel_chat_bg_border "" seta hud_panel_chat_bg_padding "" -seta hud_panel_engineinfo "0" seta hud_panel_engineinfo_pos "0.910000 0.970000" seta hud_panel_engineinfo_size "0.090000 0.030000" seta hud_panel_engineinfo_bg "0" @@ -241,7 +228,6 @@ seta hud_panel_engineinfo_bg_padding "" seta hud_panel_engineinfo_framecounter_time "0.1" seta hud_panel_engineinfo_framecounter_decimals "0" -seta hud_panel_infomessages "1" seta hud_panel_infomessages_pos "0.710000 0" seta hud_panel_infomessages_size "0.290000 0.100000" seta hud_panel_infomessages_bg "0" @@ -252,7 +238,6 @@ seta hud_panel_infomessages_bg_border "" seta hud_panel_infomessages_bg_padding "0" seta hud_panel_infomessages_flip "1" -seta hud_panel_physics "3" seta hud_panel_physics_pos "0.440000 0.590000" seta hud_panel_physics_size "0.120000 0.050000" seta hud_panel_physics_bg "" @@ -277,7 +262,6 @@ seta hud_panel_physics_acceleration_progressbar_nonlinear "0" seta hud_panel_physics_text "1" seta hud_panel_physics_text_scale "0.7" -seta hud_panel_centerprint "1" seta hud_panel_centerprint_pos "0.175000 0.220000" seta hud_panel_centerprint_size "0.650000 0.220000" seta hud_panel_centerprint_bg "0" @@ -300,7 +284,6 @@ seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5" seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75" seta hud_panel_centerprint_fade_minfontsize "0" -seta hud_panel_minigameboard "1" seta hud_panel_minigameboard_pos "0.22 0.15" seta hud_panel_minigameboard_size "0.50 0.60" seta hud_panel_minigameboard_bg "border_small" @@ -310,7 +293,6 @@ seta hud_panel_minigameboard_bg_alpha "" seta hud_panel_minigameboard_bg_border "" seta hud_panel_minigameboard_bg_padding "" -seta hud_panel_minigamestatus "1" seta hud_panel_minigamestatus_pos "0.74 0.15" seta hud_panel_minigamestatus_size "0.2 0.60" seta hud_panel_minigamestatus_bg "border_small" @@ -320,7 +302,6 @@ seta hud_panel_minigamestatus_bg_alpha "" seta hud_panel_minigamestatus_bg_border "" seta hud_panel_minigamestatus_bg_padding "" -seta hud_panel_minigamehelp "1" seta hud_panel_minigamehelp_pos "0.22 0.78" seta hud_panel_minigamehelp_size "0.50 0.20" seta hud_panel_minigamehelp_bg "" @@ -330,7 +311,6 @@ seta hud_panel_minigamehelp_bg_alpha "" seta hud_panel_minigamehelp_bg_border "" seta hud_panel_minigamehelp_bg_padding "" -seta hud_panel_minigamemenu "0" seta hud_panel_minigamemenu_pos "0 0.26" seta hud_panel_minigamemenu_size "0.2 0.49" seta hud_panel_minigamemenu_bg "border_small" @@ -340,7 +320,6 @@ seta hud_panel_minigamemenu_bg_alpha "" seta hud_panel_minigamemenu_bg_border "" seta hud_panel_minigamemenu_bg_padding "" -seta hud_panel_mapvote "1" seta hud_panel_mapvote_pos "0 0" seta hud_panel_mapvote_size "1 1" seta hud_panel_mapvote_bg "0" @@ -350,7 +329,6 @@ seta hud_panel_mapvote_bg_alpha "" seta hud_panel_mapvote_bg_border "" seta hud_panel_mapvote_bg_padding "" -seta hud_panel_itemstime "2" seta hud_panel_itemstime_pos "0.000000 0.310000" seta hud_panel_itemstime_size "0.070000 0.180000" seta hud_panel_itemstime_bg "" @@ -367,7 +345,6 @@ seta hud_panel_itemstime_text "1" seta hud_panel_itemstime_ratio "2" seta hud_panel_itemstime_dynamicsize "1" -seta hud_panel_quickmenu "1" seta hud_panel_quickmenu_pos "0.600000 0.460000" seta hud_panel_quickmenu_size "0.190000 0.190000" seta hud_panel_quickmenu_bg "" diff --git a/hud_luminos_minimal_xhair.cfg b/hud_luminos_minimal_xhair.cfg index 722a316fd0..f2670d8e2d 100644 --- a/hud_luminos_minimal_xhair.cfg +++ b/hud_luminos_minimal_xhair.cfg @@ -12,7 +12,7 @@ seta hud_panel_fg_alpha "1" seta hud_dock "0" seta hud_dock_color "0 0.449576 0.860796" -seta hud_dock_color_team "0.700000" +seta hud_dock_color_team "0.7" seta hud_dock_alpha "1" seta hud_progressbar_alpha "0.3" @@ -35,7 +35,6 @@ seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" seta hud_configure_grid_ysize "0.010000" -seta hud_panel_weapons "1" seta hud_panel_weapons_pos "0.350000 0.940000" seta hud_panel_weapons_size "0.300000 0.060000" seta hud_panel_weapons_bg "" @@ -68,7 +67,6 @@ seta hud_panel_weapons_onlyowned "1" seta hud_panel_weapons_noncurrent_alpha "1" seta hud_panel_weapons_noncurrent_scale "1" -seta hud_panel_ammo "1" seta hud_panel_ammo_pos "0.450000 0.630000" seta hud_panel_ammo_size "0.080000 0.040000" seta hud_panel_ammo_bg "" @@ -86,7 +84,6 @@ seta hud_panel_ammo_progressbar_name "progressbar_ammo" seta hud_panel_ammo_progressbar_xoffset "0.32" seta hud_panel_ammo_text "1" -seta hud_panel_powerups "1" seta hud_panel_powerups_pos "0.270000 0.940000" seta hud_panel_powerups_size "0.080000 0.060000" seta hud_panel_powerups_bg "0" @@ -100,15 +97,15 @@ seta hud_panel_powerups_baralign "1" seta hud_panel_powerups_progressbar "1" seta hud_panel_powerups_text "1" -seta hud_panel_healtharmor "1" seta hud_panel_healtharmor_pos "0.350000 0.380000" seta hud_panel_healtharmor_size "0.070000 0.240000" seta hud_panel_healtharmor_bg "border_healtharmor" seta hud_panel_healtharmor_bg_color "0.464391 0.464391 0.464391" seta hud_panel_healtharmor_bg_color_team "" -seta hud_panel_healtharmor_bg_alpha "0.600000" +seta hud_panel_healtharmor_bg_alpha "0.6" seta hud_panel_healtharmor_bg_border "-1" seta hud_panel_healtharmor_bg_padding "0" +seta hud_panel_healtharmor_combined "0" seta hud_panel_healtharmor_flip "0" seta hud_panel_healtharmor_iconalign "1" seta hud_panel_healtharmor_baralign "1" @@ -119,7 +116,6 @@ seta hud_panel_healtharmor_progressbar_gfx "1" seta hud_panel_healtharmor_progressbar_gfx_smooth "2" seta hud_panel_healtharmor_text "0" -seta hud_panel_notify "1" seta hud_panel_notify_pos "0 0" seta hud_panel_notify_size "0.210000 0.260000" seta hud_panel_notify_bg "0" @@ -134,7 +130,6 @@ seta hud_panel_notify_time "10" seta hud_panel_notify_fadetime "3" seta hud_panel_notify_icon_aspect "2" -seta hud_panel_timer "1" seta hud_panel_timer_pos "0.435000 0" seta hud_panel_timer_size "0.135000 0.060000" seta hud_panel_timer_bg "0" @@ -144,16 +139,15 @@ seta hud_panel_timer_bg_alpha "" seta hud_panel_timer_bg_border "" seta hud_panel_timer_bg_padding "0" -seta hud_panel_radar "2" seta hud_panel_radar_pos "0.810000 0" seta hud_panel_radar_size "0.190000 0.250000" -seta hud_panel_radar_bg "border_radar" +seta hud_panel_radar_bg "border_default" seta hud_panel_radar_bg_color "" seta hud_panel_radar_bg_color_team "" -seta hud_panel_radar_bg_alpha "0.500000" +seta hud_panel_radar_bg_alpha "0.5" seta hud_panel_radar_bg_border "0" seta hud_panel_radar_bg_padding "0" -seta hud_panel_radar_foreground_alpha "0.500000" +seta hud_panel_radar_foreground_alpha "0.5" seta hud_panel_radar_rotation "0" seta hud_panel_radar_zoommode "0" seta hud_panel_radar_scale "4096" @@ -162,7 +156,6 @@ seta hud_panel_radar_maximized_size "0.5 0.5" seta hud_panel_radar_maximized_rotation "1" seta hud_panel_radar_maximized_zoommode "3" -seta hud_panel_score "1" seta hud_panel_score_pos "0.465000 0.045000" seta hud_panel_score_size "0.090000 0.060000" seta hud_panel_score_bg "" @@ -173,7 +166,6 @@ seta hud_panel_score_bg_border "" seta hud_panel_score_bg_padding "" seta hud_panel_score_rankings "1" -seta hud_panel_racetimer "1" seta hud_panel_racetimer_pos "0.360000 0.090000" seta hud_panel_racetimer_size "0.280000 0.090000" seta hud_panel_racetimer_bg "0" @@ -183,7 +175,6 @@ seta hud_panel_racetimer_bg_alpha "" seta hud_panel_racetimer_bg_border "" seta hud_panel_racetimer_bg_padding "" -seta hud_panel_vote "1" seta hud_panel_vote_pos "0 0.890000" seta hud_panel_vote_size "0.170000 0.110000" seta hud_panel_vote_bg "" @@ -192,9 +183,8 @@ seta hud_panel_vote_bg_color_team "" seta hud_panel_vote_bg_alpha "" seta hud_panel_vote_bg_border "" seta hud_panel_vote_bg_padding "" -seta hud_panel_vote_alreadyvoted_alpha "0.800000" +seta hud_panel_vote_alreadyvoted_alpha "0.8" -seta hud_panel_modicons "1" seta hud_panel_modicons_pos "0.560000 0" seta hud_panel_modicons_size "0.050000 0.100000" seta hud_panel_modicons_bg "" @@ -207,7 +197,6 @@ seta hud_panel_modicons_ca_layout "1" seta hud_panel_modicons_dom_layout "1" seta hud_panel_modicons_freezetag_layout "1" -seta hud_panel_pressedkeys "1" seta hud_panel_pressedkeys_pos "0.450000 0.690000" seta hud_panel_pressedkeys_size "0.100000 0.110000" seta hud_panel_pressedkeys_bg "0" @@ -216,10 +205,9 @@ seta hud_panel_pressedkeys_bg_color_team "" seta hud_panel_pressedkeys_bg_alpha "" seta hud_panel_pressedkeys_bg_border "" seta hud_panel_pressedkeys_bg_padding "" -seta hud_panel_pressedkeys_aspect "1.600000" +seta hud_panel_pressedkeys_aspect "1.6" seta hud_panel_pressedkeys_attack "0" -seta hud_panel_chat "1" seta hud_panel_chat_pos "0 0.775000" seta hud_panel_chat_size "0.460000 0.110000" seta hud_panel_chat_bg "0" @@ -229,7 +217,6 @@ seta hud_panel_chat_bg_alpha "" seta hud_panel_chat_bg_border "" seta hud_panel_chat_bg_padding "" -seta hud_panel_engineinfo "0" seta hud_panel_engineinfo_pos "0.910000 0.970000" seta hud_panel_engineinfo_size "0.090000 0.030000" seta hud_panel_engineinfo_bg "0" @@ -241,7 +228,6 @@ seta hud_panel_engineinfo_bg_padding "" seta hud_panel_engineinfo_framecounter_time "0.1" seta hud_panel_engineinfo_framecounter_decimals "0" -seta hud_panel_infomessages "1" seta hud_panel_infomessages_pos "0.710000 0" seta hud_panel_infomessages_size "0.290000 0.100000" seta hud_panel_infomessages_bg "0" @@ -252,7 +238,6 @@ seta hud_panel_infomessages_bg_border "" seta hud_panel_infomessages_bg_padding "0" seta hud_panel_infomessages_flip "1" -seta hud_panel_physics "3" seta hud_panel_physics_pos "0.270000 0.730000" seta hud_panel_physics_size "0.170000 0.030000" seta hud_panel_physics_bg "" @@ -277,7 +262,6 @@ seta hud_panel_physics_acceleration_progressbar_nonlinear "0" seta hud_panel_physics_text "1" seta hud_panel_physics_text_scale "0.7" -seta hud_panel_centerprint "1" seta hud_panel_centerprint_pos "0.175000 0.220000" seta hud_panel_centerprint_size "0.650000 0.220000" seta hud_panel_centerprint_bg "0" @@ -300,7 +284,6 @@ seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5" seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75" seta hud_panel_centerprint_fade_minfontsize "0" -seta hud_panel_minigameboard "1" seta hud_panel_minigameboard_pos "0.22 0.15" seta hud_panel_minigameboard_size "0.50 0.60" seta hud_panel_minigameboard_bg "border_small" @@ -310,7 +293,6 @@ seta hud_panel_minigameboard_bg_alpha "" seta hud_panel_minigameboard_bg_border "" seta hud_panel_minigameboard_bg_padding "" -seta hud_panel_minigamestatus "1" seta hud_panel_minigamestatus_pos "0.74 0.15" seta hud_panel_minigamestatus_size "0.2 0.60" seta hud_panel_minigamestatus_bg "border_small" @@ -320,7 +302,6 @@ seta hud_panel_minigamestatus_bg_alpha "" seta hud_panel_minigamestatus_bg_border "" seta hud_panel_minigamestatus_bg_padding "" -seta hud_panel_minigamehelp "1" seta hud_panel_minigamehelp_pos "0.22 0.78" seta hud_panel_minigamehelp_size "0.50 0.20" seta hud_panel_minigamehelp_bg "" @@ -330,7 +311,6 @@ seta hud_panel_minigamehelp_bg_alpha "" seta hud_panel_minigamehelp_bg_border "" seta hud_panel_minigamehelp_bg_padding "" -seta hud_panel_minigamemenu "0" seta hud_panel_minigamemenu_pos "0 0.26" seta hud_panel_minigamemenu_size "0.2 0.49" seta hud_panel_minigamemenu_bg "border_small" @@ -340,7 +320,6 @@ seta hud_panel_minigamemenu_bg_alpha "" seta hud_panel_minigamemenu_bg_border "" seta hud_panel_minigamemenu_bg_padding "" -seta hud_panel_mapvote "1" seta hud_panel_mapvote_pos "0 0" seta hud_panel_mapvote_size "1 1" seta hud_panel_mapvote_bg "0" @@ -350,7 +329,6 @@ seta hud_panel_mapvote_bg_alpha "" seta hud_panel_mapvote_bg_border "" seta hud_panel_mapvote_bg_padding "" -seta hud_panel_itemstime "2" seta hud_panel_itemstime_pos "0.000000 0.310000" seta hud_panel_itemstime_size "0.070000 0.180000" seta hud_panel_itemstime_bg "" @@ -367,7 +345,6 @@ seta hud_panel_itemstime_text "1" seta hud_panel_itemstime_ratio "2" seta hud_panel_itemstime_dynamicsize "1" -seta hud_panel_quickmenu "1" seta hud_panel_quickmenu_pos "0.600000 0.460000" seta hud_panel_quickmenu_size "0.190000 0.190000" seta hud_panel_quickmenu_bg "" diff --git a/hud_luminos_old.cfg b/hud_luminos_old.cfg index 3138471bb7..fc8d05ffbe 100644 --- a/hud_luminos_old.cfg +++ b/hud_luminos_old.cfg @@ -12,10 +12,10 @@ seta hud_panel_fg_alpha "1" seta hud_dock "dock" seta hud_dock_color "0 0.1875 0.40625" -seta hud_dock_color_team "0.700000" +seta hud_dock_color_team "0.7" seta hud_dock_alpha "1" -seta hud_progressbar_alpha "0.500000" +seta hud_progressbar_alpha "0.5" seta hud_progressbar_strength_color "0 0 0.6" seta hud_progressbar_superweapons_color "0.6 0.3 0" seta hud_progressbar_shield_color "0.6 0 0.6" @@ -35,7 +35,6 @@ seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" seta hud_configure_grid_ysize "0.010000" -seta hud_panel_weapons "1" seta hud_panel_weapons_pos "0.920000 0.090000" seta hud_panel_weapons_size "0.060000 0.630000" seta hud_panel_weapons_bg "" @@ -68,7 +67,6 @@ seta hud_panel_weapons_onlyowned "1" seta hud_panel_weapons_noncurrent_alpha "1" seta hud_panel_weapons_noncurrent_scale "1" -seta hud_panel_ammo "1" seta hud_panel_ammo_pos "0.190000 0.920000" seta hud_panel_ammo_size "0.120000 0.070000" seta hud_panel_ammo_bg "" @@ -86,7 +84,6 @@ seta hud_panel_ammo_progressbar_name "progressbar" seta hud_panel_ammo_progressbar_xoffset "0" seta hud_panel_ammo_text "1" -seta hud_panel_powerups "1" seta hud_panel_powerups_pos "0.660000 0.940000" seta hud_panel_powerups_size "0.330000 0.060000" seta hud_panel_powerups_bg "0" @@ -100,7 +97,6 @@ seta hud_panel_powerups_baralign "3" seta hud_panel_powerups_progressbar "1" seta hud_panel_powerups_text "1" -seta hud_panel_healtharmor "1" seta hud_panel_healtharmor_pos "0.330000 0.920000" seta hud_panel_healtharmor_size "0.310000 0.070000" seta hud_panel_healtharmor_bg "" @@ -109,6 +105,7 @@ seta hud_panel_healtharmor_bg_color_team "" seta hud_panel_healtharmor_bg_alpha "" seta hud_panel_healtharmor_bg_border "" seta hud_panel_healtharmor_bg_padding "" +seta hud_panel_healtharmor_combined "0" seta hud_panel_healtharmor_flip "0" seta hud_panel_healtharmor_iconalign "3" seta hud_panel_healtharmor_baralign "3" @@ -119,7 +116,6 @@ seta hud_panel_healtharmor_progressbar_gfx "1" seta hud_panel_healtharmor_progressbar_gfx_smooth "2" seta hud_panel_healtharmor_text "1" -seta hud_panel_notify "1" seta hud_panel_notify_pos "0.660000 0.730000" seta hud_panel_notify_size "0.320000 0.190000" seta hud_panel_notify_bg "0" @@ -134,7 +130,6 @@ seta hud_panel_notify_time "10" seta hud_panel_notify_fadetime "3" seta hud_panel_notify_icon_aspect "2" -seta hud_panel_timer "1" seta hud_panel_timer_pos "0.870000 0" seta hud_panel_timer_size "0.130000 0.060000" seta hud_panel_timer_bg "0" @@ -144,7 +139,6 @@ seta hud_panel_timer_bg_alpha "" seta hud_panel_timer_bg_border "" seta hud_panel_timer_bg_padding "0" -seta hud_panel_radar "2" seta hud_panel_radar_pos "0.030000 0.020000" seta hud_panel_radar_size "0.170000 0.220000" seta hud_panel_radar_bg "" @@ -153,7 +147,7 @@ seta hud_panel_radar_bg_color_team "" seta hud_panel_radar_bg_alpha "" seta hud_panel_radar_bg_border "" seta hud_panel_radar_bg_padding "-3" -seta hud_panel_radar_foreground_alpha "0.800000" +seta hud_panel_radar_foreground_alpha "0.8" seta hud_panel_radar_rotation "0" seta hud_panel_radar_zoommode "0" seta hud_panel_radar_scale "4096" @@ -162,7 +156,6 @@ seta hud_panel_radar_maximized_size "0.5 0.5" seta hud_panel_radar_maximized_rotation "1" seta hud_panel_radar_maximized_zoommode "3" -seta hud_panel_score "1" seta hud_panel_score_pos "0.020000 0.920000" seta hud_panel_score_size "0.150000 0.070000" seta hud_panel_score_bg "" @@ -173,7 +166,6 @@ seta hud_panel_score_bg_border "" seta hud_panel_score_bg_padding "" seta hud_panel_score_rankings "1" -seta hud_panel_racetimer "1" seta hud_panel_racetimer_pos "0.360000 0.090000" seta hud_panel_racetimer_size "0.280000 0.090000" seta hud_panel_racetimer_bg "0" @@ -183,7 +175,6 @@ seta hud_panel_racetimer_bg_alpha "" seta hud_panel_racetimer_bg_border "" seta hud_panel_racetimer_bg_padding "" -seta hud_panel_vote "1" seta hud_panel_vote_pos "0.020000 0.650000" seta hud_panel_vote_size "0.230000 0.110000" seta hud_panel_vote_bg "" @@ -192,9 +183,8 @@ seta hud_panel_vote_bg_color_team "" seta hud_panel_vote_bg_alpha "" seta hud_panel_vote_bg_border "" seta hud_panel_vote_bg_padding "" -seta hud_panel_vote_alreadyvoted_alpha "0.800000" +seta hud_panel_vote_alreadyvoted_alpha "0.8" -seta hud_panel_modicons "1" seta hud_panel_modicons_pos "0.040000 0.270000" seta hud_panel_modicons_size "0.080000 0.200000" seta hud_panel_modicons_bg "" @@ -207,7 +197,6 @@ seta hud_panel_modicons_ca_layout "1" seta hud_panel_modicons_dom_layout "1" seta hud_panel_modicons_freezetag_layout "1" -seta hud_panel_pressedkeys "1" seta hud_panel_pressedkeys_pos "0.410000 0.710000" seta hud_panel_pressedkeys_size "0.180000 0.130000" seta hud_panel_pressedkeys_bg "0" @@ -216,10 +205,9 @@ seta hud_panel_pressedkeys_bg_color_team "" seta hud_panel_pressedkeys_bg_alpha "" seta hud_panel_pressedkeys_bg_border "" seta hud_panel_pressedkeys_bg_padding "" -seta hud_panel_pressedkeys_aspect "1.600000" +seta hud_panel_pressedkeys_aspect "1.6" seta hud_panel_pressedkeys_attack "0" -seta hud_panel_chat "1" seta hud_panel_chat_pos "0.020000 0.780000" seta hud_panel_chat_size "0.630000 0.110000" seta hud_panel_chat_bg "0" @@ -229,7 +217,6 @@ seta hud_panel_chat_bg_alpha "" seta hud_panel_chat_bg_border "" seta hud_panel_chat_bg_padding "" -seta hud_panel_engineinfo "0" seta hud_panel_engineinfo_pos "0.910000 0.970000" seta hud_panel_engineinfo_size "0.090000 0.030000" seta hud_panel_engineinfo_bg "0" @@ -241,7 +228,6 @@ seta hud_panel_engineinfo_bg_padding "" seta hud_panel_engineinfo_framecounter_time "0.1" seta hud_panel_engineinfo_framecounter_decimals "0" -seta hud_panel_infomessages "1" seta hud_panel_infomessages_pos "0.510000 0" seta hud_panel_infomessages_size "0.340000 0.090000" seta hud_panel_infomessages_bg "0" @@ -252,7 +238,6 @@ seta hud_panel_infomessages_bg_border "" seta hud_panel_infomessages_bg_padding "0" seta hud_panel_infomessages_flip "1" -seta hud_panel_physics "3" seta hud_panel_physics_pos "0.410000 0.590000" seta hud_panel_physics_size "0.180000 0.100000" seta hud_panel_physics_bg "" @@ -277,7 +262,6 @@ seta hud_panel_physics_acceleration_progressbar_nonlinear "0" seta hud_panel_physics_text "1" seta hud_panel_physics_text_scale "0.7" -seta hud_panel_centerprint "1" seta hud_panel_centerprint_pos "0.175000 0.220000" seta hud_panel_centerprint_size "0.650000 0.220000" seta hud_panel_centerprint_bg "0" @@ -300,7 +284,6 @@ seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5" seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75" seta hud_panel_centerprint_fade_minfontsize "0" -seta hud_panel_minigameboard "1" seta hud_panel_minigameboard_pos "0.22 0.15" seta hud_panel_minigameboard_size "0.50 0.60" seta hud_panel_minigameboard_bg "border_small" @@ -310,7 +293,6 @@ seta hud_panel_minigameboard_bg_alpha "" seta hud_panel_minigameboard_bg_border "" seta hud_panel_minigameboard_bg_padding "" -seta hud_panel_minigamestatus "1" seta hud_panel_minigamestatus_pos "0.74 0.15" seta hud_panel_minigamestatus_size "0.2 0.60" seta hud_panel_minigamestatus_bg "border_small" @@ -320,7 +302,6 @@ seta hud_panel_minigamestatus_bg_alpha "" seta hud_panel_minigamestatus_bg_border "" seta hud_panel_minigamestatus_bg_padding "" -seta hud_panel_minigamehelp "1" seta hud_panel_minigamehelp_pos "0.22 0.78" seta hud_panel_minigamehelp_size "0.50 0.20" seta hud_panel_minigamehelp_bg "" @@ -330,7 +311,6 @@ seta hud_panel_minigamehelp_bg_alpha "" seta hud_panel_minigamehelp_bg_border "" seta hud_panel_minigamehelp_bg_padding "" -seta hud_panel_minigamemenu "0" seta hud_panel_minigamemenu_pos "0 0.26" seta hud_panel_minigamemenu_size "0.2 0.49" seta hud_panel_minigamemenu_bg "border_small" @@ -340,7 +320,6 @@ seta hud_panel_minigamemenu_bg_alpha "" seta hud_panel_minigamemenu_bg_border "" seta hud_panel_minigamemenu_bg_padding "" -seta hud_panel_mapvote "1" seta hud_panel_mapvote_pos "0 0" seta hud_panel_mapvote_size "1 1" seta hud_panel_mapvote_bg "0" @@ -350,7 +329,6 @@ seta hud_panel_mapvote_bg_alpha "" seta hud_panel_mapvote_bg_border "" seta hud_panel_mapvote_bg_padding "" -seta hud_panel_itemstime "2" seta hud_panel_itemstime_pos "0.020000 0.490000" seta hud_panel_itemstime_size "0.090000 0.140000" seta hud_panel_itemstime_bg "0" @@ -364,10 +342,9 @@ seta hud_panel_itemstime_progressbar "1" seta hud_panel_itemstime_progressbar_name "progressbar" seta hud_panel_itemstime_progressbar_reduced "1" seta hud_panel_itemstime_text "1" -seta hud_panel_itemstime_ratio "3.500000" +seta hud_panel_itemstime_ratio "3.5" seta hud_panel_itemstime_dynamicsize "1" -seta hud_panel_quickmenu "1" seta hud_panel_quickmenu_pos "0.700000 0.460000" seta hud_panel_quickmenu_size "0.210000 0.250000" seta hud_panel_quickmenu_bg "" diff --git a/hud_nexuiz.cfg b/hud_nexuiz.cfg index 791653f270..bc1dc9bdda 100644 --- a/hud_nexuiz.cfg +++ b/hud_nexuiz.cfg @@ -5,15 +5,15 @@ seta hud_skin "old" seta hud_panel_bg "border_default" seta hud_panel_bg_color "0.299327 1 0.81275" seta hud_panel_bg_color_team "0" -seta hud_panel_bg_alpha "0.700000" +seta hud_panel_bg_alpha "0.7" seta hud_panel_bg_border "8" seta hud_panel_bg_padding "0" seta hud_panel_fg_alpha "1" seta hud_dock "dock" seta hud_dock_color "0 0.697965 0.418232" -seta hud_dock_color_team "0.700000" -seta hud_dock_alpha "0.700000" +seta hud_dock_color_team "0.7" +seta hud_dock_alpha "0.7" seta hud_progressbar_alpha "0.5" seta hud_progressbar_strength_color "0 0 0.6" @@ -35,7 +35,6 @@ seta hud_configure_grid "1" seta hud_configure_grid_xsize "0.010000" seta hud_configure_grid_ysize "0.010000" -seta hud_panel_weapons "1" seta hud_panel_weapons_pos "0.375000 0.870000" seta hud_panel_weapons_size "0.300000 0.060000" seta hud_panel_weapons_bg "0" @@ -68,7 +67,6 @@ seta hud_panel_weapons_onlyowned "0" seta hud_panel_weapons_noncurrent_alpha "1" seta hud_panel_weapons_noncurrent_scale "1" -seta hud_panel_ammo "1" seta hud_panel_ammo_pos "0.160000 0.910000" seta hud_panel_ammo_size "0.190000 0.090000" seta hud_panel_ammo_bg "0" @@ -86,7 +84,6 @@ seta hud_panel_ammo_progressbar_name "progressbar" seta hud_panel_ammo_progressbar_xoffset "0" seta hud_panel_ammo_text "1" -seta hud_panel_powerups "1" seta hud_panel_powerups_pos "0.660000 0.910000" seta hud_panel_powerups_size "0.130000 0.090000" seta hud_panel_powerups_bg "0" @@ -100,7 +97,6 @@ seta hud_panel_powerups_baralign "0" seta hud_panel_powerups_progressbar "0" seta hud_panel_powerups_text "1" -seta hud_panel_healtharmor "1" seta hud_panel_healtharmor_pos "0.370000 0.930000" seta hud_panel_healtharmor_size "0.300000 0.070000" seta hud_panel_healtharmor_bg "0" @@ -109,6 +105,7 @@ seta hud_panel_healtharmor_bg_color_team "" seta hud_panel_healtharmor_bg_alpha "" seta hud_panel_healtharmor_bg_border "" seta hud_panel_healtharmor_bg_padding "" +seta hud_panel_healtharmor_combined "0" seta hud_panel_healtharmor_flip "0" seta hud_panel_healtharmor_iconalign "0" seta hud_panel_healtharmor_baralign "0" @@ -119,7 +116,6 @@ seta hud_panel_healtharmor_progressbar_gfx "1" seta hud_panel_healtharmor_progressbar_gfx_smooth "2" seta hud_panel_healtharmor_text "1" -seta hud_panel_notify "0" seta hud_panel_notify_pos "0.010000 0.650000" seta hud_panel_notify_size "0.300000 0.070000" seta hud_panel_notify_bg "0" @@ -134,7 +130,6 @@ seta hud_panel_notify_time "10" seta hud_panel_notify_fadetime "3" seta hud_panel_notify_icon_aspect "2" -seta hud_panel_timer "1" seta hud_panel_timer_pos "0.850000 0" seta hud_panel_timer_size "0.150000 0.060000" seta hud_panel_timer_bg "" @@ -144,13 +139,12 @@ seta hud_panel_timer_bg_alpha "" seta hud_panel_timer_bg_border "" seta hud_panel_timer_bg_padding "0" -seta hud_panel_radar "2" seta hud_panel_radar_pos "0 0" seta hud_panel_radar_size "0.200000 0.260000" seta hud_panel_radar_bg "border_radar" seta hud_panel_radar_bg_color "" seta hud_panel_radar_bg_color_team "" -seta hud_panel_radar_bg_alpha "0.500000" +seta hud_panel_radar_bg_alpha "0.5" seta hud_panel_radar_bg_border "0" seta hud_panel_radar_bg_padding "0" seta hud_panel_radar_foreground_alpha "1" @@ -162,7 +156,6 @@ seta hud_panel_radar_maximized_size "0.5 0.5" seta hud_panel_radar_maximized_rotation "1" seta hud_panel_radar_maximized_zoommode "3" -seta hud_panel_score "1" seta hud_panel_score_pos "0.760000 0.910000" seta hud_panel_score_size "0.200000 0.080000" seta hud_panel_score_bg "0" @@ -173,7 +166,6 @@ seta hud_panel_score_bg_border "" seta hud_panel_score_bg_padding "" seta hud_panel_score_rankings "0" -seta hud_panel_racetimer "1" seta hud_panel_racetimer_pos "0.360000 0.140000" seta hud_panel_racetimer_size "0.280000 0.090000" seta hud_panel_racetimer_bg "0" @@ -183,7 +175,6 @@ seta hud_panel_racetimer_bg_alpha "" seta hud_panel_racetimer_bg_border "" seta hud_panel_racetimer_bg_padding "" -seta hud_panel_vote "1" seta hud_panel_vote_pos "0.690000 0.750000" seta hud_panel_vote_size "0.300000 0.100000" seta hud_panel_vote_bg "" @@ -192,9 +183,8 @@ seta hud_panel_vote_bg_color_team "" seta hud_panel_vote_bg_alpha "" seta hud_panel_vote_bg_border "" seta hud_panel_vote_bg_padding "-3" -seta hud_panel_vote_alreadyvoted_alpha "0.750000" +seta hud_panel_vote_alreadyvoted_alpha "0.75" -seta hud_panel_modicons "1" seta hud_panel_modicons_pos "0.010000 0.910000" seta hud_panel_modicons_size "0.135000 0.090000" seta hud_panel_modicons_bg "0" @@ -207,7 +197,6 @@ seta hud_panel_modicons_ca_layout "1" seta hud_panel_modicons_dom_layout "1" seta hud_panel_modicons_freezetag_layout "1" -seta hud_panel_pressedkeys "1" seta hud_panel_pressedkeys_pos "0.440000 0.760000" seta hud_panel_pressedkeys_size "0.120000 0.094368" seta hud_panel_pressedkeys_bg "0" @@ -216,10 +205,9 @@ seta hud_panel_pressedkeys_bg_color_team "" seta hud_panel_pressedkeys_bg_alpha "" seta hud_panel_pressedkeys_bg_border "" seta hud_panel_pressedkeys_bg_padding "" -seta hud_panel_pressedkeys_aspect "1.600000" +seta hud_panel_pressedkeys_aspect "1.6" seta hud_panel_pressedkeys_attack "0" -seta hud_panel_chat "1" seta hud_panel_chat_pos "0 0.760000" seta hud_panel_chat_size "0.420000 0.130000" seta hud_panel_chat_bg "0" @@ -229,7 +217,6 @@ seta hud_panel_chat_bg_alpha "" seta hud_panel_chat_bg_border "" seta hud_panel_chat_bg_padding "" -seta hud_panel_engineinfo "0" seta hud_panel_engineinfo_pos "0.887500 0.870000" seta hud_panel_engineinfo_size "0.112500 0.030000" seta hud_panel_engineinfo_bg "0" @@ -241,7 +228,6 @@ seta hud_panel_engineinfo_bg_padding "" seta hud_panel_engineinfo_framecounter_time "0.1" seta hud_panel_engineinfo_framecounter_decimals "0" -seta hud_panel_infomessages "1" seta hud_panel_infomessages_pos "0.690000 0.620000" seta hud_panel_infomessages_size "0.300000 0.100000" seta hud_panel_infomessages_bg "0" @@ -252,7 +238,6 @@ seta hud_panel_infomessages_bg_border "" seta hud_panel_infomessages_bg_padding "" seta hud_panel_infomessages_flip "1" -seta hud_panel_physics "3" seta hud_panel_physics_pos "0.430000 0.640000" seta hud_panel_physics_size "0.140000 0.100000" seta hud_panel_physics_bg "0" @@ -277,7 +262,6 @@ seta hud_panel_physics_acceleration_progressbar_nonlinear "0" seta hud_panel_physics_text "2" seta hud_panel_physics_text_scale "1" -seta hud_panel_centerprint "1" seta hud_panel_centerprint_pos "0.175000 0.260000" seta hud_panel_centerprint_size "0.650000 0.200000" seta hud_panel_centerprint_bg "0" @@ -300,7 +284,6 @@ seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5" seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75" seta hud_panel_centerprint_fade_minfontsize "0" -seta hud_panel_minigameboard "1" seta hud_panel_minigameboard_pos "0.22 0.15" seta hud_panel_minigameboard_size "0.50 0.60" seta hud_panel_minigameboard_bg "border_small" @@ -310,7 +293,6 @@ seta hud_panel_minigameboard_bg_alpha "" seta hud_panel_minigameboard_bg_border "" seta hud_panel_minigameboard_bg_padding "" -seta hud_panel_minigamestatus "1" seta hud_panel_minigamestatus_pos "0.74 0.15" seta hud_panel_minigamestatus_size "0.2 0.60" seta hud_panel_minigamestatus_bg "border_small" @@ -320,7 +302,6 @@ seta hud_panel_minigamestatus_bg_alpha "" seta hud_panel_minigamestatus_bg_border "" seta hud_panel_minigamestatus_bg_padding "" -seta hud_panel_minigamehelp "1" seta hud_panel_minigamehelp_pos "0.22 0.78" seta hud_panel_minigamehelp_size "0.50 0.20" seta hud_panel_minigamehelp_bg "" @@ -330,7 +311,6 @@ seta hud_panel_minigamehelp_bg_alpha "" seta hud_panel_minigamehelp_bg_border "" seta hud_panel_minigamehelp_bg_padding "" -seta hud_panel_minigamemenu "0" seta hud_panel_minigamemenu_pos "0 0.26" seta hud_panel_minigamemenu_size "0.2 0.49" seta hud_panel_minigamemenu_bg "border_small" @@ -340,7 +320,6 @@ seta hud_panel_minigamemenu_bg_alpha "" seta hud_panel_minigamemenu_bg_border "" seta hud_panel_minigamemenu_bg_padding "" -seta hud_panel_mapvote "1" seta hud_panel_mapvote_pos "0 0" seta hud_panel_mapvote_size "1 1" seta hud_panel_mapvote_bg "0" @@ -350,7 +329,6 @@ seta hud_panel_mapvote_bg_alpha "" seta hud_panel_mapvote_bg_border "" seta hud_panel_mapvote_bg_padding "" -seta hud_panel_itemstime "2" seta hud_panel_itemstime_pos "0.000000 0.290000" seta hud_panel_itemstime_size "0.150000 0.060000" seta hud_panel_itemstime_bg "0" @@ -367,7 +345,6 @@ seta hud_panel_itemstime_text "1" seta hud_panel_itemstime_ratio "2" seta hud_panel_itemstime_dynamicsize "1" -seta hud_panel_quickmenu "1" seta hud_panel_quickmenu_pos "0.010000 0.380000" seta hud_panel_quickmenu_size "0.210000 0.250000" seta hud_panel_quickmenu_bg "" diff --git a/mutators.cfg b/mutators.cfg index 7e60304ccd..0f49665424 100644 --- a/mutators.cfg +++ b/mutators.cfg @@ -34,6 +34,8 @@ set g_instagib_speed_highspeed 1.5 "speed-multiplier that applies while you carr set g_instagib_damagedbycontents 1 "allow damage from lava pits in instagib" set g_instagib_blaster_keepdamage 0 "allow secondary fire to hurt players" set g_instagib_blaster_keepforce 0 "allow secondary fire to push players" +set g_instagib_mirrordamage 0 "allow damage mirror instagib" +set g_instagib_friendlypush 1 "allow pushing teammates with the vaporizer primary attack" // ========== @@ -179,6 +181,7 @@ set g_random_gravity_negative 1000 "negative gravity multiplier" // Nades // ======= set g_nades 0 "enable off-hand grenades" +set g_nades_spread 0.04 "random spread offset of throw direction" set g_nades_throw_offset "0 0 0" "nade throwing offset" set g_nades_spawn 1 "give nades right away when player spawns rather than delaying entire refire" set g_nades_client_select 0 "allow client side selection of nade type" diff --git a/qcsrc/client/_mod.inc b/qcsrc/client/_mod.inc index acb697787b..186be97400 100644 --- a/qcsrc/client/_mod.inc +++ b/qcsrc/client/_mod.inc @@ -1,13 +1,13 @@ // generated file; do not modify -#include "announcer.qc" -#include "bgmscript.qc" -#include "csqcmodel_hooks.qc" -#include "main.qc" -#include "mapvoting.qc" -#include "miscfunctions.qc" -#include "player_skeleton.qc" -#include "scoreboard.qc" -#include "shownames.qc" -#include "teamradar.qc" -#include "view.qc" -#include "wall.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/client/_mod.qh b/qcsrc/client/_mod.qh new file mode 100644 index 0000000000..1c66ff781e --- /dev/null +++ b/qcsrc/client/_mod.qh @@ -0,0 +1,13 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index 3320b16620..c36d451547 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -230,6 +230,7 @@ float autocvar_hud_panel_engineinfo_framecounter_time; float autocvar_hud_panel_fg_alpha; bool autocvar_hud_panel_healtharmor; int autocvar_hud_panel_healtharmor_baralign; +bool autocvar_hud_panel_healtharmor_combined; bool autocvar_hud_panel_healtharmor_flip; int autocvar_hud_panel_healtharmor_iconalign; int autocvar_hud_panel_healtharmor_maxarmor; diff --git a/qcsrc/client/commands/_mod.inc b/qcsrc/client/commands/_mod.inc index d9220c61da..235f1297fd 100644 --- a/qcsrc/client/commands/_mod.inc +++ b/qcsrc/client/commands/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "all.qc" -#include "cl_cmd.qc" +#include +#include diff --git a/qcsrc/client/commands/_mod.qh b/qcsrc/client/commands/_mod.qh new file mode 100644 index 0000000000..03df56398c --- /dev/null +++ b/qcsrc/client/commands/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/client/commands/cl_cmd.qc b/qcsrc/client/commands/cl_cmd.qc index 6dadff2f3c..45444c8791 100644 --- a/qcsrc/client/commands/cl_cmd.qc +++ b/qcsrc/client/commands/cl_cmd.qc @@ -252,7 +252,7 @@ void QuickMenu_Close(); bool QuickMenu_Open(string mode, string submenu); bool HUD_MinigameMenu_IsOpened(); -void HUD_MinigameMenu_Close(); +void HUD_MinigameMenu_Close(entity this, entity actor, entity trigger); void HUD_MinigameMenu_Open(); void HUD_Radar_Show_Maximized(bool doshow, bool clickable); diff --git a/qcsrc/client/hud/_mod.inc b/qcsrc/client/hud/_mod.inc index 73066c3d42..b90f61b8cc 100644 --- a/qcsrc/client/hud/_mod.inc +++ b/qcsrc/client/hud/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "hud.qc" -#include "hud_config.qc" +#include +#include diff --git a/qcsrc/client/hud/_mod.qh b/qcsrc/client/hud/_mod.qh new file mode 100644 index 0000000000..ee9ac8f76f --- /dev/null +++ b/qcsrc/client/hud/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/client/hud/hud_config.qc b/qcsrc/client/hud/hud_config.qc index 07166105e5..e7d74cf3e5 100644 --- a/qcsrc/client/hud/hud_config.qc +++ b/qcsrc/client/hud/hud_config.qc @@ -60,7 +60,6 @@ void HUD_Panel_ExportCfg(string cfgname) { panel = hud_panels_from(i); - HUD_Write_PanelCvar(""); HUD_Write_PanelCvar("_pos"); HUD_Write_PanelCvar("_size"); HUD_Write_PanelCvar("_bg"); @@ -120,6 +119,7 @@ void HUD_Panel_ExportCfg(string cfgname) HUD_Write_PanelCvar("_progressbar_armor"); HUD_Write_PanelCvar("_progressbar_gfx"); HUD_Write_PanelCvar("_progressbar_gfx_smooth"); + HUD_Write_PanelCvar("_combined"); HUD_Write_PanelCvar("_text"); break; case HUD_PANEL_NOTIFY: diff --git a/qcsrc/client/hud/panel/_mod.inc b/qcsrc/client/hud/panel/_mod.inc index 2995164b91..5681474b84 100644 --- a/qcsrc/client/hud/panel/_mod.inc +++ b/qcsrc/client/hud/panel/_mod.inc @@ -1,20 +1,20 @@ // generated file; do not modify -#include "ammo.qc" -#include "centerprint.qc" -#include "chat.qc" -#include "engineinfo.qc" -#include "healtharmor.qc" -#include "infomessages.qc" -#include "minigame.qc" -#include "modicons.qc" -#include "notify.qc" -#include "physics.qc" -#include "powerups.qc" -#include "pressedkeys.qc" -#include "quickmenu.qc" -#include "racetimer.qc" -#include "radar.qc" -#include "score.qc" -#include "timer.qc" -#include "vote.qc" -#include "weapons.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/client/hud/panel/_mod.qh b/qcsrc/client/hud/panel/_mod.qh new file mode 100644 index 0000000000..930a3fe02b --- /dev/null +++ b/qcsrc/client/hud/panel/_mod.qh @@ -0,0 +1,20 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/client/hud/panel/healtharmor.qc b/qcsrc/client/hud/panel/healtharmor.qc index 3b03979177..8f279f2aad 100644 --- a/qcsrc/client/hud/panel/healtharmor.qc +++ b/qcsrc/client/hud/panel/healtharmor.qc @@ -74,7 +74,7 @@ void HUD_HealthArmor() int maxhealth = autocvar_hud_panel_healtharmor_maxhealth; int maxarmor = autocvar_hud_panel_healtharmor_maxarmor; - if(autocvar_hud_panel_healtharmor == 2) // combined health and armor display + if(autocvar_hud_panel_healtharmor_combined) // combined health and armor display { vector v; v = healtharmor_maxdamage(health, armor, armorblockpercent, DEATH_WEAPON.m_id); diff --git a/qcsrc/client/hud/panel/weapons.qc b/qcsrc/client/hud/panel/weapons.qc index c465caf4fd..cfacd59b60 100644 --- a/qcsrc/client/hud/panel/weapons.qc +++ b/qcsrc/client/hud/panel/weapons.qc @@ -19,6 +19,19 @@ int weaponorder_cmp(int i, int j, entity pass) return aj - ai; // the string is in REVERSE order (higher prio at the right is what we want, but higher prio first is the string) } +#define HUD_WEAPONS_GET_FULL_LAYOUT() MACRO_BEGIN { \ + int nHidden = 0; \ + FOREACH(Weapons, it != WEP_Null, { \ + if (weapons_stat & WepSet_FromWeapon(it)) continue; \ + if (it.spawnflags & WEP_FLAG_MUTATORBLOCKED) nHidden += 1; \ + }); \ + vector table_size = HUD_GetTableSize_BestItemAR((Weapons_COUNT - 1) - nHidden, panel_size, aspect); \ + columns = table_size.x; \ + rows = table_size.y; \ + weapon_size.x = panel_size.x / columns; \ + weapon_size.y = panel_size.y / rows; \ +} MACRO_END + void HUD_Weapons() { // declarations @@ -92,17 +105,35 @@ void HUD_Weapons() if(autocvar__hud_configure) { if(!weapons_stat) - for(i = WEP_FIRST; i <= WEP_LAST; i += floor((WEP_LAST-WEP_FIRST)/5)) - weapons_stat |= WepSet_FromWeapon(Weapons_from(i)); + { + int j = 0; + FOREACH(Weapons, it != WEP_Null && it.impulse >= 0 && (it.impulse % 3 != 0) && j < 6, { + if(!(it.spawnflags & WEP_FLAG_MUTATORBLOCKED)) + { + weapons_stat |= it.m_wepset; + ++j; + } + }); + } #if 0 /// debug code if(cvar("wep_add")) { + int j; + int nHidden = 0; + FOREACH(Weapons, it != WEP_Null, { + if (it.spawnflags & WEP_FLAG_MUTATORBLOCKED) nHidden += 1; + }); weapons_stat = '0 0 0'; - float countw = 1 + floor((floor(time * cvar("wep_add"))) % (Weapons_COUNT - 1)); - for(i = WEP_FIRST; i <= countw; ++i) - weapons_stat |= WepSet_FromWeapon(Weapons_from(i)); + float countw = 1 + floor((floor(time * cvar("wep_add"))) % ((Weapons_COUNT - 1) - nHidden)); + for(i = 0, j = 0; i <= (Weapons_COUNT - 1) && j < countw; ++i) + { + if(weaponorder[i].spawnflags & WEP_FLAG_MUTATORBLOCKED) + continue; + weapons_stat |= weaponorder[i].m_wepset; + ++j; + } } #endif } @@ -128,40 +159,29 @@ void HUD_Weapons() return; vector old_panel_size = panel_size; - vector padded_panel_size = panel_size - '2 2 0' * panel_bg_padding; - - // get the all-weapons layout - int nHidden = 0; - WepSet weapons_stat = WepSet_GetFromStat(); - FOREACH(Weapons, it != WEP_Null, { - if (weapons_stat & it.m_wepset) continue; - if (it.spawnflags & WEP_FLAG_MUTATORBLOCKED) nHidden += 1; - }); - vector table_size = HUD_GetTableSize_BestItemAR((Weapons_COUNT - 1) - nHidden, padded_panel_size, aspect); - columns = table_size.x; - rows = table_size.y; - weapon_size.x = padded_panel_size.x / columns; - weapon_size.y = padded_panel_size.y / rows; + panel_size -= '2 2 0' * panel_bg_padding; + + HUD_WEAPONS_GET_FULL_LAYOUT(); // NOTE: although weapons should aways look the same even if onlyowned is enabled, // we enlarge them a bit when possible to better match the desired aspect ratio - if(padded_panel_size.x / padded_panel_size.y < aspect) + if(panel_size.x / panel_size.y < aspect) { // maximum number of rows that allows to display items with the desired aspect ratio - int max_rows = floor(padded_panel_size.y / (weapon_size.x / aspect)); + int max_rows = floor(panel_size.y / (weapon_size.x / aspect)); columns = min(columns, ceil(weapon_count / max_rows)); rows = ceil(weapon_count / columns); - weapon_size.y = min(padded_panel_size.y / rows, weapon_size.x / aspect); - weapon_size.x = min(padded_panel_size.x / columns, aspect * weapon_size.y); + weapon_size.y = min(panel_size.y / rows, weapon_size.x / aspect); + weapon_size.x = min(panel_size.x / columns, aspect * weapon_size.y); vertical_order = false; } else { - int max_columns = floor(padded_panel_size.x / (weapon_size.y * aspect)); + int max_columns = floor(panel_size.x / (weapon_size.y * aspect)); rows = min(rows, ceil(weapon_count / max_columns)); columns = ceil(weapon_count / rows); - weapon_size.x = min(padded_panel_size.x / columns, aspect * weapon_size.y); - weapon_size.y = min(padded_panel_size.y / rows, weapon_size.x / aspect); + weapon_size.x = min(panel_size.x / columns, aspect * weapon_size.y); + weapon_size.y = min(panel_size.y / rows, weapon_size.x / aspect); vertical_order = true; } @@ -285,7 +305,7 @@ void HUD_Weapons() HUD_Panel_DrawBg(1); if(center.x == -1) - return; + return; // panel has gone off screen if(panel_bg_padding) { @@ -297,11 +317,7 @@ void HUD_Weapons() if(!rows) // if rows is > 0 onlyowned code has already updated these vars { - vector table_size = HUD_GetTableSize_BestItemAR((Weapons_COUNT - 1), panel_size, aspect); - columns = table_size.x; - rows = table_size.y; - weapon_size.x = panel_size.x / columns; - weapon_size.y = panel_size.y / rows; + HUD_WEAPONS_GET_FULL_LAYOUT(); vertical_order = (panel_size.x / panel_size.y >= aspect); } @@ -340,15 +356,21 @@ void HUD_Weapons() // retrieve information about the current weapon to be drawn entity it = weaponorder[i]; weapon_id = it.impulse; - isCurrent = (it == switchweapon); // skip if this weapon doesn't exist if(!it || weapon_id < 0) { continue; } // skip this weapon if we don't own it (and onlyowned is enabled)-- or if weapons_complainbubble is showing for this weapon if(autocvar_hud_panel_weapons_onlyowned) - if (!((weapons_stat & WepSet_FromWeapon(it)) || (it.m_id == complain_weapon))) - continue; + { + if (!((weapons_stat & WepSet_FromWeapon(it)) || (it.m_id == complain_weapon))) + continue; + } + else + { + if (it.spawnflags & WEP_FLAG_MUTATORBLOCKED && !(weapons_stat & WepSet_FromWeapon(it))) + continue; + } // figure out the drawing position of weapon weapon_pos = (panel_pos + eX * column * weapon_size.x + eY * row * weapon_size.y); @@ -356,6 +378,7 @@ void HUD_Weapons() noncurrent_pos.y = weapon_pos.y + (weapon_size.y - noncurrent_size.y) / 2; // draw background behind currently selected weapon + isCurrent = (it == switchweapon); if(isCurrent) drawpic_aspect_skin(weapon_pos, "weapon_current_bg", weapon_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); diff --git a/qcsrc/client/main.qc b/qcsrc/client/main.qc index 98b266c6d1..7cbe6e125f 100644 --- a/qcsrc/client/main.qc +++ b/qcsrc/client/main.qc @@ -213,7 +213,7 @@ void Shutdown() } deactivate_minigame(); - HUD_MinigameMenu_Close(); + HUD_MinigameMenu_Close(NULL, NULL, NULL); } .float has_team; diff --git a/qcsrc/client/mutators/_mod.qh b/qcsrc/client/mutators/_mod.qh new file mode 100644 index 0000000000..98fb4815c1 --- /dev/null +++ b/qcsrc/client/mutators/_mod.qh @@ -0,0 +1 @@ +// generated file; do not modify diff --git a/qcsrc/client/progs.inc b/qcsrc/client/progs.inc index 8817a2c71b..a736d32622 100644 --- a/qcsrc/client/progs.inc +++ b/qcsrc/client/progs.inc @@ -1,7 +1,7 @@ #include #include "_all.qh" -#include "_mod.inc" +#include "../client/_mod.inc" #include "commands/_mod.inc" #include "hud/_mod.inc" #include "mutators/_mod.inc" diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index 7dcf987698..cf43e7c1d5 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -303,16 +303,24 @@ void Cmd_HUD_Help() "other gamemodes except DM.\n")); } -#define HUD_DefaultColumnLayout() \ -"ping pl name | " \ -"-teams,cts,lms/kills +ft,tdm/kills -teams,lms/deaths +ft,tdm/deaths -teams,lms,rc,ka/suicides +ft,tdm/suicides -cts,dm,tdm,ka,ft/frags " /* tdm already has this in "score" */ \ -"-rc,cts,nb/dmg -rc,cts,nb/dmgtaken " \ -"+ctf/caps +ctf/pickups +ctf/fckills +ctf/returns +ons/caps +ons/takes " \ -"+lms/lives +lms/rank " \ -"+kh/caps +kh/pushes +kh/destroyed " \ -"?+rc/laps ?+rc/time ?+rc/fastest " \ -"+as/objectives +nb/faults +nb/goals +ka/pickups +ka/bckills +ka/bctime +ft/revivals " \ -"-lms,rc,nb/score" +// NOTE: adding a gametype with ? to not warn for an optional field +// make sure it's excluded in a previous exclusive rule, if any +// otherwise the previous exclusive rule warns anyway +// e.g. -teams,rc,cts,lms/kills ?+rc/kills +#define SCOREBOARD_DEFAULT_COLUMNS \ +"ping pl name |" \ +" -teams,rc,cts,inv,lms/kills +ft,tdm/kills ?+rc,inv/kills" \ +" -teams,lms/deaths +ft,tdm/deaths" \ +" -teams,lms,rc,cts,inv,ka/suicides +ft,tdm/suicides ?+rc,inv/suicides" \ +" -cts,dm,tdm,ka,ft/frags" /* tdm already has this in "score" */ \ +" -rc,cts,nb/dmg -rc,cts,nb/dmgtaken" \ +" +ctf/caps +ctf/pickups +ctf/fckills +ctf/returns +ons/caps +ons/takes" \ +" +lms/lives +lms/rank" \ +" +kh/caps +kh/pushes +kh/destroyed" \ +" ?+rc/laps ?+rc/time +rc,cts/fastest" \ +" +as/objectives +nb/faults +nb/goals" \ +" +ka/pickups +ka/bckills +ka/bctime +ft/revivals" \ +" -lms,rc,cts,inv,nb/score" void Cmd_HUD_SetFields(int argc) { @@ -337,12 +345,12 @@ void Cmd_HUD_SetFields(int argc) argc = tokenizebyseparator(strcat("0 1 ", autocvar_scoreboard_columns), " "); if(argc < 3) - argc = tokenizebyseparator(strcat("0 1 ", HUD_DefaultColumnLayout()), " "); + argc = tokenizebyseparator(strcat("0 1 ", SCOREBOARD_DEFAULT_COLUMNS), " "); if(argc == 3) { if(argv(2) == "default") - argc = tokenizebyseparator(strcat("0 1 ", HUD_DefaultColumnLayout()), " "); + argc = tokenizebyseparator(strcat("0 1 ", SCOREBOARD_DEFAULT_COLUMNS), " "); else if(argv(2) == "all") { string s; @@ -397,7 +405,6 @@ void Cmd_HUD_SetFields(int argc) { case "ping": hud_field[hud_num_fields] = SP_PING; break; case "pl": hud_field[hud_num_fields] = SP_PL; break; - case "pl": hud_field[hud_num_fields] = SP_PL; break; case "kd": case "kdr": case "kdratio": case "k/d": hud_field[hud_num_fields] = SP_KDRATIO; break; case "sum": case "diff": case "k-d": hud_field[hud_num_fields] = SP_SUM; break; case "name": case "nick": hud_field[hud_num_fields] = SP_NAME; have_name = true; break; diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index f1b7a9be5e..4537e56a44 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -309,7 +309,7 @@ void viewmodel_draw(entity this) this.viewmodel_angles = this.angles; } anim_update(this); - if (!this.animstate_override) + if (!this.animstate_override && !this.animstate_looping) anim_set(this, this.anim_idle, true, false, false); } float f = 0; // 0..1; 0: fully active @@ -1309,6 +1309,7 @@ void HUD_Crosshair() void HUD_Draw() { + if(!intermission) if (MUTATOR_CALLHOOK(HUD_Draw_overlay)) { drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, MUTATOR_ARGV(0, vector), autocvar_hud_colorflash_alpha * MUTATOR_ARGV(0, float), DRAWFLAG_ADDITIVE); diff --git a/qcsrc/client/weapons/_mod.inc b/qcsrc/client/weapons/_mod.inc index 005158a278..5fb71ce1ee 100644 --- a/qcsrc/client/weapons/_mod.inc +++ b/qcsrc/client/weapons/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "projectile.qc" +#include diff --git a/qcsrc/client/weapons/_mod.qh b/qcsrc/client/weapons/_mod.qh new file mode 100644 index 0000000000..f72a914c66 --- /dev/null +++ b/qcsrc/client/weapons/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/_mod.inc b/qcsrc/common/_mod.inc index 0503213ce6..90edfa6185 100644 --- a/qcsrc/common/_mod.inc +++ b/qcsrc/common/_mod.inc @@ -1,13 +1,13 @@ // generated file; do not modify -#include "anim.qc" -#include "animdecide.qc" -#include "campaign_file.qc" -#include "campaign_setup.qc" -#include "ent_cs.qc" -#include "mapinfo.qc" -#include "net_notice.qc" -#include "playerstats.qc" -#include "state.qc" -#include "t_items.qc" -#include "util.qc" -#include "viewloc.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/_mod.qh b/qcsrc/common/_mod.qh new file mode 100644 index 0000000000..e32b270e08 --- /dev/null +++ b/qcsrc/common/_mod.qh @@ -0,0 +1,13 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/command/_mod.inc b/qcsrc/common/command/_mod.inc index 57ff3f7786..d2d24f03d9 100644 --- a/qcsrc/common/command/_mod.inc +++ b/qcsrc/common/command/_mod.inc @@ -1,5 +1,5 @@ // generated file; do not modify -#include "all.qc" -#include "generic.qc" -#include "markup.qc" -#include "rpn.qc" +#include +#include +#include +#include diff --git a/qcsrc/common/command/_mod.qh b/qcsrc/common/command/_mod.qh new file mode 100644 index 0000000000..440bdcb134 --- /dev/null +++ b/qcsrc/common/command/_mod.qh @@ -0,0 +1,5 @@ +// generated file; do not modify +#include +#include +#include +#include diff --git a/qcsrc/common/deathtypes/_mod.inc b/qcsrc/common/deathtypes/_mod.inc index 254d13d7e2..71f1dcb0f2 100644 --- a/qcsrc/common/deathtypes/_mod.inc +++ b/qcsrc/common/deathtypes/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "all.qc" +#include diff --git a/qcsrc/common/deathtypes/_mod.qh b/qcsrc/common/deathtypes/_mod.qh new file mode 100644 index 0000000000..cca282a1eb --- /dev/null +++ b/qcsrc/common/deathtypes/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/effects/_mod.inc b/qcsrc/common/effects/_mod.inc index 25e9062752..6975259c17 100644 --- a/qcsrc/common/effects/_mod.inc +++ b/qcsrc/common/effects/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "all.qc" -#include "effectinfo.qc" +#include +#include diff --git a/qcsrc/common/effects/_mod.qh b/qcsrc/common/effects/_mod.qh new file mode 100644 index 0000000000..3f5ed82198 --- /dev/null +++ b/qcsrc/common/effects/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/common/effects/qc/_mod.inc b/qcsrc/common/effects/qc/_mod.inc index fc5a14fa02..befcce83d8 100644 --- a/qcsrc/common/effects/qc/_mod.inc +++ b/qcsrc/common/effects/qc/_mod.inc @@ -1,8 +1,8 @@ // generated file; do not modify -#include "all.qc" -#include "casings.qc" -#include "damageeffects.qc" -#include "gibs.qc" -#include "globalsound.qc" -#include "lightningarc.qc" -#include "modeleffects.qc" +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/effects/qc/_mod.qh b/qcsrc/common/effects/qc/_mod.qh new file mode 100644 index 0000000000..91298f3124 --- /dev/null +++ b/qcsrc/common/effects/qc/_mod.qh @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/gamemodes/_mod.inc b/qcsrc/common/gamemodes/_mod.inc index 254d13d7e2..0b779498b1 100644 --- a/qcsrc/common/gamemodes/_mod.inc +++ b/qcsrc/common/gamemodes/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "all.qc" +#include diff --git a/qcsrc/common/gamemodes/_mod.qh b/qcsrc/common/gamemodes/_mod.qh new file mode 100644 index 0000000000..a7b7a54af4 --- /dev/null +++ b/qcsrc/common/gamemodes/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/gamemodes/gamemode/_mod.qh b/qcsrc/common/gamemodes/gamemode/_mod.qh new file mode 100644 index 0000000000..98fb4815c1 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/_mod.qh @@ -0,0 +1 @@ +// generated file; do not modify diff --git a/qcsrc/common/gamemodes/gamemode/nexball/_mod.inc b/qcsrc/common/gamemodes/gamemode/nexball/_mod.inc index 3e72142ab4..f48ef74501 100644 --- a/qcsrc/common/gamemodes/gamemode/nexball/_mod.inc +++ b/qcsrc/common/gamemodes/gamemode/nexball/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "nexball.qc" -#include "weapon.qc" +#include +#include diff --git a/qcsrc/common/gamemodes/gamemode/nexball/_mod.qh b/qcsrc/common/gamemodes/gamemode/nexball/_mod.qh new file mode 100644 index 0000000000..4ac2347c5d --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/nexball/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/common/gamemodes/gamemode/nexball/nexball.qc b/qcsrc/common/gamemodes/gamemode/nexball/nexball.qc index 1d500c1a6d..390212d066 100644 --- a/qcsrc/common/gamemodes/gamemode/nexball/nexball.qc +++ b/qcsrc/common/gamemodes/gamemode/nexball/nexball.qc @@ -1095,7 +1095,7 @@ REGISTER_MUTATOR(nb, g_nexball) WEP_NEXBALL.spawnflags &= ~WEP_FLAG_MUTATORBLOCKED; ActivateTeamplay(); - SetLimits(autocvar_g_nexball_goallimit, autocvar_g_nexball_goalleadlimit, -1, -1); + SetLimits(autocvar_g_nexball_goallimit, autocvar_g_nexball_goalleadlimit, autocvar_timelimit_override, -1); have_team_spawns = -1; // request team spawns } diff --git a/qcsrc/common/gamemodes/gamemode/onslaught/_mod.inc b/qcsrc/common/gamemodes/gamemode/onslaught/_mod.inc index d1aac78ed1..334eb561ee 100644 --- a/qcsrc/common/gamemodes/gamemode/onslaught/_mod.inc +++ b/qcsrc/common/gamemodes/gamemode/onslaught/_mod.inc @@ -1,6 +1,6 @@ // generated file; do not modify -#include "cl_controlpoint.qc" -#include "cl_generator.qc" -#include "onslaught.qc" -#include "sv_controlpoint.qc" -#include "sv_generator.qc" +#include +#include +#include +#include +#include diff --git a/qcsrc/common/gamemodes/gamemode/onslaught/_mod.qh b/qcsrc/common/gamemodes/gamemode/onslaught/_mod.qh new file mode 100644 index 0000000000..e895495581 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/onslaught/_mod.qh @@ -0,0 +1,6 @@ +// generated file; do not modify +#include +#include +#include +#include +#include diff --git a/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc b/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc index 5271beba1f..bb302998f2 100644 --- a/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc +++ b/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc @@ -13,7 +13,7 @@ REGISTER_MUTATOR(ons, false) ons_Initialize(); ActivateTeamplay(); - SetLimits(autocvar_g_onslaught_point_limit, -1, -1, -1); + SetLimits(autocvar_g_onslaught_point_limit, autocvar_leadlimit_override, autocvar_timelimit_override, -1); have_team_spawns = -1; // request team spawns } @@ -546,10 +546,7 @@ void ons_ControlPoint_Icon_Damage(entity this, entity inflictor, entity attacker onslaught_updatelinks(); // Use targets now (somebody make sure this is in the right place..) - setself(this.owner); - activator = this; - WITHSELF(this, SUB_UseTargets()); - setself(this); + SUB_UseTargets(this.owner, this, NULL); this.owner.waslinked = this.owner.islinked; if(this.owner.model != "models/onslaught/controlpoint_pad.md3") @@ -611,10 +608,7 @@ void ons_ControlPoint_Icon_Think() if(!self.owner.islinked) self.owner.team = 0; - setself(self.owner); - activator = self; - SUB_UseTargets (); - setself(this); + SUB_UseTargets(self.owner, self, NULL); self.owner.team = t; @@ -676,10 +670,7 @@ void ons_ControlPoint_Icon_BuildThink() onslaught_updatelinks(); // Use targets now (somebody make sure this is in the right place..) - setself(self.owner); - activator = self; - SUB_UseTargets (); - setself(this); + SUB_UseTargets(self.owner, self, NULL); self.SendFlags |= CPSF_SETUP; } @@ -849,8 +840,7 @@ void ons_ControlPoint_Reset(entity this) onslaught_updatelinks(); - activator = this; - SUB_UseTargets(); // to reset the structures, playerspawns etc. + SUB_UseTargets(this, this, NULL); // to reset the structures, playerspawns etc. CSQCMODEL_AUTOUPDATE(this); } @@ -1953,23 +1943,22 @@ MUTATOR_HOOKFUNCTION(ons, MonsterMove) void ons_MonsterSpawn_Delayed(entity this) { - entity e, own = self.owner; + entity own = self.owner; - if(!own) { remove(self); return; } + if(!own) { remove(this); return; } if(own.targetname) { - e = find(world, target, own.targetname); + entity e = find(world, target, own.targetname); if(e != world) { own.team = e.team; - activator = e; - own.use(); + own.use(own, e, NULL); } } - remove(self); + remove(this); } MUTATOR_HOOKFUNCTION(ons, MonsterSpawn) @@ -1983,20 +1972,19 @@ MUTATOR_HOOKFUNCTION(ons, MonsterSpawn) void ons_TurretSpawn_Delayed(entity this) { - entity e, own = self.owner; + entity own = self.owner; if(!own) { remove(self); return; } if(own.targetname) { - e = find(world, target, own.targetname); + entity e = find(world, target, own.targetname); if(e != world) { own.team = e.team; own.active = ACTIVE_NOT; - activator = e; - own.use(); + own.use(own, e, NULL); } } diff --git a/qcsrc/common/impulses/_mod.inc b/qcsrc/common/impulses/_mod.inc index 254d13d7e2..330c0374e8 100644 --- a/qcsrc/common/impulses/_mod.inc +++ b/qcsrc/common/impulses/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "all.qc" +#include diff --git a/qcsrc/common/impulses/_mod.qh b/qcsrc/common/impulses/_mod.qh new file mode 100644 index 0000000000..9f8a7b336a --- /dev/null +++ b/qcsrc/common/impulses/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/items/_mod.inc b/qcsrc/common/items/_mod.inc index 254d13d7e2..3b5dd9550f 100644 --- a/qcsrc/common/items/_mod.inc +++ b/qcsrc/common/items/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "all.qc" +#include diff --git a/qcsrc/common/items/_mod.qh b/qcsrc/common/items/_mod.qh new file mode 100644 index 0000000000..158814c557 --- /dev/null +++ b/qcsrc/common/items/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/items/item/_mod.inc b/qcsrc/common/items/item/_mod.inc index 453cead661..2540116430 100644 --- a/qcsrc/common/items/item/_mod.inc +++ b/qcsrc/common/items/item/_mod.inc @@ -1,7 +1,7 @@ // generated file; do not modify -#include "ammo.qc" -#include "armor.qc" -#include "health.qc" -#include "jetpack.qc" -#include "pickup.qc" -#include "powerup.qc" +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/items/item/_mod.qh b/qcsrc/common/items/item/_mod.qh new file mode 100644 index 0000000000..4539e0f35d --- /dev/null +++ b/qcsrc/common/items/item/_mod.qh @@ -0,0 +1,7 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/minigames/_mod.inc b/qcsrc/common/minigames/_mod.inc index 47690d32b9..43ad69de59 100644 --- a/qcsrc/common/minigames/_mod.inc +++ b/qcsrc/common/minigames/_mod.inc @@ -1,5 +1,9 @@ // generated file; do not modify -#include "cl_minigames.qc" -#include "cl_minigames_hud.qc" -#include "minigames.qc" -#include "sv_minigames.qc" +#include +#include +#ifdef CSQC + #include +#endif +#ifdef SVQC + #include +#endif diff --git a/qcsrc/common/minigames/_mod.qh b/qcsrc/common/minigames/_mod.qh new file mode 100644 index 0000000000..36f5de2f15 --- /dev/null +++ b/qcsrc/common/minigames/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/common/minigames/cl_minigames.qc b/qcsrc/common/minigames/cl_minigames.qc index 6f7e7c3ae9..f080e90d06 100644 --- a/qcsrc/common/minigames/cl_minigames.qc +++ b/qcsrc/common/minigames/cl_minigames.qc @@ -98,7 +98,7 @@ void deactivate_minigame() if ( auto_close_minigamemenu ) { - HUD_MinigameMenu_Close(); + HUD_MinigameMenu_Close(NULL, NULL, NULL); auto_close_minigamemenu = 0; } else @@ -393,7 +393,7 @@ MUTATOR_HOOKFUNCTION(minigames, HUD_Command) if(argv(1) == "minigame") { if (HUD_MinigameMenu_IsOpened()) - HUD_MinigameMenu_Close(); + HUD_MinigameMenu_Close(NULL, NULL, NULL); else HUD_MinigameMenu_Open(); return true; diff --git a/qcsrc/common/minigames/cl_minigames.qh b/qcsrc/common/minigames/cl_minigames.qh index e3c7df18f3..4359dba226 100644 --- a/qcsrc/common/minigames/cl_minigames.qh +++ b/qcsrc/common/minigames/cl_minigames.qh @@ -100,7 +100,7 @@ void minigame_cmd_workaround(float dummy, string...cmdargc); void minigame_prompt(); float HUD_MinigameMenu_IsOpened(); -void HUD_MinigameMenu_Close(); +void HUD_MinigameMenu_Close(entity this, entity actor, entity trigger); float HUD_Minigame_Showpanels(); // Adds a game-specific entry to the menu void HUD_MinigameMenu_CustomEntry(entity parent, string message, string event_arg); diff --git a/qcsrc/common/minigames/cl_minigames_hud.qc b/qcsrc/common/minigames/cl_minigames_hud.qc index ca2a0ed17c..56cae3c228 100644 --- a/qcsrc/common/minigames/cl_minigames_hud.qc +++ b/qcsrc/common/minigames/cl_minigames_hud.qc @@ -112,10 +112,10 @@ entity HUD_MinigameMenu_activeitem; // Click the given item void HUD_MinigameMenu_Click(entity menuitem) -{SELFPARAM(); +{ if ( menuitem ) { - WITHSELF(menuitem, menuitem.use()); + menuitem.use(menuitem, NULL, NULL); } } @@ -146,7 +146,7 @@ void HUD_MinigameMenu_EraseEntry ( entity e ) } // Minigame menu options: create entry -entity HUD_MinigameMenu_SpawnEntry(string s, vector offset, vector fontsize, vector color,void() click) +entity HUD_MinigameMenu_SpawnEntry(string s, vector offset, vector fontsize, vector color,void(entity, entity, entity) click) { entity entry = spawn(); entry.message = s; @@ -160,7 +160,7 @@ entity HUD_MinigameMenu_SpawnEntry(string s, vector offset, vector fontsize, vec } // Spawn a child entry of a collapsable entry -entity HUD_MinigameMenu_SpawnSubEntry(string s, void() click, entity parent) +entity HUD_MinigameMenu_SpawnSubEntry(string s, void(entity, entity, entity) click, entity parent) { vector item_fontsize = hud_fontsize*1.25; vector item_offset = '1 0 0' * item_fontsize_x; @@ -171,43 +171,43 @@ entity HUD_MinigameMenu_SpawnSubEntry(string s, void() click, entity parent) } // Click action for Create sub-entries -void HUD_MinigameMenu_ClickCreate_Entry() -{SELFPARAM(); - minigame_cmd("create ",self.netname); +void HUD_MinigameMenu_ClickCreate_Entry(entity this, entity actor, entity trigger) +{ + minigame_cmd("create ", this.netname); } // Helper click action for collapsible entries // returns true when you have to create the sub-entries -bool HUD_MinigameMenu_Click_ExpandCollapse() -{SELFPARAM(); +bool HUD_MinigameMenu_Click_ExpandCollapse(entity this) +{ entity e; - if ( self.flags & 2 ) + if ( this.flags & 2 ) { if ( HUD_MinigameMenu_activeitem && - HUD_MinigameMenu_activeitem.owner == self ) + HUD_MinigameMenu_activeitem.owner == this ) HUD_MinigameMenu_activeitem = world; - self.flags &= ~2; - for ( e = self.list_next; e != world && e.owner == self; e = self.list_next ) + this.flags &= ~2; + for ( e = this.list_next; e != world && e.owner == this; e = this.list_next ) { if ( e.flags & 2 ) HUD_MinigameMenu_Click(e); - self.list_next = e.list_next; + this.list_next = e.list_next; remove(e); } - if ( self.list_next ) - self.list_next.list_prev = self; + if ( this.list_next ) + this.list_next.list_prev = this; else - HUD_MinigameMenu_last_entry = self; + HUD_MinigameMenu_last_entry = this; } else { for ( e = HUD_MinigameMenu_entries; e != world; e = e.list_next ) { - if ( e.flags & 2 && e.origin_x == self.origin_x) + if ( e.flags & 2 && e.origin_x == this.origin_x) HUD_MinigameMenu_Click(e); } - self.flags |= 2; + this.flags |= 2; return true; } @@ -215,14 +215,14 @@ bool HUD_MinigameMenu_Click_ExpandCollapse() } // Click action for the Create menu -void HUD_MinigameMenu_ClickCreate() -{SELFPARAM(); - if ( HUD_MinigameMenu_Click_ExpandCollapse() ) +void HUD_MinigameMenu_ClickCreate(entity this, entity actor, entity trigger) +{ + if ( HUD_MinigameMenu_Click_ExpandCollapse(this) ) { entity curr; - entity prev = self; + entity prev = this; FOREACH(Minigames, true, { - curr = HUD_MinigameMenu_SpawnSubEntry(it.message, HUD_MinigameMenu_ClickCreate_Entry, self); + curr = HUD_MinigameMenu_SpawnSubEntry(it.message, HUD_MinigameMenu_ClickCreate_Entry, this); curr.netname = it.netname; curr.model = strzone(minigame_texture(strcat(it.netname,"/icon"))); HUD_MinigameMenu_InsertEntry( curr, prev ); @@ -232,26 +232,26 @@ void HUD_MinigameMenu_ClickCreate() } // Click action for Join sub-entries -void HUD_MinigameMenu_ClickJoin_Entry() -{SELFPARAM(); - minigame_cmd("join ",self.netname); - HUD_MinigameMenu_EraseEntry(self); +void HUD_MinigameMenu_ClickJoin_Entry(entity this, entity actor, entity trigger) +{ + minigame_cmd("join ",this.netname); + HUD_MinigameMenu_EraseEntry(this); } // Click action for the Join menu -void HUD_MinigameMenu_ClickJoin() -{SELFPARAM(); - if ( HUD_MinigameMenu_Click_ExpandCollapse() ) +void HUD_MinigameMenu_ClickJoin(entity this, entity actor, entity trigger) +{ + if ( HUD_MinigameMenu_Click_ExpandCollapse(this) ) { entity e = world; entity curr; - entity prev = self; + entity prev = this; while( (e = find(e,classname,"minigame")) ) { if ( e != active_minigame ) { curr = HUD_MinigameMenu_SpawnSubEntry( - e.netname, HUD_MinigameMenu_ClickJoin_Entry, self ); + e.netname, HUD_MinigameMenu_ClickJoin_Entry, this ); curr.netname = e.netname; curr.model = strzone(minigame_texture(strcat(e.descriptor.netname,"/icon"))); HUD_MinigameMenu_InsertEntry( curr, prev ); @@ -268,22 +268,22 @@ void HUD_MinigameMenu_ClickNoop() }*/ // Click action for Quit -void HUD_MinigameMenu_ClickQuit() +void HUD_MinigameMenu_ClickQuit(entity this, entity actor, entity trigger) { deactivate_minigame(); minigame_cmd("end"); } // Click action for Invite sub-entries -void HUD_MinigameMenu_ClickInvite_Entry() -{SELFPARAM(); - minigame_cmd("invite #",self.netname); +void HUD_MinigameMenu_ClickInvite_Entry(entity this, entity actor, entity trigger) +{ + minigame_cmd("invite #",this.netname); } // Click action for the Invite menu -void HUD_MinigameMenu_ClickInvite() -{SELFPARAM(); - if ( HUD_MinigameMenu_Click_ExpandCollapse() ) +void HUD_MinigameMenu_ClickInvite(entity this, entity actor, entity trigger) +{ + if ( HUD_MinigameMenu_Click_ExpandCollapse(this) ) { entity e; entity prev = self; @@ -305,10 +305,10 @@ void HUD_MinigameMenu_ClickInvite() } } -void HUD_MinigameMenu_ClickCustomEntry() -{SELFPARAM(); +void HUD_MinigameMenu_ClickCustomEntry(entity this, entity actor, entity trigger) +{ if ( active_minigame ) - active_minigame.minigame_event(active_minigame,"menu_click",self.netname); + active_minigame.minigame_event(active_minigame,"menu_click",this.netname); } // Adds a game-specific entry to the menu @@ -322,17 +322,17 @@ void HUD_MinigameMenu_CustomEntry(entity parent, string menumessage, string even } // Click action for the Current Game menu -void HUD_MinigameMenu_ClickCurrentGame() -{SELFPARAM(); - if ( HUD_MinigameMenu_Click_ExpandCollapse() ) +void HUD_MinigameMenu_ClickCurrentGame(entity this, entity actor, entity trigger) +{ + if ( HUD_MinigameMenu_Click_ExpandCollapse(this) ) { HUD_MinigameMenu_InsertEntry( HUD_MinigameMenu_SpawnSubEntry( - _("Quit"), HUD_MinigameMenu_ClickQuit, self ), self); + _("Quit"), HUD_MinigameMenu_ClickQuit, this ), this); - active_minigame.minigame_event(active_minigame,"menu_show",self); + active_minigame.minigame_event(active_minigame,"menu_show",this); HUD_MinigameMenu_InsertEntry( HUD_MinigameMenu_SpawnSubEntry( - _("Invite"), HUD_MinigameMenu_ClickInvite, self), self); + _("Invite"), HUD_MinigameMenu_ClickInvite, this), this); } } // Whether the minigame menu panel is open @@ -342,7 +342,7 @@ bool HUD_MinigameMenu_IsOpened() } // Close the minigame menu panel -void HUD_MinigameMenu_Close() +void HUD_MinigameMenu_Close(entity this, entity actor, entity trigger) { if ( HUD_MinigameMenu_IsOpened() ) { @@ -665,7 +665,7 @@ float HUD_Minigame_InputEvent(float bInputType, float nPrimary, float nSecondary } else if ( nPrimary == K_ESCAPE ) { - HUD_MinigameMenu_Close(); + HUD_MinigameMenu_Close(NULL, NULL, NULL); return true; } } diff --git a/qcsrc/common/minigames/minigame/_mod.inc b/qcsrc/common/minigames/minigame/_mod.inc index f53fc0b657..0ccb46c9f5 100644 --- a/qcsrc/common/minigames/minigame/_mod.inc +++ b/qcsrc/common/minigames/minigame/_mod.inc @@ -1,9 +1,9 @@ // generated file; do not modify -#include "bd.qc" -#include "c4.qc" -#include "nmm.qc" -#include "pong.qc" -#include "pp.qc" -#include "ps.qc" -#include "snake.qc" -#include "ttt.qc" +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/minigames/minigame/_mod.qh b/qcsrc/common/minigames/minigame/_mod.qh new file mode 100644 index 0000000000..5098420f00 --- /dev/null +++ b/qcsrc/common/minigames/minigame/_mod.qh @@ -0,0 +1,9 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/models/_mod.qh b/qcsrc/common/models/_mod.qh new file mode 100644 index 0000000000..98fb4815c1 --- /dev/null +++ b/qcsrc/common/models/_mod.qh @@ -0,0 +1 @@ +// generated file; do not modify diff --git a/qcsrc/common/monsters/_mod.inc b/qcsrc/common/monsters/_mod.inc index 8dff76f695..f9d80b3f4e 100644 --- a/qcsrc/common/monsters/_mod.inc +++ b/qcsrc/common/monsters/_mod.inc @@ -1,4 +1,4 @@ // generated file; do not modify -#include "all.qc" -#include "spawn.qc" -#include "sv_monsters.qc" +#include +#include +#include diff --git a/qcsrc/common/monsters/_mod.qh b/qcsrc/common/monsters/_mod.qh new file mode 100644 index 0000000000..48427f94f7 --- /dev/null +++ b/qcsrc/common/monsters/_mod.qh @@ -0,0 +1,4 @@ +// generated file; do not modify +#include +#include +#include diff --git a/qcsrc/common/monsters/monster/_mod.inc b/qcsrc/common/monsters/monster/_mod.inc index 6b8a307db6..23e649ab87 100644 --- a/qcsrc/common/monsters/monster/_mod.inc +++ b/qcsrc/common/monsters/monster/_mod.inc @@ -1,6 +1,6 @@ // generated file; do not modify -#include "mage.qc" -#include "shambler.qc" -#include "spider.qc" -#include "wyvern.qc" -#include "zombie.qc" +#include +#include +#include +#include +#include diff --git a/qcsrc/common/monsters/monster/_mod.qh b/qcsrc/common/monsters/monster/_mod.qh new file mode 100644 index 0000000000..a1c048d0f4 --- /dev/null +++ b/qcsrc/common/monsters/monster/_mod.qh @@ -0,0 +1,6 @@ +// generated file; do not modify +#include +#include +#include +#include +#include diff --git a/qcsrc/common/monsters/monster/shambler.qc b/qcsrc/common/monsters/monster/shambler.qc index 3cfa18cdf4..139967a2cc 100644 --- a/qcsrc/common/monsters/monster/shambler.qc +++ b/qcsrc/common/monsters/monster/shambler.qc @@ -105,6 +105,11 @@ void M_Shambler_Attack_Lightning_Explode() self.nextthink = time + 0.2; } +void M_Shambler_Attack_Lightning_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, M_Shambler_Attack_Lightning_Explode()); +} + void M_Shambler_Attack_Lightning_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { if (this.health <= 0) @@ -116,14 +121,14 @@ void M_Shambler_Attack_Lightning_Damage(entity this, entity inflictor, entity at this.health = this.health - damage; if (this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, this.use)); + W_PrepareExplosionByDamage(this, attacker, adaptor_think2use); } void M_Shambler_Attack_Lightning_Touch() {SELFPARAM(); PROJECTILE_TOUCH; - self.use (); + self.use(this, NULL, NULL); } void M_Shambler_Attack_Lightning_Think() @@ -157,7 +162,7 @@ void M_Shambler_Attack_Lightning(entity this) gren.cnt = time + 5; gren.nextthink = time; gren.think = M_Shambler_Attack_Lightning_Think; - gren.use = M_Shambler_Attack_Lightning_Explode; + gren.use = M_Shambler_Attack_Lightning_Explode_use; gren.touch = M_Shambler_Attack_Lightning_Touch; gren.takedamage = DAMAGE_YES; diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index 9b0541c14e..0b2e3650b4 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -151,6 +151,11 @@ void M_Spider_Attack_Web_Explode() } } +void M_Spider_Attack_Web_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, M_Spider_Attack_Web_Explode()); +} + void M_Spider_Attack_Web_Touch() { PROJECTILE_TOUCH; @@ -168,7 +173,7 @@ void M_Spider_Attack_Web(entity this) entity proj = new(plasma); proj.owner = proj.realowner = this; - proj.use = M_Spider_Attack_Web_Explode; + proj.use = M_Spider_Attack_Web_Explode_use; proj.think = adaptor_think2use_hittype_splash; proj.bot_dodge = true; proj.bot_dodgerating = 0; diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index 9d1022fa36..def29e969d 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -548,9 +548,9 @@ void Monster_Dead_Fade(entity this) } } -void Monster_Use() -{SELFPARAM(); - if(Monster_ValidTarget(this, activator)) { this.enemy = activator; } +void Monster_Use(entity this, entity actor, entity trigger) +{ + if(Monster_ValidTarget(this, actor)) { this.enemy = actor; } } vector Monster_Move_Target(entity this, entity targ) @@ -931,9 +931,9 @@ void Monster_Dead_Think() } } -void Monster_Appear() -{SELFPARAM(); - this.enemy = activator; +void Monster_Appear(entity this, entity actor, entity trigger) +{ + this.enemy = actor; this.spawnflags &= ~MONSTERFLAG_APPEAR; // otherwise, we get an endless loop Monster_Spawn(this, this.monsterid); } @@ -1102,9 +1102,7 @@ void Monster_Damage(entity this, entity inflictor, entity attacker, float damage this.candrop = false; // killed by mobkill command // TODO: fix this? - activator = attacker; - other = this.enemy; - WITHSELF(this, SUB_UseTargets()); + SUB_UseTargets(this, attacker, this.enemy); this.target2 = this.oldtarget2; // reset to original target on death, incase we respawn Monster_Dead(this, attacker, (this.health <= -100 || deathtype == DEATH_KILL.m_id)); diff --git a/qcsrc/common/mutators/_mod.inc b/qcsrc/common/mutators/_mod.inc index 254d13d7e2..8220b2d195 100644 --- a/qcsrc/common/mutators/_mod.inc +++ b/qcsrc/common/mutators/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "all.qc" +#include diff --git a/qcsrc/common/mutators/_mod.qh b/qcsrc/common/mutators/_mod.qh new file mode 100644 index 0000000000..5d6ac5628b --- /dev/null +++ b/qcsrc/common/mutators/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/_mod.inc b/qcsrc/common/mutators/mutator/_mod.inc index 14e0e3d651..30d67e34bc 100644 --- a/qcsrc/common/mutators/mutator/_mod.inc +++ b/qcsrc/common/mutators/mutator/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "itemstime.qc" +#include diff --git a/qcsrc/common/mutators/mutator/_mod.qh b/qcsrc/common/mutators/mutator/_mod.qh new file mode 100644 index 0000000000..ac056ac68b --- /dev/null +++ b/qcsrc/common/mutators/mutator/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/bloodloss/_mod.inc b/qcsrc/common/mutators/mutator/bloodloss/_mod.inc index 791cd03378..16e6308acf 100644 --- a/qcsrc/common/mutators/mutator/bloodloss/_mod.inc +++ b/qcsrc/common/mutators/mutator/bloodloss/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "bloodloss.qc" +#include diff --git a/qcsrc/common/mutators/mutator/bloodloss/_mod.qh b/qcsrc/common/mutators/mutator/bloodloss/_mod.qh new file mode 100644 index 0000000000..b1d45e2791 --- /dev/null +++ b/qcsrc/common/mutators/mutator/bloodloss/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/breakablehook/_mod.inc b/qcsrc/common/mutators/mutator/breakablehook/_mod.inc index ff8da6266c..bdbbae46cd 100644 --- a/qcsrc/common/mutators/mutator/breakablehook/_mod.inc +++ b/qcsrc/common/mutators/mutator/breakablehook/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "breakablehook.qc" +#include diff --git a/qcsrc/common/mutators/mutator/breakablehook/_mod.qh b/qcsrc/common/mutators/mutator/breakablehook/_mod.qh new file mode 100644 index 0000000000..8a41908af3 --- /dev/null +++ b/qcsrc/common/mutators/mutator/breakablehook/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/buffs/_mod.inc b/qcsrc/common/mutators/mutator/buffs/_mod.inc index df0201d1f7..c06263a92f 100644 --- a/qcsrc/common/mutators/mutator/buffs/_mod.inc +++ b/qcsrc/common/mutators/mutator/buffs/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "all.qc" -#include "buffs.qc" +#include +#include diff --git a/qcsrc/common/mutators/mutator/buffs/_mod.qh b/qcsrc/common/mutators/mutator/buffs/_mod.qh new file mode 100644 index 0000000000..2133c7250e --- /dev/null +++ b/qcsrc/common/mutators/mutator/buffs/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/common/mutators/mutator/bugrigs/_mod.inc b/qcsrc/common/mutators/mutator/bugrigs/_mod.inc index cd18f3318e..f898b93f8c 100644 --- a/qcsrc/common/mutators/mutator/bugrigs/_mod.inc +++ b/qcsrc/common/mutators/mutator/bugrigs/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "bugrigs.qc" +#include diff --git a/qcsrc/common/mutators/mutator/bugrigs/_mod.qh b/qcsrc/common/mutators/mutator/bugrigs/_mod.qh new file mode 100644 index 0000000000..dd8bcbdc78 --- /dev/null +++ b/qcsrc/common/mutators/mutator/bugrigs/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/campcheck/_mod.inc b/qcsrc/common/mutators/mutator/campcheck/_mod.inc index 2f61e45977..3ddb376fc9 100644 --- a/qcsrc/common/mutators/mutator/campcheck/_mod.inc +++ b/qcsrc/common/mutators/mutator/campcheck/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "campcheck.qc" +#include diff --git a/qcsrc/common/mutators/mutator/campcheck/_mod.qh b/qcsrc/common/mutators/mutator/campcheck/_mod.qh new file mode 100644 index 0000000000..81345f1cff --- /dev/null +++ b/qcsrc/common/mutators/mutator/campcheck/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/cloaked/_mod.inc b/qcsrc/common/mutators/mutator/cloaked/_mod.inc index 4423f2bdb1..7213695225 100644 --- a/qcsrc/common/mutators/mutator/cloaked/_mod.inc +++ b/qcsrc/common/mutators/mutator/cloaked/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "cloaked.qc" +#include diff --git a/qcsrc/common/mutators/mutator/cloaked/_mod.qh b/qcsrc/common/mutators/mutator/cloaked/_mod.qh new file mode 100644 index 0000000000..5606b9aafd --- /dev/null +++ b/qcsrc/common/mutators/mutator/cloaked/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/damagetext/_mod.inc b/qcsrc/common/mutators/mutator/damagetext/_mod.inc index ff53767252..b5dfbc32ab 100644 --- a/qcsrc/common/mutators/mutator/damagetext/_mod.inc +++ b/qcsrc/common/mutators/mutator/damagetext/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "damagetext.qc" +#include diff --git a/qcsrc/common/mutators/mutator/damagetext/_mod.qh b/qcsrc/common/mutators/mutator/damagetext/_mod.qh new file mode 100644 index 0000000000..2775109a20 --- /dev/null +++ b/qcsrc/common/mutators/mutator/damagetext/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/damagetext/damagetext.qc b/qcsrc/common/mutators/mutator/damagetext/damagetext.qc index 0b44b7346e..3c01fa88a9 100644 --- a/qcsrc/common/mutators/mutator/damagetext/damagetext.qc +++ b/qcsrc/common/mutators/mutator/damagetext/damagetext.qc @@ -151,20 +151,29 @@ CLASS(XonoticDamageTextSettings, XonoticTab) METHOD(XonoticDamageTextSettings, showNotify, void(entity this)) { loadAllCvars(this); } METHOD(XonoticDamageTextSettings, fill, void(entity this)) { + entity e; this.gotoRC(this, 0, 1); this.setFirstColumn(this, this.currentColumn); this.TD(this, 1, 3, makeXonoticCheckBox(0, "cl_damagetext", _("Draw damage numbers"))); this.TR(this); - this.TD(this, 1, 1, makeXonoticTextLabel(0, _("Font size:"))); - this.TD(this, 1, 2, makeXonoticSlider(0, 50, 1, "cl_damagetext_size")); + this.TD(this, 1, 1, e = makeXonoticTextLabel(0, _("Font size:"))); + setDependent(e, "cl_damagetext", 1, 1); + this.TD(this, 1, 2, e = makeXonoticSlider(0, 50, 1, "cl_damagetext_size")); + setDependent(e, "cl_damagetext", 1, 1); this.TR(this); - this.TD(this, 1, 1, makeXonoticTextLabel(0, _("Accumulate range:"))); - this.TD(this, 1, 2, makeXonoticSlider(0, 500, 1, "cl_damagetext_accumulate_range")); + this.TD(this, 1, 1, e = makeXonoticTextLabel(0, _("Accumulate range:"))); + setDependent(e, "cl_damagetext", 1, 1); + this.TD(this, 1, 2, e = makeXonoticSlider(0, 500, 1, "cl_damagetext_accumulate_range")); + setDependent(e, "cl_damagetext", 1, 1); this.TR(this); - this.TD(this, 1, 1, makeXonoticTextLabel(0, _("Lifetime:"))); - this.TD(this, 1, 2, makeXonoticSlider(0, 10, 1, "cl_damagetext_alpha_lifetime")); + this.TD(this, 1, 1, e = makeXonoticTextLabel(0, _("Lifetime:"))); + setDependent(e, "cl_damagetext", 1, 1); + this.TD(this, 1, 2, e = makeXonoticSlider(0, 10, 1, "cl_damagetext_alpha_lifetime")); + setDependent(e, "cl_damagetext", 1, 1); this.TR(this); - this.TD(this, 1, 1, makeXonoticTextLabel(0, _("Color:"))); - this.TD(this, 2, 2, makeXonoticColorpickerString("cl_damagetext_color", "cl_damagetext_color")); + this.TD(this, 1, 1, e = makeXonoticTextLabel(0, _("Color:"))); + setDependent(e, "cl_damagetext", 1, 1); + this.TD(this, 2, 2, e = makeXonoticColorpickerString("cl_damagetext_color", "cl_damagetext_color")); + setDependent(e, "cl_damagetext", 1, 1); } ENDCLASS(XonoticDamageTextSettings) #endif diff --git a/qcsrc/common/mutators/mutator/dodging/_mod.inc b/qcsrc/common/mutators/mutator/dodging/_mod.inc index 92244a517e..4902d5fc1b 100644 --- a/qcsrc/common/mutators/mutator/dodging/_mod.inc +++ b/qcsrc/common/mutators/mutator/dodging/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "dodging.qc" +#include diff --git a/qcsrc/common/mutators/mutator/dodging/_mod.qh b/qcsrc/common/mutators/mutator/dodging/_mod.qh new file mode 100644 index 0000000000..b2b65f02f7 --- /dev/null +++ b/qcsrc/common/mutators/mutator/dodging/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/doublejump/_mod.inc b/qcsrc/common/mutators/mutator/doublejump/_mod.inc index 8c1f531540..8f48138074 100644 --- a/qcsrc/common/mutators/mutator/doublejump/_mod.inc +++ b/qcsrc/common/mutators/mutator/doublejump/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "doublejump.qc" +#include diff --git a/qcsrc/common/mutators/mutator/doublejump/_mod.qh b/qcsrc/common/mutators/mutator/doublejump/_mod.qh new file mode 100644 index 0000000000..e55b1435b4 --- /dev/null +++ b/qcsrc/common/mutators/mutator/doublejump/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/hook/_mod.inc b/qcsrc/common/mutators/mutator/hook/_mod.inc index 9eff27e68c..ec6da662e7 100644 --- a/qcsrc/common/mutators/mutator/hook/_mod.inc +++ b/qcsrc/common/mutators/mutator/hook/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "hook.qc" +#include diff --git a/qcsrc/common/mutators/mutator/hook/_mod.qh b/qcsrc/common/mutators/mutator/hook/_mod.qh new file mode 100644 index 0000000000..50c0c13726 --- /dev/null +++ b/qcsrc/common/mutators/mutator/hook/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/instagib/_mod.inc b/qcsrc/common/mutators/mutator/instagib/_mod.inc index e5e4393698..dad005fe49 100644 --- a/qcsrc/common/mutators/mutator/instagib/_mod.inc +++ b/qcsrc/common/mutators/mutator/instagib/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "instagib.qc" -#include "items.qc" +#include +#include diff --git a/qcsrc/common/mutators/mutator/instagib/_mod.qh b/qcsrc/common/mutators/mutator/instagib/_mod.qh new file mode 100644 index 0000000000..2e88f427e9 --- /dev/null +++ b/qcsrc/common/mutators/mutator/instagib/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/common/mutators/mutator/instagib/instagib.qc b/qcsrc/common/mutators/mutator/instagib/instagib.qc index f8f2e5a7df..ec11970fed 100644 --- a/qcsrc/common/mutators/mutator/instagib/instagib.qc +++ b/qcsrc/common/mutators/mutator/instagib/instagib.qc @@ -288,6 +288,9 @@ MUTATOR_HOOKFUNCTION(mutator_instagib, PlayerDamage_Calculate) if(IS_PLAYER(frag_attacker)) if(DEATH_ISWEAPON(frag_deathtype, WEP_VAPORIZER)) { + if(!autocvar_g_instagib_friendlypush && SAME_TEAM(frag_target, frag_attacker)) + frag_force = '0 0 0'; + if(frag_target.armorvalue) { frag_target.armorvalue -= 1; @@ -303,7 +306,11 @@ MUTATOR_HOOKFUNCTION(mutator_instagib, PlayerDamage_Calculate) if(frag_deathtype & HITTYPE_SECONDARY) { if(!autocvar_g_instagib_blaster_keepdamage || frag_attacker == frag_target) - frag_damage = frag_mirrordamage = 0; + { + frag_damage = 0; + if(!autocvar_g_instagib_mirrordamage) + frag_mirrordamage = 0; // never do mirror damage on enemies + } if(frag_target != frag_attacker) { @@ -315,6 +322,7 @@ MUTATOR_HOOKFUNCTION(mutator_instagib, PlayerDamage_Calculate) } } + if(!autocvar_g_instagib_mirrordamage) // only apply the taking lives hack if we don't want to support real damage mirroring if(IS_PLAYER(frag_attacker)) if(frag_mirrordamage > 0) { @@ -329,6 +337,7 @@ MUTATOR_HOOKFUNCTION(mutator_instagib, PlayerDamage_Calculate) } if(frag_target.alpha && frag_target.alpha < 1) + if(IS_PLAYER(frag_target)) yoda = 1; return false; diff --git a/qcsrc/common/mutators/mutator/invincibleproj/_mod.inc b/qcsrc/common/mutators/mutator/invincibleproj/_mod.inc index 2783d099ac..68d313e95c 100644 --- a/qcsrc/common/mutators/mutator/invincibleproj/_mod.inc +++ b/qcsrc/common/mutators/mutator/invincibleproj/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "invincibleproj.qc" +#include diff --git a/qcsrc/common/mutators/mutator/invincibleproj/_mod.qh b/qcsrc/common/mutators/mutator/invincibleproj/_mod.qh new file mode 100644 index 0000000000..dc3f32f10e --- /dev/null +++ b/qcsrc/common/mutators/mutator/invincibleproj/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/melee_only/_mod.inc b/qcsrc/common/mutators/mutator/melee_only/_mod.inc index d2132e680c..db31be3fdd 100644 --- a/qcsrc/common/mutators/mutator/melee_only/_mod.inc +++ b/qcsrc/common/mutators/mutator/melee_only/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "melee_only.qc" +#include diff --git a/qcsrc/common/mutators/mutator/melee_only/_mod.qh b/qcsrc/common/mutators/mutator/melee_only/_mod.qh new file mode 100644 index 0000000000..2228d64f18 --- /dev/null +++ b/qcsrc/common/mutators/mutator/melee_only/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/midair/_mod.inc b/qcsrc/common/mutators/mutator/midair/_mod.inc index aae84aafc5..8fcc96ea21 100644 --- a/qcsrc/common/mutators/mutator/midair/_mod.inc +++ b/qcsrc/common/mutators/mutator/midair/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "midair.qc" +#include diff --git a/qcsrc/common/mutators/mutator/midair/_mod.qh b/qcsrc/common/mutators/mutator/midair/_mod.qh new file mode 100644 index 0000000000..48272b8709 --- /dev/null +++ b/qcsrc/common/mutators/mutator/midair/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/multijump/_mod.inc b/qcsrc/common/mutators/mutator/multijump/_mod.inc index a58cf852ba..eb3fab0078 100644 --- a/qcsrc/common/mutators/mutator/multijump/_mod.inc +++ b/qcsrc/common/mutators/mutator/multijump/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "multijump.qc" +#include diff --git a/qcsrc/common/mutators/mutator/multijump/_mod.qh b/qcsrc/common/mutators/mutator/multijump/_mod.qh new file mode 100644 index 0000000000..29df9afa38 --- /dev/null +++ b/qcsrc/common/mutators/mutator/multijump/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/nades/_mod.inc b/qcsrc/common/mutators/mutator/nades/_mod.inc index 9055545803..28739d2e1a 100644 --- a/qcsrc/common/mutators/mutator/nades/_mod.inc +++ b/qcsrc/common/mutators/mutator/nades/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "nades.qc" -#include "net.qc" +#include +#include diff --git a/qcsrc/common/mutators/mutator/nades/_mod.qh b/qcsrc/common/mutators/mutator/nades/_mod.qh new file mode 100644 index 0000000000..0ca855a133 --- /dev/null +++ b/qcsrc/common/mutators/mutator/nades/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/common/mutators/mutator/nades/nades.qc b/qcsrc/common/mutators/mutator/nades/nades.qc index 8d17edb0b6..cabfd31b81 100644 --- a/qcsrc/common/mutators/mutator/nades/nades.qc +++ b/qcsrc/common/mutators/mutator/nades/nades.qc @@ -4,6 +4,7 @@ #ifdef SVQC bool autocvar_g_nades_nade_small; +float autocvar_g_nades_spread = 0.04; #endif REGISTER_STAT(NADES_SMALL, int, autocvar_g_nades_nade_small) @@ -804,7 +805,7 @@ void nade_damage(entity this, entity inflictor, entity attacker, float damage, i this.realowner = attacker; if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, nade_boom)); + W_PrepareExplosionByDamage(this, attacker, nade_boom); else nade_burn_spawn(this); } @@ -1068,7 +1069,9 @@ void nades_CheckThrow() float _force = time - held_nade.nade_time_primed; _force /= autocvar_g_nades_nade_lifetime; _force = autocvar_g_nades_nade_minforce + (_force * (autocvar_g_nades_nade_maxforce - autocvar_g_nades_nade_minforce)); - toss_nade(self, true, (v_forward * 0.75 + v_up * 0.2 + v_right * 0.05) * _force, 0); + vector dir = (v_forward * 0.75 + v_up * 0.2 + v_right * 0.05); + dir = W_CalculateSpread(dir, autocvar_g_nades_spread, g_weaponspreadfactor, autocvar_g_projectiles_spread_style); + toss_nade(self, true, dir * _force, 0); } } } @@ -1122,7 +1125,9 @@ CLASS(NadeOffhand, OffhandWeapon) float _force = time - held_nade.nade_time_primed; _force /= autocvar_g_nades_nade_lifetime; _force = autocvar_g_nades_nade_minforce + (_force * (autocvar_g_nades_nade_maxforce - autocvar_g_nades_nade_minforce)); - toss_nade(player, false, (v_forward * 0.7 + v_up * 0.2 + v_right * 0.1) * _force, 0); + vector dir = (v_forward * 0.7 + v_up * 0.2 + v_right * 0.1); + dir = W_CalculateSpread(dir, autocvar_g_nades_spread, g_weaponspreadfactor, autocvar_g_projectiles_spread_style); + toss_nade(player, false, dir * _force, 0); } } } diff --git a/qcsrc/common/mutators/mutator/new_toys/_mod.inc b/qcsrc/common/mutators/mutator/new_toys/_mod.inc index 97665f5c4e..90e9811ea6 100644 --- a/qcsrc/common/mutators/mutator/new_toys/_mod.inc +++ b/qcsrc/common/mutators/mutator/new_toys/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "new_toys.qc" +#include diff --git a/qcsrc/common/mutators/mutator/new_toys/_mod.qh b/qcsrc/common/mutators/mutator/new_toys/_mod.qh new file mode 100644 index 0000000000..ec3b8105fe --- /dev/null +++ b/qcsrc/common/mutators/mutator/new_toys/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/nix/_mod.inc b/qcsrc/common/mutators/mutator/nix/_mod.inc index b98eab4fd1..a669175da2 100644 --- a/qcsrc/common/mutators/mutator/nix/_mod.inc +++ b/qcsrc/common/mutators/mutator/nix/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "nix.qc" +#include diff --git a/qcsrc/common/mutators/mutator/nix/_mod.qh b/qcsrc/common/mutators/mutator/nix/_mod.qh new file mode 100644 index 0000000000..6c012fe65c --- /dev/null +++ b/qcsrc/common/mutators/mutator/nix/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/overkill/_mod.inc b/qcsrc/common/mutators/mutator/overkill/_mod.inc index 19c25a0637..5b42a4dd11 100644 --- a/qcsrc/common/mutators/mutator/overkill/_mod.inc +++ b/qcsrc/common/mutators/mutator/overkill/_mod.inc @@ -1,4 +1,4 @@ // generated file; do not modify -#include "hmg.qc" -#include "overkill.qc" -#include "rpc.qc" +#include +#include +#include diff --git a/qcsrc/common/mutators/mutator/overkill/_mod.qh b/qcsrc/common/mutators/mutator/overkill/_mod.qh new file mode 100644 index 0000000000..7a46694446 --- /dev/null +++ b/qcsrc/common/mutators/mutator/overkill/_mod.qh @@ -0,0 +1,4 @@ +// generated file; do not modify +#include +#include +#include diff --git a/qcsrc/common/mutators/mutator/overkill/rpc.qc b/qcsrc/common/mutators/mutator/overkill/rpc.qc index 5a06302d9f..2d9d423cf5 100644 --- a/qcsrc/common/mutators/mutator/overkill/rpc.qc +++ b/qcsrc/common/mutators/mutator/overkill/rpc.qc @@ -80,7 +80,7 @@ void W_RocketPropelledChainsaw_Damage(entity this, entity inflictor, entity atta this.health = this.health - damage; if (this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, W_RocketPropelledChainsaw_Explode)); + W_PrepareExplosionByDamage(this, attacker, W_RocketPropelledChainsaw_Explode); } void W_RocketPropelledChainsaw_Think() diff --git a/qcsrc/common/mutators/mutator/physical_items/_mod.inc b/qcsrc/common/mutators/mutator/physical_items/_mod.inc index 8174e85415..4d4ef59f8a 100644 --- a/qcsrc/common/mutators/mutator/physical_items/_mod.inc +++ b/qcsrc/common/mutators/mutator/physical_items/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "physical_items.qc" +#include diff --git a/qcsrc/common/mutators/mutator/physical_items/_mod.qh b/qcsrc/common/mutators/mutator/physical_items/_mod.qh new file mode 100644 index 0000000000..a347cec04e --- /dev/null +++ b/qcsrc/common/mutators/mutator/physical_items/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/pinata/_mod.inc b/qcsrc/common/mutators/mutator/pinata/_mod.inc index a4017bd975..a0bd94d00e 100644 --- a/qcsrc/common/mutators/mutator/pinata/_mod.inc +++ b/qcsrc/common/mutators/mutator/pinata/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "pinata.qc" +#include diff --git a/qcsrc/common/mutators/mutator/pinata/_mod.qh b/qcsrc/common/mutators/mutator/pinata/_mod.qh new file mode 100644 index 0000000000..1602640e09 --- /dev/null +++ b/qcsrc/common/mutators/mutator/pinata/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/random_gravity/_mod.inc b/qcsrc/common/mutators/mutator/random_gravity/_mod.inc index e07c8af793..feeaec8d69 100644 --- a/qcsrc/common/mutators/mutator/random_gravity/_mod.inc +++ b/qcsrc/common/mutators/mutator/random_gravity/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "random_gravity.qc" +#include diff --git a/qcsrc/common/mutators/mutator/random_gravity/_mod.qh b/qcsrc/common/mutators/mutator/random_gravity/_mod.qh new file mode 100644 index 0000000000..99a11ed638 --- /dev/null +++ b/qcsrc/common/mutators/mutator/random_gravity/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/rocketflying/_mod.inc b/qcsrc/common/mutators/mutator/rocketflying/_mod.inc index 92ef3cc0d8..0841ae680b 100644 --- a/qcsrc/common/mutators/mutator/rocketflying/_mod.inc +++ b/qcsrc/common/mutators/mutator/rocketflying/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "rocketflying.qc" +#include diff --git a/qcsrc/common/mutators/mutator/rocketflying/_mod.qh b/qcsrc/common/mutators/mutator/rocketflying/_mod.qh new file mode 100644 index 0000000000..75ca141bf0 --- /dev/null +++ b/qcsrc/common/mutators/mutator/rocketflying/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/rocketminsta/_mod.inc b/qcsrc/common/mutators/mutator/rocketminsta/_mod.inc index e50a4ba8dc..bc579ec512 100644 --- a/qcsrc/common/mutators/mutator/rocketminsta/_mod.inc +++ b/qcsrc/common/mutators/mutator/rocketminsta/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "rocketminsta.qc" +#include diff --git a/qcsrc/common/mutators/mutator/rocketminsta/_mod.qh b/qcsrc/common/mutators/mutator/rocketminsta/_mod.qh new file mode 100644 index 0000000000..29a367d3cf --- /dev/null +++ b/qcsrc/common/mutators/mutator/rocketminsta/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/running_guns/_mod.inc b/qcsrc/common/mutators/mutator/running_guns/_mod.inc index 2550d2d66b..f88b36a534 100644 --- a/qcsrc/common/mutators/mutator/running_guns/_mod.inc +++ b/qcsrc/common/mutators/mutator/running_guns/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "running_guns.qc" +#include diff --git a/qcsrc/common/mutators/mutator/running_guns/_mod.qh b/qcsrc/common/mutators/mutator/running_guns/_mod.qh new file mode 100644 index 0000000000..559be4c987 --- /dev/null +++ b/qcsrc/common/mutators/mutator/running_guns/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/sandbox/_mod.inc b/qcsrc/common/mutators/mutator/sandbox/_mod.inc index c1e80d487b..8e54c1f95e 100644 --- a/qcsrc/common/mutators/mutator/sandbox/_mod.inc +++ b/qcsrc/common/mutators/mutator/sandbox/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "sandbox.qc" +#include diff --git a/qcsrc/common/mutators/mutator/sandbox/_mod.qh b/qcsrc/common/mutators/mutator/sandbox/_mod.qh new file mode 100644 index 0000000000..81e250c7fa --- /dev/null +++ b/qcsrc/common/mutators/mutator/sandbox/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/spawn_near_teammate/_mod.inc b/qcsrc/common/mutators/mutator/spawn_near_teammate/_mod.inc index 612f5a0d0f..b7d3af7f4d 100644 --- a/qcsrc/common/mutators/mutator/spawn_near_teammate/_mod.inc +++ b/qcsrc/common/mutators/mutator/spawn_near_teammate/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "spawn_near_teammate.qc" +#include diff --git a/qcsrc/common/mutators/mutator/spawn_near_teammate/_mod.qh b/qcsrc/common/mutators/mutator/spawn_near_teammate/_mod.qh new file mode 100644 index 0000000000..5f53e95c88 --- /dev/null +++ b/qcsrc/common/mutators/mutator/spawn_near_teammate/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/superspec/_mod.inc b/qcsrc/common/mutators/mutator/superspec/_mod.inc index bb63a1861d..d5005242f2 100644 --- a/qcsrc/common/mutators/mutator/superspec/_mod.inc +++ b/qcsrc/common/mutators/mutator/superspec/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "superspec.qc" +#include diff --git a/qcsrc/common/mutators/mutator/superspec/_mod.qh b/qcsrc/common/mutators/mutator/superspec/_mod.qh new file mode 100644 index 0000000000..b544ffc611 --- /dev/null +++ b/qcsrc/common/mutators/mutator/superspec/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/touchexplode/_mod.inc b/qcsrc/common/mutators/mutator/touchexplode/_mod.inc index 06bb8d30a5..42dad3926e 100644 --- a/qcsrc/common/mutators/mutator/touchexplode/_mod.inc +++ b/qcsrc/common/mutators/mutator/touchexplode/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "touchexplode.qc" +#include diff --git a/qcsrc/common/mutators/mutator/touchexplode/_mod.qh b/qcsrc/common/mutators/mutator/touchexplode/_mod.qh new file mode 100644 index 0000000000..ec71f52d74 --- /dev/null +++ b/qcsrc/common/mutators/mutator/touchexplode/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/vampire/_mod.inc b/qcsrc/common/mutators/mutator/vampire/_mod.inc index c0164ea8f7..856ed84c46 100644 --- a/qcsrc/common/mutators/mutator/vampire/_mod.inc +++ b/qcsrc/common/mutators/mutator/vampire/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "vampire.qc" +#include diff --git a/qcsrc/common/mutators/mutator/vampire/_mod.qh b/qcsrc/common/mutators/mutator/vampire/_mod.qh new file mode 100644 index 0000000000..551184c77b --- /dev/null +++ b/qcsrc/common/mutators/mutator/vampire/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/vampirehook/_mod.inc b/qcsrc/common/mutators/mutator/vampirehook/_mod.inc index 4f2e935c07..868a4ef3fc 100644 --- a/qcsrc/common/mutators/mutator/vampirehook/_mod.inc +++ b/qcsrc/common/mutators/mutator/vampirehook/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "vampirehook.qc" +#include diff --git a/qcsrc/common/mutators/mutator/vampirehook/_mod.qh b/qcsrc/common/mutators/mutator/vampirehook/_mod.qh new file mode 100644 index 0000000000..5d57816c96 --- /dev/null +++ b/qcsrc/common/mutators/mutator/vampirehook/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/waypoints/_mod.inc b/qcsrc/common/mutators/mutator/waypoints/_mod.inc index a5ebe76e3d..7547fb5770 100644 --- a/qcsrc/common/mutators/mutator/waypoints/_mod.inc +++ b/qcsrc/common/mutators/mutator/waypoints/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "waypointsprites.qc" +#include diff --git a/qcsrc/common/mutators/mutator/waypoints/_mod.qh b/qcsrc/common/mutators/mutator/waypoints/_mod.qh new file mode 100644 index 0000000000..4036f101ef --- /dev/null +++ b/qcsrc/common/mutators/mutator/waypoints/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/mutators/mutator/weaponarena_random/_mod.inc b/qcsrc/common/mutators/mutator/weaponarena_random/_mod.inc index c110d3fedf..742510b883 100644 --- a/qcsrc/common/mutators/mutator/weaponarena_random/_mod.inc +++ b/qcsrc/common/mutators/mutator/weaponarena_random/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "weaponarena_random.qc" +#include diff --git a/qcsrc/common/mutators/mutator/weaponarena_random/_mod.qh b/qcsrc/common/mutators/mutator/weaponarena_random/_mod.qh new file mode 100644 index 0000000000..68d6a24c42 --- /dev/null +++ b/qcsrc/common/mutators/mutator/weaponarena_random/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/notifications/_mod.inc b/qcsrc/common/notifications/_mod.inc index 254d13d7e2..33566850f8 100644 --- a/qcsrc/common/notifications/_mod.inc +++ b/qcsrc/common/notifications/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "all.qc" +#include diff --git a/qcsrc/common/notifications/_mod.qh b/qcsrc/common/notifications/_mod.qh new file mode 100644 index 0000000000..726be67a4f --- /dev/null +++ b/qcsrc/common/notifications/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/physics/_mod.inc b/qcsrc/common/physics/_mod.inc index fb423ecf5f..3a61cd4e9a 100644 --- a/qcsrc/common/physics/_mod.inc +++ b/qcsrc/common/physics/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "movelib.qc" -#include "player.qc" +#include +#include diff --git a/qcsrc/common/physics/_mod.qh b/qcsrc/common/physics/_mod.qh new file mode 100644 index 0000000000..39dacad8e2 --- /dev/null +++ b/qcsrc/common/physics/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/common/physics/movetypes/_mod.inc b/qcsrc/common/physics/movetypes/_mod.inc index 674b82964d..4effcbd04a 100644 --- a/qcsrc/common/physics/movetypes/_mod.inc +++ b/qcsrc/common/physics/movetypes/_mod.inc @@ -1,7 +1,7 @@ // generated file; do not modify -#include "follow.qc" -#include "movetypes.qc" -#include "push.qc" -#include "step.qc" -#include "toss.qc" -#include "walk.qc" +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/physics/movetypes/_mod.qh b/qcsrc/common/physics/movetypes/_mod.qh new file mode 100644 index 0000000000..32ae3813c8 --- /dev/null +++ b/qcsrc/common/physics/movetypes/_mod.qh @@ -0,0 +1,7 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/physics/player.qc b/qcsrc/common/physics/player.qc index 0ecfa180f4..7f20bfe9a0 100644 --- a/qcsrc/common/physics/player.qc +++ b/qcsrc/common/physics/player.qc @@ -596,7 +596,7 @@ void CheckPlayerJump(entity this) { float air_jump = !PlayerJump(this) || player_multijump; // PlayerJump() has important side effects float activate = JETPACK_JUMP(this) && air_jump && PHYS_INPUT_BUTTON_JUMP(this) || PHYS_INPUT_BUTTON_JETPACK(this); - float has_fuel = !PHYS_JETPACK_FUEL(this) || PHYS_AMMO_FUEL(this) || ITEMS_STAT(this) & IT_UNLIMITED_WEAPON_AMMO; + float has_fuel = !PHYS_JETPACK_FUEL(this) || PHYS_AMMO_FUEL(this) || (ITEMS_STAT(this) & IT_UNLIMITED_WEAPON_AMMO); if (!(ITEMS_STAT(this) & ITEM_Jetpack.m_itemid)) { } else if (this.jetpack_stopped) { } @@ -1309,11 +1309,6 @@ void PM_Main(entity this) this.spectatorspeed = STAT(SPECTATORSPEED); - vector oldv_angle = this.v_angle; - vector oldangles = this.angles; // we need to save these, as they're abused by other code - this.v_angle = PHYS_INPUT_ANGLES(this); - this.angles = PHYS_WORLD_ANGLES(this); - this.team = myteam + 1; // is this correct? if (!(PHYS_INPUT_BUTTON_JUMP(this))) // !jump UNSET_JUMP_HELD(this); // canjump = true @@ -1553,11 +1548,6 @@ LABEL(end) this.lastflags = this.flags; this.lastclassname = this.classname; - -#ifdef CSQC - this.v_angle = oldv_angle; - this.angles = oldangles; -#endif } #if defined(SVQC) diff --git a/qcsrc/common/playerstats.qc b/qcsrc/common/playerstats.qc index 233762202e..ec2f7cad3d 100644 --- a/qcsrc/common/playerstats.qc +++ b/qcsrc/common/playerstats.qc @@ -427,7 +427,7 @@ void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest) PS_B_IN_DB = db_create(); // now request the information - uri = strcat(uri, "/player/", uri_escape(uri_escape(joiningplayer.crypto_idfp)), "/elo.txt"); + uri = strcat(uri, "/player/", uri_escape(uri_escape(uri_escape(joiningplayer.crypto_idfp))), "/elo.txt"); LOG_TRACE("Retrieving playerstats from URL: ", uri, "\n"); url_single_fopen( uri, diff --git a/qcsrc/common/sounds/_mod.inc b/qcsrc/common/sounds/_mod.inc index 254d13d7e2..787b6f1901 100644 --- a/qcsrc/common/sounds/_mod.inc +++ b/qcsrc/common/sounds/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "all.qc" +#include diff --git a/qcsrc/common/sounds/_mod.qh b/qcsrc/common/sounds/_mod.qh new file mode 100644 index 0000000000..99eea865cf --- /dev/null +++ b/qcsrc/common/sounds/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/common/state.qc b/qcsrc/common/state.qc index d75e080271..1d96923ed0 100644 --- a/qcsrc/common/state.qc +++ b/qcsrc/common/state.qc @@ -39,8 +39,7 @@ void ClientState_attach(entity this) GetCvars(this, 0); // get other cvars from player - // TODO: xonstat elo.txt support, until then just 404s - if (false && IS_REAL_CLIENT(this)) { PlayerStats_PlayerBasic_CheckUpdate(this); } + if (IS_REAL_CLIENT(this)) { PlayerStats_PlayerBasic_CheckUpdate(this); } // TODO: fold all of these into ClientState diff --git a/qcsrc/common/t_items.qc b/qcsrc/common/t_items.qc index 87623da363..a3ac40b670 100644 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@ -816,7 +816,7 @@ LABEL(pickup) other.last_pickup = time; Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(this), '0 0 0', 1); - _sound (other, CH_TRIGGER, (this.item_pickupsound ? this.item_pickupsound : Sound_fixpath(this.item_pickupsound_ent)), VOL_BASE, ATTEN_NORM); + _sound (other, (this.itemdef.instanceOfPowerup ? CH_TRIGGER_SINGLE : CH_TRIGGER), (this.item_pickupsound ? this.item_pickupsound : Sound_fixpath(this.item_pickupsound_ent)), VOL_BASE, ATTEN_NORM); if (this.classname == "droppedweapon") remove (this); @@ -1421,29 +1421,31 @@ spawnfunc(item_invincible) // compatibility: spawnfunc(item_quad) { this.classname = "item_strength";spawnfunc_item_strength(this);} -void target_items_use() -{SELFPARAM(); - if(activator.classname == "droppedweapon") +void target_items_use(entity this, entity actor, entity trigger) +{ + other = trigger; // TODO + + if(actor.classname == "droppedweapon") { EXACTTRIGGER_TOUCH; - remove(activator); + remove(actor); return; } - if (!IS_PLAYER(activator)) + if (!IS_PLAYER(actor)) return; - if(IS_DEAD(activator)) + if(IS_DEAD(actor)) return; EXACTTRIGGER_TOUCH; - FOREACH_ENTITY_ENT(enemy, activator, + FOREACH_ENTITY_ENT(enemy, actor, { if(it.classname == "droppedweapon") remove(it); }); - if(GiveItems(activator, 0, tokenize_console(self.netname))) - centerprint(activator, self.message); + if(GiveItems(actor, 0, tokenize_console(this.netname))) + centerprint(actor, this.message); } spawnfunc(target_items) diff --git a/qcsrc/common/t_items.qh b/qcsrc/common/t_items.qh index 1eb4b182de..ce8307821c 100644 --- a/qcsrc/common/t_items.qh +++ b/qcsrc/common/t_items.qh @@ -114,8 +114,6 @@ float commodity_pickupevalfunc(entity player, entity item); void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter); -void target_items_use (); - float GiveWeapon(entity e, float wpn, float op, float val); float GiveBit(entity e, .float fld, float bit, float op, float val); diff --git a/qcsrc/common/triggers/_mod.inc b/qcsrc/common/triggers/_mod.inc index 8c5a22c2fb..c049b10828 100644 --- a/qcsrc/common/triggers/_mod.inc +++ b/qcsrc/common/triggers/_mod.inc @@ -1,6 +1,6 @@ // generated file; do not modify -#include "include.qc" -#include "platforms.qc" -#include "subs.qc" -#include "teleporters.qc" -#include "triggers.qc" +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/_mod.qh b/qcsrc/common/triggers/_mod.qh new file mode 100644 index 0000000000..2fba604617 --- /dev/null +++ b/qcsrc/common/triggers/_mod.qh @@ -0,0 +1,6 @@ +// generated file; do not modify +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/func/_mod.inc b/qcsrc/common/triggers/func/_mod.inc index 2497d85084..675e3689b3 100644 --- a/qcsrc/common/triggers/func/_mod.inc +++ b/qcsrc/common/triggers/func/_mod.inc @@ -1,19 +1,19 @@ // generated file; do not modify -#include "bobbing.qc" -#include "breakable.qc" -#include "button.qc" -#include "conveyor.qc" -#include "door.qc" -#include "door_rotating.qc" -#include "door_secret.qc" -#include "fourier.qc" -#include "include.qc" -#include "ladder.qc" -#include "pendulum.qc" -#include "plat.qc" -#include "pointparticles.qc" -#include "rainsnow.qc" -#include "rotating.qc" -#include "stardust.qc" -#include "train.qc" -#include "vectormamamam.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/func/_mod.qh b/qcsrc/common/triggers/func/_mod.qh new file mode 100644 index 0000000000..fb179a42cc --- /dev/null +++ b/qcsrc/common/triggers/func/_mod.qh @@ -0,0 +1,19 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/func/breakable.qc b/qcsrc/common/triggers/func/breakable.qc index feaf878509..25857be3a1 100644 --- a/qcsrc/common/triggers/func/breakable.qc +++ b/qcsrc/common/triggers/func/breakable.qc @@ -47,121 +47,121 @@ void func_breakable_damage(entity this, entity inflictor, entity attacker, float // func_breakable // - basically func_assault_destructible for general gameplay use // -void LaunchDebris (string debrisname, vector force) -{SELFPARAM(); +void LaunchDebris (entity this, string debrisname, vector force) +{ entity dbr = spawn(); - vector org = self.absmin - + '1 0 0' * random() * (self.absmax.x - self.absmin.x) - + '0 1 0' * random() * (self.absmax.y - self.absmin.y) - + '0 0 1' * random() * (self.absmax.z - self.absmin.z); + vector org = this.absmin + + '1 0 0' * random() * (this.absmax.x - this.absmin.x) + + '0 1 0' * random() * (this.absmax.y - this.absmin.y) + + '0 0 1' * random() * (this.absmax.z - this.absmin.z); setorigin(dbr, org); _setmodel (dbr, debrisname ); - dbr.skin = self.debrisskin; - dbr.colormap = self.colormap; // inherit team colors - dbr.owner = self; // do not be affected by our own explosion - dbr.movetype = self.debrismovetype; - dbr.solid = self.debrissolid; + dbr.skin = this.debrisskin; + dbr.colormap = this.colormap; // inherit team colors + dbr.owner = this; // do not be affected by our own explosion + dbr.movetype = this.debrismovetype; + dbr.solid = this.debrissolid; if(dbr.solid != SOLID_BSP) // SOLID_BSP has exact collision, MAYBE this works? TODO check this out setsize(dbr, '0 0 0', '0 0 0'); // needed for performance, until engine can deal better with it - dbr.velocity_x = self.debrisvelocity.x + self.debrisvelocityjitter.x * crandom(); - dbr.velocity_y = self.debrisvelocity.y + self.debrisvelocityjitter.y * crandom(); - dbr.velocity_z = self.debrisvelocity.z + self.debrisvelocityjitter.z * crandom(); - self.velocity = self.velocity + force * self.debrisdamageforcescale; - dbr.avelocity_x = random()*self.debrisavelocityjitter.x; - dbr.avelocity_y = random()*self.debrisavelocityjitter.y; - dbr.avelocity_z = random()*self.debrisavelocityjitter.z; - dbr.damageforcescale = self.debrisdamageforcescale; + dbr.velocity_x = this.debrisvelocity.x + this.debrisvelocityjitter.x * crandom(); + dbr.velocity_y = this.debrisvelocity.y + this.debrisvelocityjitter.y * crandom(); + dbr.velocity_z = this.debrisvelocity.z + this.debrisvelocityjitter.z * crandom(); + this.velocity = this.velocity + force * this.debrisdamageforcescale; + dbr.avelocity_x = random()*this.debrisavelocityjitter.x; + dbr.avelocity_y = random()*this.debrisavelocityjitter.y; + dbr.avelocity_z = random()*this.debrisavelocityjitter.z; + dbr.damageforcescale = this.debrisdamageforcescale; if(dbr.damageforcescale) dbr.takedamage = DAMAGE_YES; - SUB_SetFade(dbr, time + self.debristime + crandom() * self.debristimejitter, self.debrisfadetime); + SUB_SetFade(dbr, time + this.debristime + crandom() * this.debristimejitter, this.debrisfadetime); } -void func_breakable_colormod() -{SELFPARAM(); +void func_breakable_colormod(entity this) +{ float h; - if (!(self.spawnflags & 2)) + if (!(this.spawnflags & 2)) return; - h = self.health / self.max_health; + h = this.health / this.max_health; if(h < 0.25) - self.colormod = '1 0 0'; + this.colormod = '1 0 0'; else if(h <= 0.75) - self.colormod = '1 0 0' + '0 1 0' * (2 * h - 0.5); + this.colormod = '1 0 0' + '0 1 0' * (2 * h - 0.5); else - self.colormod = '1 1 1'; + this.colormod = '1 1 1'; - CSQCMODEL_AUTOUPDATE(self); + CSQCMODEL_AUTOUPDATE(this); } -void func_breakable_look_destroyed() -{SELFPARAM(); +void func_breakable_look_destroyed(entity this) +{ float floorZ; - if(self.solid == SOLID_BSP) // in case a misc_follow moved me, save the current origin first - self.dropped_origin = self.origin; + if(this.solid == SOLID_BSP) // in case a misc_follow moved me, save the current origin first + this.dropped_origin = this.origin; - if(self.mdl_dead == "") - self.effects |= EF_NODRAW; + if(this.mdl_dead == "") + this.effects |= EF_NODRAW; else { - if (self.origin == '0 0 0') { // probably no origin brush, so don't spawn in the middle of the map.. - floorZ = self.absmin.z; - setorigin(self,((self.absmax+self.absmin)*.5)); - self.origin_z = floorZ; + if (this.origin == '0 0 0') { // probably no origin brush, so don't spawn in the middle of the map.. + floorZ = this.absmin.z; + setorigin(this,((this.absmax+this.absmin)*.5)); + this.origin_z = floorZ; } - _setmodel(self, self.mdl_dead); - self.effects &= ~EF_NODRAW; + _setmodel(this, this.mdl_dead); + this.effects &= ~EF_NODRAW; } - CSQCMODEL_AUTOUPDATE(self); + CSQCMODEL_AUTOUPDATE(this); - self.solid = SOLID_NOT; + this.solid = SOLID_NOT; } -void func_breakable_look_restore() -{SELFPARAM(); - _setmodel(self, self.mdl); - self.effects &= ~EF_NODRAW; +void func_breakable_look_restore(entity this) +{ + _setmodel(this, this.mdl); + this.effects &= ~EF_NODRAW; - if(self.mdl_dead != "") // only do this if we use mdl_dead, to behave better with misc_follow - setorigin(self, self.dropped_origin); + if(this.mdl_dead != "") // only do this if we use mdl_dead, to behave better with misc_follow + setorigin(this, this.dropped_origin); - CSQCMODEL_AUTOUPDATE(self); + CSQCMODEL_AUTOUPDATE(this); - self.solid = SOLID_BSP; + this.solid = SOLID_BSP; } -void func_breakable_behave_destroyed() -{SELFPARAM(); - self.health = self.max_health; - self.takedamage = DAMAGE_NO; - self.bot_attack = false; - self.event_damage = func_null; - self.state = 1; - if(self.spawnflags & 4) - self.use = func_null; - func_breakable_colormod(); - if (self.noise1) - stopsound (self, CH_TRIGGER_SINGLE); +void func_breakable_behave_destroyed(entity this) +{ + this.health = this.max_health; + this.takedamage = DAMAGE_NO; + this.bot_attack = false; + this.event_damage = func_null; + this.state = 1; + if(this.spawnflags & 4) + this.use = func_null; + func_breakable_colormod(this); + if (this.noise1) + stopsound (this, CH_TRIGGER_SINGLE); } -void func_breakable_behave_restore() -{SELFPARAM(); - self.health = self.max_health; - if(self.sprite) +void func_breakable_behave_restore(entity this) +{ + this.health = this.max_health; + if(this.sprite) { - WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health); - WaypointSprite_UpdateHealth(self.sprite, self.health); + WaypointSprite_UpdateMaxHealth(this.sprite, this.max_health); + WaypointSprite_UpdateHealth(this.sprite, this.health); } - if(!(self.spawnflags & 4)) + if(!(this.spawnflags & 4)) { - self.takedamage = DAMAGE_AIM; - self.bot_attack = true; - self.event_damage = func_breakable_damage; + this.takedamage = DAMAGE_AIM; + this.bot_attack = true; + this.event_damage = func_breakable_damage; } - self.state = 0; - self.nextthink = 0; // cancel auto respawn - func_breakable_colormod(); - if (self.noise1) - _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); + this.state = 0; + this.nextthink = 0; // cancel auto respawn + func_breakable_colormod(this); + if (this.noise1) + _sound (this, CH_TRIGGER_SINGLE, this.noise1, VOL_BASE, ATTEN_NORM); } void func_breakable_init_for_player(entity player) @@ -173,57 +173,67 @@ void func_breakable_init_for_player(entity player) } } -void func_breakable_destroyed() -{SELFPARAM(); - func_breakable_look_destroyed(); - func_breakable_behave_destroyed(); +void func_breakable_destroyed(entity this) +{ + func_breakable_look_destroyed(this); + func_breakable_behave_destroyed(this); - CSQCMODEL_AUTOUPDATE(self); + CSQCMODEL_AUTOUPDATE(this); } -void func_breakable_restore() -{SELFPARAM(); - func_breakable_look_restore(); - func_breakable_behave_restore(); +void func_breakable_restore(entity this, entity actor, entity trigger) +{ + func_breakable_look_restore(this); + func_breakable_behave_restore(this); - CSQCMODEL_AUTOUPDATE(self); + CSQCMODEL_AUTOUPDATE(this); } -vector debrisforce; // global, set before calling this -void func_breakable_destroy() +void func_breakable_restore_self() {SELFPARAM(); + func_breakable_restore(this, NULL, NULL); +} + +vector debrisforce; // global, set before calling this +void func_breakable_destroy(entity this, entity actor, entity trigger) +{ float n, i; string oldmsg; - activator = self.owner; - self.owner = world; // set by W_PrepareExplosionByDamage + entity act = this.owner; + this.owner = world; // set by W_PrepareExplosionByDamage // now throw around the debris - n = tokenize_console(self.debris); + n = tokenize_console(this.debris); for(i = 0; i < n; ++i) - LaunchDebris(argv(i), debrisforce); + LaunchDebris(this, argv(i), debrisforce); - func_breakable_destroyed(); + func_breakable_destroyed(this); - if(self.noise) - _sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); + if(this.noise) + _sound (this, CH_TRIGGER, this.noise, VOL_BASE, ATTEN_NORM); - if(self.dmg) - RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, world, self.dmg_force, DEATH_HURTTRIGGER.m_id, world); + if(this.dmg) + RadiusDamage(this, act, this.dmg, this.dmg_edge, this.dmg_radius, this, world, this.dmg_force, DEATH_HURTTRIGGER.m_id, world); - if(self.cnt) // TODO - __pointparticles(self.cnt, self.absmin * 0.5 + self.absmax * 0.5, '0 0 0', self.count); + if(this.cnt) // TODO + __pointparticles(this.cnt, this.absmin * 0.5 + this.absmax * 0.5, '0 0 0', this.count); - if(self.respawntime) + if(this.respawntime) { - self.think = func_breakable_restore; - self.nextthink = time + self.respawntime + crandom() * self.respawntimejitter; + this.think = func_breakable_restore_self; + this.nextthink = time + this.respawntime + crandom() * this.respawntimejitter; } - oldmsg = self.message; - self.message = ""; - SUB_UseTargets(); - self.message = oldmsg; + oldmsg = this.message; + this.message = ""; + SUB_UseTargets(this, act, trigger); + this.message = oldmsg; +} + +void func_breakable_destroy_self() +{SELFPARAM(); + func_breakable_destroy(this, NULL, NULL); } void func_breakable_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) @@ -243,7 +253,7 @@ void func_breakable_damage(entity this, entity inflictor, entity attacker, float WaypointSprite_Ping(this.sprite); WaypointSprite_UpdateHealth(this.sprite, this.health); } - WITHSELF(this, func_breakable_colormod()); + func_breakable_colormod(this); if(this.health <= 0) { @@ -261,18 +271,18 @@ void func_breakable_damage(entity this, entity inflictor, entity attacker, float // do not explode NOW but in the NEXT FRAME! // because recursive calls to RadiusDamage are not allowed this.nextthink = time; - this.think = func_breakable_destroy; + this.think = func_breakable_destroy_self; } } void func_breakable_reset(entity this) { this.team = this.team_saved; - func_breakable_look_restore(); + func_breakable_look_restore(this); if(this.spawnflags & 1) - func_breakable_behave_destroyed(); + func_breakable_behave_destroyed(this); else - func_breakable_behave_restore(); + func_breakable_behave_restore(this); CSQCMODEL_AUTOUPDATE(this); } diff --git a/qcsrc/common/triggers/func/button.qc b/qcsrc/common/triggers/func/button.qc index e9ae0a5472..a1cabdc6c0 100644 --- a/qcsrc/common/triggers/func/button.qc +++ b/qcsrc/common/triggers/func/button.qc @@ -9,8 +9,7 @@ void button_wait() self.state = STATE_TOP; self.SUB_NEXTTHINK = self.SUB_LTIME + self.wait; self.SUB_THINK = button_return; - activator = self.enemy; - SUB_UseTargets(); + SUB_UseTargets(self, self.enemy, NULL); self.frame = 1; // use alternate textures } @@ -60,13 +59,13 @@ void button_reset() self.takedamage = DAMAGE_YES; // can be shot again } -void button_use() -{SELFPARAM(); - if(self.active != ACTIVE_ACTIVE) +void button_use(entity this, entity actor, entity trigger) +{ + if(this.active != ACTIVE_ACTIVE) return; - self.enemy = activator; - button_fire (); + this.enemy = actor; + WITHSELF(this, button_fire()); } void button_touch() diff --git a/qcsrc/common/triggers/func/conveyor.qc b/qcsrc/common/triggers/func/conveyor.qc index 583c737438..5cd17e7bfc 100644 --- a/qcsrc/common/triggers/func/conveyor.qc +++ b/qcsrc/common/triggers/func/conveyor.qc @@ -58,11 +58,11 @@ void conveyor_think() #ifdef SVQC -void conveyor_use() -{SELFPARAM(); - self.state = !self.state; +void conveyor_use(entity this, entity actor, entity trigger) +{ + this.state = !this.state; - self.SendFlags |= 2; + this.SendFlags |= 2; } void conveyor_reset(entity this) diff --git a/qcsrc/common/triggers/func/door.qc b/qcsrc/common/triggers/func/door.qc index 1e19dfafc7..30de40fa9c 100644 --- a/qcsrc/common/triggers/func/door.qc +++ b/qcsrc/common/triggers/func/door.qc @@ -141,7 +141,7 @@ void door_go_up() string oldmessage; oldmessage = self.message; self.message = ""; - SUB_UseTargets(); + SUB_UseTargets(self, NULL, NULL); self.message = oldmessage; } @@ -206,16 +206,15 @@ bool door_check_keys(entity door, entity player) return false; } -void door_fire() -{SELFPARAM(); - entity starte; - - if (self.owner != self) - objerror ("door_fire: self.owner != self"); +void door_fire(entity this, entity actor, entity trigger) +{ + entity starte; + if (this.owner != this) + objerror ("door_fire: this.owner != this"); - if (self.spawnflags & DOOR_TOGGLE) + if (this.spawnflags & DOOR_TOGGLE) { - if (self.state == STATE_UP || self.state == STATE_TOP) + if (this.state == STATE_UP || this.state == STATE_TOP) { starte = self; do @@ -262,14 +261,12 @@ void door_fire() setself(this); } -void door_use() -{SELFPARAM(); +void door_use(entity this, entity actor, entity trigger) +{ //dprint("door_use (model: ");dprint(self.model);dprint(")\n"); - if (self.owner) - { - WITHSELF(self.owner, door_fire()); - } + if (this.owner) + WITHSELF(this.owner, door_fire(this.owner, actor, trigger)); } void door_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) @@ -289,7 +286,7 @@ void door_damage(entity this, entity inflictor, entity attacker, float damage, i { this.owner.health = this.owner.max_health; this.owner.takedamage = DAMAGE_NO; // wil be reset upon return - WITHSELF(this.owner, door_use()); + door_use(this.owner, NULL, NULL); } } @@ -415,7 +412,7 @@ void door_rotating_go_up() string oldmessage; oldmessage = self.message; self.message = ""; - SUB_UseTargets(); + SUB_UseTargets(self, NULL, other); // TODO: is other needed here? self.message = oldmessage; } @@ -447,10 +444,7 @@ void door_trigger_touch() self.door_finished = time + 1; - activator = other; - - setself(self.owner); - door_use (); + door_use(this.owner, other, NULL); } void door_spawnfield(vector fmins, vector fmaxs) diff --git a/qcsrc/common/triggers/func/door_secret.qc b/qcsrc/common/triggers/func/door_secret.qc index 70b5a0a09e..3e45302040 100644 --- a/qcsrc/common/triggers/func/door_secret.qc +++ b/qcsrc/common/triggers/func/door_secret.qc @@ -13,59 +13,59 @@ const float SECRET_1ST_DOWN = 4; // 1st move is down from arrow const float SECRET_NO_SHOOT = 8; // only opened by trigger const float SECRET_YES_SHOOT = 16; // shootable even if targeted -void fd_secret_use() -{SELFPARAM(); +void fd_secret_use(entity this, entity actor, entity trigger) +{ float temp; string message_save; - self.health = 10000; - self.bot_attack = true; + this.health = 10000; + this.bot_attack = true; // exit if still moving around... - if (self.origin != self.oldorigin) + if (this.origin != this.oldorigin) return; - message_save = self.message; - self.message = ""; // no more message - SUB_UseTargets(); // fire all targets / killtargets - self.message = message_save; + message_save = this.message; + this.message = ""; // no more message + SUB_UseTargets(this, actor, trigger); // fire all targets / killtargets + this.message = message_save; - self.velocity = '0 0 0'; + this.velocity = '0 0 0'; // Make a sound, wait a little... - if (self.noise1 != "") - _sound(self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM); - self.SUB_NEXTTHINK = self.SUB_LTIME + 0.1; + if (this.noise1 != "") + _sound(this, CH_TRIGGER_SINGLE, this.noise1, VOL_BASE, ATTEN_NORM); + this.SUB_NEXTTHINK = this.SUB_LTIME + 0.1; - temp = 1 - (self.spawnflags & SECRET_1ST_LEFT); // 1 or -1 - makevectors(self.mangle); + temp = 1 - (this.spawnflags & SECRET_1ST_LEFT); // 1 or -1 + makevectors(this.mangle); - if (!self.t_width) + if (!this.t_width) { - if (self.spawnflags & SECRET_1ST_DOWN) - self.t_width = fabs(v_up * self.size); + if (this.spawnflags & SECRET_1ST_DOWN) + this.t_width = fabs(v_up * this.size); else - self.t_width = fabs(v_right * self.size); + this.t_width = fabs(v_right * this.size); } - if (!self.t_length) - self.t_length = fabs(v_forward * self.size); + if (!this.t_length) + this.t_length = fabs(v_forward * this.size); - if (self.spawnflags & SECRET_1ST_DOWN) - self.dest1 = self.origin - v_up * self.t_width; + if (this.spawnflags & SECRET_1ST_DOWN) + this.dest1 = this.origin - v_up * this.t_width; else - self.dest1 = self.origin + v_right * (self.t_width * temp); + this.dest1 = this.origin + v_right * (this.t_width * temp); - self.dest2 = self.dest1 + v_forward * self.t_length; - SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move1); - if (self.noise2 != "") - _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM); + this.dest2 = this.dest1 + v_forward * this.t_length; + WITHSELF(this, SUB_CalcMove(this.dest1, TSPEED_LINEAR, this.speed, fd_secret_move1)); + if (this.noise2 != "") + _sound(this, CH_TRIGGER_SINGLE, this.noise2, VOL_BASE, ATTEN_NORM); } void fd_secret_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { - WITHSELF(this, fd_secret_use()); + fd_secret_use(this, NULL, NULL); } // Wait after first movement... diff --git a/qcsrc/common/triggers/func/pointparticles.qc b/qcsrc/common/triggers/func/pointparticles.qc index 62b4d5a362..9cec88f994 100644 --- a/qcsrc/common/triggers/func/pointparticles.qc +++ b/qcsrc/common/triggers/func/pointparticles.qc @@ -87,10 +87,10 @@ bool pointparticles_SendEntity(entity this, entity to, float fl) return 1; } -void pointparticles_use() -{SELFPARAM(); - self.state = !self.state; - self.SendFlags |= 2; +void pointparticles_use(entity this, entity actor, entity trigger) +{ + this.state = !this.state; + this.SendFlags |= 2; } void pointparticles_think() diff --git a/qcsrc/common/triggers/func/rotating.qc b/qcsrc/common/triggers/func/rotating.qc index be2c7ed9c3..3f481ae78f 100644 --- a/qcsrc/common/triggers/func/rotating.qc +++ b/qcsrc/common/triggers/func/rotating.qc @@ -1,21 +1,20 @@ #ifdef SVQC -void func_rotating_setactive(float astate) -{SELFPARAM(); - +void func_rotating_setactive(entity this, int astate) +{ if (astate == ACTIVE_TOGGLE) { - if(self.active == ACTIVE_ACTIVE) - self.active = ACTIVE_NOT; + if(this.active == ACTIVE_ACTIVE) + this.active = ACTIVE_NOT; else - self.active = ACTIVE_ACTIVE; + this.active = ACTIVE_ACTIVE; } else - self.active = astate; + this.active = astate; - if(self.active == ACTIVE_NOT) - self.avelocity = '0 0 0'; + if(this.active == ACTIVE_NOT) + this.avelocity = '0 0 0'; else - self.avelocity = self.pos1; + this.avelocity = this.pos1; } /*QUAKED spawnfunc_func_rotating (0 .5 .8) ? - - X_AXIS Y_AXIS diff --git a/qcsrc/common/triggers/func/train.qc b/qcsrc/common/triggers/func/train.qc index 2b27c7355c..013d4597fb 100644 --- a/qcsrc/common/triggers/func/train.qc +++ b/qcsrc/common/triggers/func/train.qc @@ -1,11 +1,11 @@ .float train_wait_turning; void() train_next; #ifdef SVQC -void train_use(); +void train_use(entity this, entity actor, entity trigger); #endif void train_wait() {SELFPARAM(); - WITHSELF(self.enemy, SUB_UseTargets()); + SUB_UseTargets(this.enemy, NULL, NULL); self.enemy = world; // if turning is enabled, the train will turn toward the next point while waiting @@ -176,12 +176,11 @@ void train_link() //Net_LinkEntity(self, 0, false, train_send); } -void train_use() +void train_use(entity this, entity actor, entity trigger) { - SELFPARAM(); - self.SUB_NEXTTHINK = self.SUB_LTIME + 1; - self.SUB_THINK = train_next; - self.use = func_null; // not again + this.SUB_NEXTTHINK = this.SUB_LTIME + 1; + this.SUB_THINK = train_next; + this.use = func_null; // not again } void func_train_find(entity this) diff --git a/qcsrc/common/triggers/misc/_mod.inc b/qcsrc/common/triggers/misc/_mod.inc index 5a6a06a93a..4a8ec06ef5 100644 --- a/qcsrc/common/triggers/misc/_mod.inc +++ b/qcsrc/common/triggers/misc/_mod.inc @@ -1,6 +1,6 @@ // generated file; do not modify -#include "corner.qc" -#include "follow.qc" -#include "include.qc" -#include "laser.qc" -#include "teleport_dest.qc" +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/misc/_mod.qh b/qcsrc/common/triggers/misc/_mod.qh new file mode 100644 index 0000000000..98615ccb0c --- /dev/null +++ b/qcsrc/common/triggers/misc/_mod.qh @@ -0,0 +1,6 @@ +// generated file; do not modify +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/misc/laser.qc b/qcsrc/common/triggers/misc/laser.qc index 48e23a287d..6e589eddf0 100644 --- a/qcsrc/common/triggers/misc/laser.qc +++ b/qcsrc/common/triggers/misc/laser.qc @@ -10,42 +10,42 @@ REGISTER_NET_LINKED(ENT_CLIENT_LASER) #ifdef SVQC .float modelscale; -void misc_laser_aim() -{SELFPARAM(); +void misc_laser_aim(entity this) +{ vector a; - if(self.enemy) + if(this.enemy) { - if(self.spawnflags & 2) + if(this.spawnflags & 2) { - if(self.enemy.origin != self.mangle) + if(this.enemy.origin != this.mangle) { - self.mangle = self.enemy.origin; - self.SendFlags |= 2; + this.mangle = this.enemy.origin; + this.SendFlags |= 2; } } else { - a = vectoangles(self.enemy.origin - self.origin); + a = vectoangles(this.enemy.origin - this.origin); a_x = -a_x; - if(a != self.mangle) + if(a != this.mangle) { - self.mangle = a; - self.SendFlags |= 2; + this.mangle = a; + this.SendFlags |= 2; } } } else { - if(self.angles != self.mangle) + if(this.angles != this.mangle) { - self.mangle = self.angles; - self.SendFlags |= 2; + this.mangle = this.angles; + this.SendFlags |= 2; } } - if(self.origin != self.oldorigin) + if(this.origin != this.oldorigin) { - self.SendFlags |= 1; - self.oldorigin = self.origin; + this.SendFlags |= 1; + this.oldorigin = this.origin; } } @@ -67,7 +67,7 @@ void misc_laser_think() if(!self.state) return; - misc_laser_aim(); + misc_laser_aim(this); if(self.enemy) { @@ -97,8 +97,7 @@ void misc_laser_think() { self.count = 1; - activator = self.enemy.pusher; - WITHSELF(self.enemy, SUB_UseTargets()); + SUB_UseTargets(self.enemy, self.enemy.pusher, NULL); } } else @@ -107,8 +106,7 @@ void misc_laser_think() { self.count = 0; - activator = self.enemy.pusher; - WITHSELF(self.enemy, SUB_UseTargets()); + SUB_UseTargets(self.enemy, self.enemy.pusher, NULL); } } } @@ -188,11 +186,11 @@ Keys: "dmg" damage per second (-1 for a laser that kills immediately) */ -void laser_use() -{SELFPARAM(); - self.state = !self.state; - self.SendFlags |= 4; - misc_laser_aim(); +void laser_use(entity this, entity actor, entity trigger) +{ + this.state = !this.state; + this.SendFlags |= 4; + misc_laser_aim(this); } void laser_reset(entity this) diff --git a/qcsrc/common/triggers/platforms.qc b/qcsrc/common/triggers/platforms.qc index a2efc1142e..7429f2b355 100644 --- a/qcsrc/common/triggers/platforms.qc +++ b/qcsrc/common/triggers/platforms.qc @@ -133,16 +133,16 @@ void plat_outside_touch() plat_go_down (); } -void plat_trigger_use() -{SELFPARAM(); +void plat_trigger_use(entity this, entity actor, entity trigger) +{ #ifdef SVQC - if (self.think) + if (this.think) return; // already activated #elif defined(CSQC) - if(self.move_think) + if(this.move_think) return; #endif - plat_go_down(); + WITHSELF(this, plat_go_down()); } @@ -176,12 +176,12 @@ void plat_crush() } } -void plat_use() -{SELFPARAM(); - self.use = func_null; - if (self.state != 4) +void plat_use(entity this, entity actor, entity trigger) +{ + this.use = func_null; + if (this.state != 4) objerror ("plat_use: not in up state"); - plat_go_down(); + WITHSELF(this, plat_go_down()); } .string sound1, sound2; diff --git a/qcsrc/common/triggers/platforms.qh b/qcsrc/common/triggers/platforms.qh index e0a581b7cf..9a32e327a2 100644 --- a/qcsrc/common/triggers/platforms.qh +++ b/qcsrc/common/triggers/platforms.qh @@ -5,7 +5,7 @@ void() plat_center_touch; void() plat_outside_touch; -void() plat_trigger_use; +void plat_trigger_use(entity this, entity actor, entity trigger); void() plat_go_up; void() plat_go_down; void() plat_crush; diff --git a/qcsrc/common/triggers/subs.qc b/qcsrc/common/triggers/subs.qc index 87c9c32909..7d6ea9de98 100644 --- a/qcsrc/common/triggers/subs.qc +++ b/qcsrc/common/triggers/subs.qc @@ -2,7 +2,6 @@ void SUB_NullThink() { } void() SUB_CalcMoveDone; void() SUB_CalcAngleMoveDone; -//void() SUB_UseTargets; /* ================== diff --git a/qcsrc/common/triggers/subs.qh b/qcsrc/common/triggers/subs.qh index aebda5d0a3..6a84426137 100644 --- a/qcsrc/common/triggers/subs.qh +++ b/qcsrc/common/triggers/subs.qh @@ -36,6 +36,7 @@ #endif + void SUB_SetFade (entity ent, float when, float fading_time); void SUB_VanishOrRemove (entity ent); @@ -55,7 +56,7 @@ void SUB_VanishOrRemove (entity ent); .string platmovetype; .float platmovetype_start, platmovetype_end; -entity activator; +//entity activator; .string killtarget; diff --git a/qcsrc/common/triggers/target/_mod.inc b/qcsrc/common/triggers/target/_mod.inc index fdfabf75b0..195d5e5348 100644 --- a/qcsrc/common/triggers/target/_mod.inc +++ b/qcsrc/common/triggers/target/_mod.inc @@ -1,8 +1,8 @@ // generated file; do not modify -#include "changelevel.qc" -#include "include.qc" -#include "location.qc" -#include "music.qc" -#include "spawn.qc" -#include "speaker.qc" -#include "voicescript.qc" +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/target/_mod.qh b/qcsrc/common/triggers/target/_mod.qh new file mode 100644 index 0000000000..a5462d497e --- /dev/null +++ b/qcsrc/common/triggers/target/_mod.qh @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/target/changelevel.qc b/qcsrc/common/triggers/target/changelevel.qc index 69f444073f..d4bc850de1 100644 --- a/qcsrc/common/triggers/target/changelevel.qc +++ b/qcsrc/common/triggers/target/changelevel.qc @@ -2,42 +2,40 @@ .string chmap, gametype; .entity chlevel_targ; - -void target_changelevel_use() +void target_changelevel_use(entity this, entity actor, entity trigger) { - SELFPARAM(); - if(self.spawnflags & 2) + if(this.spawnflags & 2) { // simply don't react if a non-player triggers it - if(!IS_PLAYER(activator)) { return; } + if(!IS_PLAYER(actor)) { return; } - activator.chlevel_targ = self; + actor.chlevel_targ = this; int plnum = 0; int realplnum = 0; // let's not count bots FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it), { ++realplnum; - if(it.chlevel_targ == self) + if(it.chlevel_targ == this) ++plnum; }); - if(plnum < ceil(realplnum * min(1, self.count))) // 70% of players + if(plnum < ceil(realplnum * min(1, this.count))) // 70% of players return; } - if(self.gametype != "") - MapInfo_SwitchGameType(MapInfo_Type_FromString(self.gametype)); + if(this.gametype != "") + MapInfo_SwitchGameType(MapInfo_Type_FromString(this.gametype)); - if (self.chmap == "") + if (this.chmap == "") localcmd("endmatch\n"); else - localcmd(strcat("changelevel ", self.chmap, "\n")); + localcmd(strcat("changelevel ", this.chmap, "\n")); } spawnfunc(target_changelevel) { - self.use = target_changelevel_use; + this.use = target_changelevel_use; - if(!self.count) { self.count = 0.7; } + if(!this.count) { this.count = 0.7; } } #endif diff --git a/qcsrc/common/triggers/target/music.qc b/qcsrc/common/triggers/target/music.qc index 5a4e86c48b..c48a0ba26b 100644 --- a/qcsrc/common/triggers/target/music.qc +++ b/qcsrc/common/triggers/target/music.qc @@ -44,16 +44,16 @@ void target_music_kill() WITHSELF(it, target_music_sendto(MSG_ALL, 0)); }); } -void target_music_use() +void target_music_use(entity this, entity actor, entity trigger) { - if(!activator) + if(!actor) return; - if(IS_REAL_CLIENT(activator)) + if(IS_REAL_CLIENT(actor)) { - msg_entity = activator; + msg_entity = actor; target_music_sendto(MSG_ONE, 1); } - FOREACH_CLIENT(IS_SPEC(it) && it.enemy == activator, { + FOREACH_CLIENT(IS_SPEC(it) && it.enemy == actor, { msg_entity = it; target_music_sendto(MSG_ONE, 1); }); @@ -132,10 +132,10 @@ void trigger_music_reset(entity this) this.cnt = !(this.spawnflags & 1); this.SendFlags |= 0x80; } -void trigger_music_use() -{SELFPARAM(); - self.cnt = !self.cnt; - self.SendFlags |= 0x80; +void trigger_music_use(entity this, entity actor, entity trigger) +{ + this.cnt = !this.cnt; + this.SendFlags |= 0x80; } spawnfunc(trigger_music) { diff --git a/qcsrc/common/triggers/target/spawn.qc b/qcsrc/common/triggers/target/spawn.qc index 82793c9367..74ac8fd99a 100644 --- a/qcsrc/common/triggers/target/spawn.qc +++ b/qcsrc/common/triggers/target/spawn.qc @@ -31,13 +31,12 @@ void target_spawn_helper_setsize() setsize(self, self.mins, self.maxs); } -void target_spawn_edit_entity(entity e, string msg, entity kt, entity t2, entity t3, entity t4, entity act) -{SELFPARAM(); +void target_spawn_edit_entity(entity this, entity e, string msg, entity kt, entity t2, entity t3, entity t4, entity act, entity trigger) +{ float i, n, valuefieldpos; string key, value, valuefield, valueoffset, valueoffsetrandom; entity valueent; vector data, data2; - entity oldactivator; n = tokenize_console(msg); @@ -97,7 +96,7 @@ void target_spawn_edit_entity(entity e, string msg, entity kt, entity t2, entity if(value == "self") { - valueent = self; + valueent = this; value = ""; } else if(value == "activator") @@ -107,7 +106,7 @@ void target_spawn_edit_entity(entity e, string msg, entity kt, entity t2, entity } else if(value == "other") { - valueent = other; + valueent = trigger; value = ""; } else if(value == "pusher") @@ -218,11 +217,7 @@ void target_spawn_edit_entity(entity e, string msg, entity kt, entity t2, entity value = strcat("target_spawn_helper", value); putentityfieldstring(target_spawn_spawnfunc_field, e, value); - oldactivator = activator; - - activator = act; WITHSELF(e, e.target_spawn_spawnfunc(e)); - activator = oldactivator; // We called an external function, so we have to re-tokenize msg. n = tokenize_console(msg); @@ -236,72 +231,72 @@ void target_spawn_edit_entity(entity e, string msg, entity kt, entity t2, entity } } -void target_spawn_useon(entity e) -{SELFPARAM(); - self.target_spawn_activator = activator; +void target_spawn_useon(entity e, entity this, entity actor, entity trigger) +{ + this.target_spawn_activator = actor; target_spawn_edit_entity( + this, e, - self.message, - find(world, targetname, self.killtarget), - find(world, targetname, self.target2), - find(world, targetname, self.target3), - find(world, targetname, self.target4), - activator + this.message, + find(world, targetname, this.killtarget), + find(world, targetname, this.target2), + find(world, targetname, this.target3), + find(world, targetname, this.target4), + actor, + trigger ); } -float target_spawn_cancreate() -{SELFPARAM(); +bool target_spawn_cancreate(entity this) +{ float c; entity e; - c = self.count; + c = this.count; if(c == 0) // no limit? - return 1; + return true; ++c; // increase count to not include MYSELF - for(e = world; (e = findfloat(e, target_spawn_id, self.target_spawn_id)); --c) + for(e = world; (e = findfloat(e, target_spawn_id, this.target_spawn_id)); --c) ; // if c now is 0, we have AT LEAST the given count (maybe more), so don't spawn any more if(c == 0) - return 0; - return 1; + return false; + return true; } -void target_spawn_use() -{SELFPARAM(); - entity e; - - if(self.target == "") +void target_spawn_use(entity this, entity actor, entity trigger) +{ + if(this.target == "") { // spawn new entity - if(!target_spawn_cancreate()) + if(!target_spawn_cancreate(this)) return; - e = spawn(); + entity e = spawn(); e.spawnfunc_checked = true; - target_spawn_useon(e); - e.target_spawn_id = self.target_spawn_id; + target_spawn_useon(e, this, actor, trigger); + e.target_spawn_id = this.target_spawn_id; } - else if(self.target == "*activator") + else if(this.target == "*activator") { // edit entity - if(activator) - target_spawn_useon(activator); + if(actor) + target_spawn_useon(actor, this, actor, trigger); } else { // edit entity - for(e = world; (e = find(e, targetname, self.target)); ) - target_spawn_useon(e); + for(entity e = world; (e = find(e, targetname, this.target)); ) + target_spawn_useon(e, this, actor, trigger); } } void target_spawn_spawnfirst(entity this) { - activator = self.target_spawn_activator; - if(self.spawnflags & 2) - target_spawn_use(); + entity act = this.target_spawn_activator; + if(this.spawnflags & 2) + target_spawn_use(this, act, NULL); } void initialize_field_db() diff --git a/qcsrc/common/triggers/target/speaker.qc b/qcsrc/common/triggers/target/speaker.qc index 3c43b0e9ea..046128f796 100644 --- a/qcsrc/common/triggers/target/speaker.qc +++ b/qcsrc/common/triggers/target/speaker.qc @@ -1,21 +1,21 @@ #ifdef SVQC // TODO add a way to do looped sounds with sound(); then complete this entity -void target_speaker_use_off(); -void target_speaker_use_activator() -{SELFPARAM(); - if (!IS_REAL_CLIENT(activator)) +void target_speaker_use_off(entity this, entity actor, entity trigger); +void target_speaker_use_activator(entity this, entity actor, entity trigger) +{ + if (!IS_REAL_CLIENT(actor)) return; string snd; - if(substring(self.noise, 0, 1) == "*") + if(substring(this.noise, 0, 1) == "*") { - var .string sample = GetVoiceMessageSampleField(substring(self.noise, 1, -1)); + var .string sample = GetVoiceMessageSampleField(substring(this.noise, 1, -1)); if(GetPlayerSoundSampleField_notFound) snd = SND(Null); - else if(activator.(sample) == "") + else if(actor.(sample) == "") snd = SND(Null); else { - tokenize_console(activator.(sample)); + tokenize_console(actor.(sample)); float n; n = stof(argv(1)); if(n > 0) @@ -25,23 +25,23 @@ void target_speaker_use_activator() } } else - snd = self.noise; - msg_entity = activator; - soundto(MSG_ONE, self, CH_TRIGGER, snd, VOL_BASE * self.volume, self.atten); + snd = this.noise; + msg_entity = actor; + soundto(MSG_ONE, this, CH_TRIGGER, snd, VOL_BASE * this.volume, this.atten); } -void target_speaker_use_on() -{SELFPARAM(); +void target_speaker_use_on(entity this, entity actor, entity trigger) +{ string snd; - if(substring(self.noise, 0, 1) == "*") + if(substring(this.noise, 0, 1) == "*") { - var .string sample = GetVoiceMessageSampleField(substring(self.noise, 1, -1)); + var .string sample = GetVoiceMessageSampleField(substring(this.noise, 1, -1)); if(GetPlayerSoundSampleField_notFound) snd = SND(Null); - else if(activator.(sample) == "") + else if(actor.(sample) == "") snd = SND(Null); else { - tokenize_console(activator.(sample)); + tokenize_console(actor.(sample)); float n; n = stof(argv(1)); if(n > 0) @@ -51,27 +51,27 @@ void target_speaker_use_on() } } else - snd = self.noise; - _sound(self, CH_TRIGGER_SINGLE, snd, VOL_BASE * self.volume, self.atten); - if(self.spawnflags & 3) - self.use = target_speaker_use_off; + snd = this.noise; + _sound(this, CH_TRIGGER_SINGLE, snd, VOL_BASE * this.volume, this.atten); + if(this.spawnflags & 3) + this.use = target_speaker_use_off; } -void target_speaker_use_off() -{SELFPARAM(); - sound(self, CH_TRIGGER_SINGLE, SND_Null, VOL_BASE * self.volume, self.atten); - self.use = target_speaker_use_on; +void target_speaker_use_off(entity this, entity actor, entity trigger) +{ + sound(this, CH_TRIGGER_SINGLE, SND_Null, VOL_BASE * this.volume, this.atten); + this.use = target_speaker_use_on; } void target_speaker_reset(entity this) { if(this.spawnflags & 1) // LOOPED_ON { if(this.use == target_speaker_use_on) - target_speaker_use_on(); + target_speaker_use_on(this, NULL, NULL); } else if(this.spawnflags & 2) { if(this.use == target_speaker_use_off) - target_speaker_use_off(); + target_speaker_use_off(this, NULL, NULL); } } @@ -101,7 +101,7 @@ spawnfunc(target_speaker) self.use = target_speaker_use_activator; else if(self.spawnflags & 1) // LOOPED_ON { - target_speaker_use_on(); + target_speaker_use_on(self, NULL, NULL); self.reset = target_speaker_reset; } else if(self.spawnflags & 2) // LOOPED_OFF diff --git a/qcsrc/common/triggers/target/voicescript.qc b/qcsrc/common/triggers/target/voicescript.qc index 1d1816a774..e843317709 100644 --- a/qcsrc/common/triggers/target/voicescript.qc +++ b/qcsrc/common/triggers/target/voicescript.qc @@ -9,13 +9,13 @@ void target_voicescript_clear(entity pl) pl.voicescript = world; } -void target_voicescript_use() -{SELFPARAM(); - if(activator.voicescript != self) +void target_voicescript_use(entity this, entity actor, entity trigger) +{ + if(actor.voicescript != this) { - activator.voicescript = self; - activator.voicescript_index = 0; - activator.voicescript_nextthink = time + self.delay; + actor.voicescript = this; + actor.voicescript_index = 0; + actor.voicescript_nextthink = time + this.delay; } } diff --git a/qcsrc/common/triggers/teleporters.qh b/qcsrc/common/triggers/teleporters.qh index b0571dc310..9366678b15 100644 --- a/qcsrc/common/triggers/teleporters.qh +++ b/qcsrc/common/triggers/teleporters.qh @@ -30,7 +30,7 @@ entity teleport_first; #ifdef SVQC -void trigger_teleport_use(); +void trigger_teleport_use(entity this, entity actor, entity trigger); #define TDEATHLOOP(o) \ entity head; \ diff --git a/qcsrc/common/triggers/trigger/_mod.inc b/qcsrc/common/triggers/trigger/_mod.inc index 03fa001a8b..05a496eb39 100644 --- a/qcsrc/common/triggers/trigger/_mod.inc +++ b/qcsrc/common/triggers/trigger/_mod.inc @@ -1,25 +1,25 @@ // generated file; do not modify -#include "counter.qc" -#include "delay.qc" -#include "disablerelay.qc" -#include "flipflop.qc" -#include "gamestart.qc" -#include "gravity.qc" -#include "heal.qc" -#include "hurt.qc" -#include "impulse.qc" -#include "include.qc" -#include "jumppads.qc" -#include "keylock.qc" -#include "magicear.qc" -#include "monoflop.qc" -#include "multi.qc" -#include "multivibrator.qc" -#include "relay.qc" -#include "relay_activators.qc" -#include "relay_if.qc" -#include "relay_teamcheck.qc" -#include "secret.qc" -#include "swamp.qc" -#include "teleport.qc" -#include "viewloc.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/trigger/_mod.qh b/qcsrc/common/triggers/trigger/_mod.qh new file mode 100644 index 0000000000..2c7477b1d5 --- /dev/null +++ b/qcsrc/common/triggers/trigger/_mod.qh @@ -0,0 +1,25 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/triggers/trigger/counter.qc b/qcsrc/common/triggers/trigger/counter.qc index d5811e479e..5ada6805fc 100644 --- a/qcsrc/common/triggers/trigger/counter.qc +++ b/qcsrc/common/triggers/trigger/counter.qc @@ -1,25 +1,25 @@ #ifdef SVQC -void counter_use() -{SELFPARAM(); - self.count -= 1; - if (self.count < 0) +void counter_use(entity this, entity actor, entity trigger) +{ + this.count -= 1; + if (this.count < 0) return; - if (self.count == 0) + if (this.count == 0) { - if(IS_PLAYER(activator) && (self.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) - Send_Notification(NOTIF_ONE, activator, MSG_CENTER, CENTER_SEQUENCE_COMPLETED); + if(IS_PLAYER(actor) && (this.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) + Send_Notification(NOTIF_ONE, actor, MSG_CENTER, CENTER_SEQUENCE_COMPLETED); - self.enemy = activator; - multi_trigger (); + this.enemy = actor; + WITHSELF(this, multi_trigger ()); } else { - if(IS_PLAYER(activator) && (self.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) - if(self.count >= 4) - Send_Notification(NOTIF_ONE, activator, MSG_CENTER, CENTER_SEQUENCE_COUNTER); + if(IS_PLAYER(actor) && (this.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) + if(this.count >= 4) + Send_Notification(NOTIF_ONE, actor, MSG_CENTER, CENTER_SEQUENCE_COUNTER); else - Send_Notification(NOTIF_ONE, activator, MSG_CENTER, CENTER_SEQUENCE_COUNTER_FEWMORE, self.count); + Send_Notification(NOTIF_ONE, actor, MSG_CENTER, CENTER_SEQUENCE_COUNTER_FEWMORE, this.count); } } diff --git a/qcsrc/common/triggers/trigger/delay.qc b/qcsrc/common/triggers/trigger/delay.qc index fb341ebb77..02c1aa968b 100644 --- a/qcsrc/common/triggers/trigger/delay.qc +++ b/qcsrc/common/triggers/trigger/delay.qc @@ -1,8 +1,8 @@ #ifdef SVQC -void delay_use() -{SELFPARAM(); - self.think = SUB_UseTargets; - self.nextthink = self.wait; +void delay_use(entity this, entity actor, entity trigger) +{ + this.think = SUB_UseTargets_self; + this.nextthink = this.wait; } void delay_reset(entity this) diff --git a/qcsrc/common/triggers/trigger/disablerelay.qc b/qcsrc/common/triggers/trigger/disablerelay.qc index a1f13d277e..a09e0ba097 100644 --- a/qcsrc/common/triggers/trigger/disablerelay.qc +++ b/qcsrc/common/triggers/trigger/disablerelay.qc @@ -1,12 +1,9 @@ #ifdef SVQC -void trigger_disablerelay_use() -{SELFPARAM(); - entity e; - - float a, b; - a = b = 0; +void trigger_disablerelay_use(entity this, entity actor, entity trigger) +{ + int a = 0, b = 0; - for(e = world; (e = find(e, targetname, self.target)); ) + for(entity e = world; (e = find(e, targetname, this.target)); ) { if(e.use == SUB_UseTargets) { @@ -26,6 +23,6 @@ void trigger_disablerelay_use() spawnfunc(trigger_disablerelay) { - self.use = trigger_disablerelay_use; + this.use = trigger_disablerelay_use; } #endif diff --git a/qcsrc/common/triggers/trigger/flipflop.qc b/qcsrc/common/triggers/trigger/flipflop.qc index d2549f6c50..e4923bdf54 100644 --- a/qcsrc/common/triggers/trigger/flipflop.qc +++ b/qcsrc/common/triggers/trigger/flipflop.qc @@ -2,11 +2,11 @@ /*QUAKED spawnfunc_trigger_flipflop (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ENABLED "Flip-flop" trigger gate... lets only every second trigger event through */ -void flipflop_use() -{SELFPARAM(); - self.state = !self.state; - if(self.state) - SUB_UseTargets(); +void flipflop_use(entity this, entity actor, entity trigger) +{ + this.state = !this.state; + if(this.state) + SUB_UseTargets(this, actor, trigger); } spawnfunc(trigger_flipflop) diff --git a/qcsrc/common/triggers/trigger/gamestart.qc b/qcsrc/common/triggers/trigger/gamestart.qc index 9c0c0791ab..5f3206a2af 100644 --- a/qcsrc/common/triggers/trigger/gamestart.qc +++ b/qcsrc/common/triggers/trigger/gamestart.qc @@ -1,24 +1,28 @@ #ifdef SVQC -void gamestart_use(entity this) +void gamestart_use(entity this, entity actor, entity trigger) { - activator = self; - SUB_UseTargets(); - remove(self); + SUB_UseTargets(this, this, trigger); + remove(this); +} + +void gamestart_use_this(entity this) +{ + gamestart_use(this, NULL, NULL); } void self_spawnfunc_trigger_gamestart(); spawnfunc(trigger_gamestart) { - setuse(this, gamestart_use); + this.use = gamestart_use; this.reset2 = self_spawnfunc_trigger_gamestart; if(this.wait) { - this.think = this.use; + this.think = adaptor_think2use; this.nextthink = game_starttime + this.wait; } else - InitializeEntity(this, gamestart_use, INITPRIO_FINDTARGET); + InitializeEntity(this, gamestart_use_this, INITPRIO_FINDTARGET); } void self_spawnfunc_trigger_gamestart() { SELFPARAM(); spawnfunc_trigger_gamestart(this); } diff --git a/qcsrc/common/triggers/trigger/gravity.qc b/qcsrc/common/triggers/trigger/gravity.qc index a6b3eedde6..c7dd586cb3 100644 --- a/qcsrc/common/triggers/trigger/gravity.qc +++ b/qcsrc/common/triggers/trigger/gravity.qc @@ -32,9 +32,9 @@ void trigger_gravity_check_think() } } -void trigger_gravity_use() -{SELFPARAM(); - self.state = !self.state; +void trigger_gravity_use(entity this, entity actor, entity trigger) +{ + this.state = !this.state; } void trigger_gravity_touch() diff --git a/qcsrc/common/triggers/trigger/hurt.qc b/qcsrc/common/triggers/trigger/hurt.qc index 771b4f0648..a7ee567ebc 100644 --- a/qcsrc/common/triggers/trigger/hurt.qc +++ b/qcsrc/common/triggers/trigger/hurt.qc @@ -1,10 +1,10 @@ #ifdef SVQC -void trigger_hurt_use() -{SELFPARAM(); - if(IS_PLAYER(activator)) - self.enemy = activator; +void trigger_hurt_use(entity this, entity actor, entity trigger) +{ + if(IS_PLAYER(actor)) + this.enemy = actor; else - self.enemy = world; // let's just destroy it, if taking over is too much work + this.enemy = world; // let's just destroy it, if taking over is too much work } .float triggerhurttime; diff --git a/qcsrc/common/triggers/trigger/jumppads.qc b/qcsrc/common/triggers/trigger/jumppads.qc index 556fe66358..44413a9c4b 100644 --- a/qcsrc/common/triggers/trigger/jumppads.qc +++ b/qcsrc/common/triggers/trigger/jumppads.qc @@ -3,12 +3,12 @@ #include "jumppads.qh" #include -void trigger_push_use() -{SELFPARAM(); +void trigger_push_use(entity this, entity actor, entity trigger) +{ if(teamplay) { - self.team = activator.team; - self.SendFlags |= 2; + this.team = actor.team; + this.SendFlags |= 2; } } #endif @@ -235,10 +235,7 @@ void trigger_push_touch() } if(this.enemy.target) - { - activator = other; - WITHSELF(this.enemy, SUB_UseTargets()); - } + SUB_UseTargets(this.enemy, other, other); // TODO: do we need other as trigger too? if (other.flags & FL_PROJECTILE) { @@ -440,8 +437,6 @@ spawnfunc(target_position) { target_push_init(this); } NET_HANDLE(ENT_CLIENT_TRIGGER_PUSH, bool isnew) { - make_pure(this); - this.classname = "jumppad"; int mytm = ReadByte(); if(mytm) { this.team = mytm - 1; } this.spawnflags = ReadInt24_t(); diff --git a/qcsrc/common/triggers/trigger/jumppads.qh b/qcsrc/common/triggers/trigger/jumppads.qh index 07973614b8..6fd61dc9da 100644 --- a/qcsrc/common/triggers/trigger/jumppads.qh +++ b/qcsrc/common/triggers/trigger/jumppads.qh @@ -15,8 +15,8 @@ const int NUM_JUMPPADSUSED = 3; float trigger_push_calculatevelocity_flighttime; #ifdef SVQC -void() SUB_UseTargets; -void trigger_push_use(); +void SUB_UseTargets(entity this, entity actor, entity trigger); +void trigger_push_use(entity this, entity actor, entity trigger); #endif /* diff --git a/qcsrc/common/triggers/trigger/keylock.qc b/qcsrc/common/triggers/trigger/keylock.qc index 182650ed5b..311075aa0a 100644 --- a/qcsrc/common/triggers/trigger/keylock.qc +++ b/qcsrc/common/triggers/trigger/keylock.qc @@ -1,24 +1,11 @@ /** * trigger given targets */ -void trigger_keylock_trigger(string s) -{SELFPARAM(); - entity otemp = other; - entity atemp = activator; - - entity t; - for(t = world; (t = find(t, targetname, s)); ) +void trigger_keylock_trigger(entity this, entity actor, string s) +{ + for(entity t = world; (t = find(t, targetname, s)); ) if(t.use) - { - setself(t); - other = this; - activator = atemp; - self.use(); - } - - setself(this); - other = otemp; - activator = atemp; + t.use(t, actor, this); } /** @@ -44,8 +31,6 @@ void trigger_keylock_touch() if(self.itemkeys) key_used = item_keys_usekey(self, other); - activator = other; - if(self.itemkeys) { #ifdef SVQC @@ -70,7 +55,7 @@ void trigger_keylock_touch() if(self.delay <= time || started_delay == true) if(self.target2) { - trigger_keylock_trigger(self.target2); + trigger_keylock_trigger(this, other, self.target2); started_delay = true; self.delay = time + self.wait; } @@ -84,7 +69,7 @@ void trigger_keylock_touch() #endif if(self.target) - trigger_keylock_trigger(self.target); + trigger_keylock_trigger(this, other, self.target); if(self.killtarget) trigger_keylock_kill(self.killtarget); diff --git a/qcsrc/common/triggers/trigger/magicear.qc b/qcsrc/common/triggers/trigger/magicear.qc index f973c7a6fd..2c94fa395d 100644 --- a/qcsrc/common/triggers/trigger/magicear.qc +++ b/qcsrc/common/triggers/trigger/magicear.qc @@ -28,13 +28,10 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay, if(dotrigger) { - activator = source; - setself(ear); savemessage = self.message; self.message = string_null; - SUB_UseTargets(); + SUB_UseTargets(ear, source, NULL); self.message = savemessage; - setself(this); } if(ear.netname != "") @@ -118,13 +115,10 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay, if(dotrigger) { - activator = source; - setself(ear); savemessage = self.message; self.message = string_null; - SUB_UseTargets(); + SUB_UseTargets(ear, source, NULL); self.message = savemessage; - setself(this); } if(ear.spawnflags & 16) diff --git a/qcsrc/common/triggers/trigger/monoflop.qc b/qcsrc/common/triggers/trigger/monoflop.qc index 26975ab6d1..994d498c11 100644 --- a/qcsrc/common/triggers/trigger/monoflop.qc +++ b/qcsrc/common/triggers/trigger/monoflop.qc @@ -2,30 +2,29 @@ /*QUAKED spawnfunc_trigger_monoflop (.5 .5 .5) (-8 -8 -8) (8 8 8) "Mono-flop" trigger gate... turns one trigger event into one "on" and one "off" event, separated by a delay of "wait" */ -void monoflop_use() -{SELFPARAM(); - self.nextthink = time + self.wait; - self.enemy = activator; - if(self.state) +void monoflop_use(entity this, entity actor, entity trigger) +{ + this.nextthink = time + this.wait; + this.enemy = actor; + if(this.state) return; - self.state = 1; - SUB_UseTargets(); + this.state = 1; + SUB_UseTargets(this, actor, trigger); } -void monoflop_fixed_use() -{SELFPARAM(); - if(self.state) +void monoflop_fixed_use(entity this, entity actor, entity trigger) +{ + if(this.state) return; - self.nextthink = time + self.wait; - self.state = 1; - self.enemy = activator; - SUB_UseTargets(); + this.nextthink = time + this.wait; + this.state = 1; + this.enemy = actor; + SUB_UseTargets(this, actor, trigger); } void monoflop_think() {SELFPARAM(); - self.state = 0; - activator = self.enemy; - SUB_UseTargets(); + this.state = 0; + SUB_UseTargets(this, this.enemy, NULL); } void monoflop_reset(entity this) @@ -36,14 +35,14 @@ void monoflop_reset(entity this) spawnfunc(trigger_monoflop) { - if(!self.wait) - self.wait = 1; - if(self.spawnflags & 1) - self.use = monoflop_fixed_use; + if(!this.wait) + this.wait = 1; + if(this.spawnflags & 1) + this.use = monoflop_fixed_use; else - self.use = monoflop_use; - self.think = monoflop_think; - self.state = 0; - self.reset = monoflop_reset; + this.use = monoflop_use; + this.think = monoflop_think; + this.state = 0; + this.reset = monoflop_reset; } #endif diff --git a/qcsrc/common/triggers/trigger/multi.qc b/qcsrc/common/triggers/trigger/multi.qc index 3f0a4b27fe..ce7bba6732 100644 --- a/qcsrc/common/triggers/trigger/multi.qc +++ b/qcsrc/common/triggers/trigger/multi.qc @@ -41,9 +41,7 @@ void multi_trigger() // don't trigger again until reset self.takedamage = DAMAGE_NO; - activator = self.enemy; - other = self.goalentity; - SUB_UseTargets(); + SUB_UseTargets(self, self.enemy, self.goalentity); if (self.wait > 0) { @@ -61,11 +59,11 @@ void multi_trigger() } } -void multi_use() -{SELFPARAM(); - self.goalentity = other; - self.enemy = activator; - multi_trigger(); +void multi_use(entity this, entity actor, entity trigger) +{ + this.goalentity = trigger; + this.enemy = actor; + WITHSELF(this, multi_trigger()); } void multi_touch() diff --git a/qcsrc/common/triggers/trigger/multivibrator.qc b/qcsrc/common/triggers/trigger/multivibrator.qc index 78b3383fc0..a50f62b7ab 100644 --- a/qcsrc/common/triggers/trigger/multivibrator.qc +++ b/qcsrc/common/triggers/trigger/multivibrator.qc @@ -8,9 +8,8 @@ void multivibrator_send() newstate = (time < cyclestart + self.wait); - activator = self; if(self.state != newstate) - SUB_UseTargets(); + SUB_UseTargets(self, self, NULL); self.state = newstate; if(self.state) @@ -19,20 +18,20 @@ void multivibrator_send() self.nextthink = cyclestart + self.wait + self.respawntime + 0.01; } -void multivibrator_toggle() -{SELFPARAM(); - if(self.nextthink == 0) +void multivibrator_toggle(entity this, entity actor, entity trigger) +{ + if(this.nextthink == 0) { - multivibrator_send(); + WITHSELF(this, multivibrator_send()); } else { - if(self.state) + if(this.state) { - SUB_UseTargets(); - self.state = 0; + SUB_UseTargets(this, actor, trigger); + this.state = 0; } - self.nextthink = 0; + this.nextthink = 0; } } diff --git a/qcsrc/common/triggers/trigger/relay_activators.qc b/qcsrc/common/triggers/trigger/relay_activators.qc index 147b6178a1..dabbbd2d96 100644 --- a/qcsrc/common/triggers/trigger/relay_activators.qc +++ b/qcsrc/common/triggers/trigger/relay_activators.qc @@ -1,11 +1,10 @@ #ifdef SVQC -void relay_activators_use() -{SELFPARAM(); +void relay_activators_use(entity this, entity actor, entity trigger) +{ for(entity trg = world; (trg = find(trg, targetname, this.target)); ) { - setself(trg); if (trg.setactive) - trg.setactive(this.cnt); + trg.setactive(trg, this.cnt); else { //bprint("Not using setactive\n"); @@ -18,24 +17,23 @@ void relay_activators_use() trg.active = this.cnt; } } - setself(this); } spawnfunc(relay_activate) { - self.cnt = ACTIVE_ACTIVE; - self.use = relay_activators_use; + this.cnt = ACTIVE_ACTIVE; + this.use = relay_activators_use; } spawnfunc(relay_deactivate) { - self.cnt = ACTIVE_NOT; - self.use = relay_activators_use; + this.cnt = ACTIVE_NOT; + this.use = relay_activators_use; } spawnfunc(relay_activatetoggle) { - self.cnt = ACTIVE_TOGGLE; - self.use = relay_activators_use; + this.cnt = ACTIVE_TOGGLE; + this.use = relay_activators_use; } #endif diff --git a/qcsrc/common/triggers/trigger/relay_if.qc b/qcsrc/common/triggers/trigger/relay_if.qc index e45996bd85..ea90a06cb7 100644 --- a/qcsrc/common/triggers/trigger/relay_if.qc +++ b/qcsrc/common/triggers/trigger/relay_if.qc @@ -1,20 +1,19 @@ #ifdef SVQC -void trigger_relay_if_use() -{SELFPARAM(); - float n; - n = self.count; +void trigger_relay_if_use(entity this, entity actor, entity trigger) +{ + int n = this.count; // TODO make this generic AND faster than nextent()ing through all, if somehow possible - n = (cvar_string(self.netname) == cvar_string(self.message)); - if(self.spawnflags & 1) + n = (cvar_string(this.netname) == cvar_string(this.message)); + if(this.spawnflags & 1) n = !n; if(n) - SUB_UseTargets(); + SUB_UseTargets(this, actor, trigger); } spawnfunc(trigger_relay_if) { - self.use = trigger_relay_if_use; + this.use = trigger_relay_if_use; } #endif diff --git a/qcsrc/common/triggers/trigger/relay_teamcheck.qc b/qcsrc/common/triggers/trigger/relay_teamcheck.qc index 193dba3682..2972d32bbf 100644 --- a/qcsrc/common/triggers/trigger/relay_teamcheck.qc +++ b/qcsrc/common/triggers/trigger/relay_teamcheck.qc @@ -1,23 +1,23 @@ #ifdef SVQC -void trigger_relay_teamcheck_use() -{SELFPARAM(); - if(activator.team) +void trigger_relay_teamcheck_use(entity this, entity actor, entity trigger) +{ + if(actor.team) { - if(self.spawnflags & 2) + if(this.spawnflags & 2) { - if(DIFF_TEAM(activator, self)) - SUB_UseTargets(); + if(DIFF_TEAM(actor, this)) + SUB_UseTargets(this, actor, trigger); } else { - if(SAME_TEAM(activator, self)) - SUB_UseTargets(); + if(SAME_TEAM(actor, this)) + SUB_UseTargets(this, actor, trigger); } } else { - if(self.spawnflags & 1) - SUB_UseTargets(); + if(this.spawnflags & 1) + SUB_UseTargets(this, actor, trigger); } } diff --git a/qcsrc/common/triggers/trigger/teleport.qc b/qcsrc/common/triggers/trigger/teleport.qc index 92ae805b52..c9b8147139 100644 --- a/qcsrc/common/triggers/trigger/teleport.qc +++ b/qcsrc/common/triggers/trigger/teleport.qc @@ -1,12 +1,12 @@ REGISTER_NET_LINKED(ENT_CLIENT_TRIGGER_TELEPORT) #ifdef SVQC -void trigger_teleport_use() -{SELFPARAM(); +void trigger_teleport_use(entity this, entity actor, entity trigger) +{ if(teamplay) - self.team = activator.team; + this.team = actor.team; #ifdef SVQC - self.SendFlags |= SF_TRIGGER_UPDATE; + this.SendFlags |= SF_TRIGGER_UPDATE; #endif } #endif @@ -49,12 +49,11 @@ void Teleport_Touch () e = Simple_TeleportPlayer(self, other); #ifdef SVQC - activator = other; string s = self.target; self.target = string_null; - SUB_UseTargets(); + SUB_UseTargets(self, other, other); // TODO: should we be using other for trigger too? if (!self.target) self.target = s; - WITHSELF(e, SUB_UseTargets()); + SUB_UseTargets(e, other, other); #endif } diff --git a/qcsrc/common/triggers/triggers.qc b/qcsrc/common/triggers/triggers.qc index 1ca03fd4fe..4493138d08 100644 --- a/qcsrc/common/triggers/triggers.qc +++ b/qcsrc/common/triggers/triggers.qc @@ -1,11 +1,10 @@ -void SUB_DontUseTargets() { } +void SUB_DontUseTargets(entity this, entity actor, entity trigger) { } -void() SUB_UseTargets; +void SUB_UseTargets(entity this, entity actor, entity trigger); void DelayThink() {SELFPARAM(); - activator = this.enemy; - SUB_UseTargets (); + SUB_UseTargets (this, this.enemy, NULL); remove(this); } @@ -184,22 +183,18 @@ match (string)self.target and call their .use function ============================== */ -void SUB_UseTargets() -{SELFPARAM(); - entity t, otemp, act; - string s; - float i; - +void SUB_UseTargets(entity this, entity actor, entity trigger) +{ // // check for a delay // if (this.delay) { // create a temp object to fire at a later time - t = new(DelayedUse); + entity t = new(DelayedUse); t.nextthink = time + this.delay; t.think = DelayThink; - t.enemy = activator; + t.enemy = actor; t.message = this.message; t.killtarget = this.killtarget; t.target = this.target; @@ -209,18 +204,19 @@ void SUB_UseTargets() return; } + string s; // // print the message // #ifdef SVQC if(this) - if(IS_PLAYER(activator) && this.message != "") - if(IS_REAL_CLIENT(activator)) + if(IS_PLAYER(actor) && this.message != "") + if(IS_REAL_CLIENT(actor)) { - centerprint(activator, this.message); + centerprint(actor, this.message); if (this.noise == "") - play2(activator, SND(TALK)); + play2(actor, SND(TALK)); } // @@ -229,7 +225,7 @@ void SUB_UseTargets() s = this.killtarget; if (s != "") { - for(t = world; (t = find(t, targetname, s)); ) + for(entity t = world; (t = find(t, targetname, s)); ) remove(t); } #endif @@ -237,13 +233,11 @@ void SUB_UseTargets() // // fire targets // - act = activator; - otemp = other; if(this.target_random) RandomSelection_Init(); - for(i = 0; i < 4; ++i) + for(int i = 0; i < 4; ++i) { switch(i) { @@ -257,38 +251,34 @@ void SUB_UseTargets() { // Flag to set func_clientwall state // 1 == deactivate, 2 == activate, 0 == do nothing - float aw_flag = this.antiwall_flag; - for(t = world; (t = find(t, targetname, s)); ) - if(t.use) + int aw_flag = this.antiwall_flag; + for(entity t = world; (t = find(t, targetname, s)); ) { - if(this.target_random) + if(t.use) { - RandomSelection_Add(t, 0, string_null, 1, 0); - } - else - { - if (t.classname == "func_clientwall" || t.classname == "func_clientillusionary") - t.antiwall_flag = aw_flag; - setself(t); - other = this; - activator = act; - self.use(); + if(this.target_random) + { + RandomSelection_Add(t, 0, string_null, 1, 0); + } + else + { + if (t.classname == "func_clientwall" || t.classname == "func_clientillusionary") + t.antiwall_flag = aw_flag; + + t.use(t, actor, this); + } } } } } if(this.target_random && RandomSelection_chosen_ent) - { - setself(RandomSelection_chosen_ent); - other = this; - activator = act; - self.use(); - } + RandomSelection_chosen_ent.use(RandomSelection_chosen_ent, actor, this); +} - activator = act; - setself(this); - other = otemp; +void SUB_UseTargets_self() +{SELFPARAM(); + SUB_UseTargets(this, NULL, NULL); } #ifdef CSQC diff --git a/qcsrc/common/turrets/_mod.inc b/qcsrc/common/turrets/_mod.inc index 552a8050f6..40c3114bab 100644 --- a/qcsrc/common/turrets/_mod.inc +++ b/qcsrc/common/turrets/_mod.inc @@ -1,8 +1,8 @@ // generated file; do not modify -#include "all.qc" -#include "checkpoint.qc" -#include "cl_turrets.qc" -#include "config.qc" -#include "sv_turrets.qc" -#include "targettrigger.qc" -#include "util.qc" +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/turrets/_mod.qh b/qcsrc/common/turrets/_mod.qh new file mode 100644 index 0000000000..6da539e852 --- /dev/null +++ b/qcsrc/common/turrets/_mod.qh @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/turrets/sv_turrets.qc b/qcsrc/common/turrets/sv_turrets.qc index 1502be2511..2578c1e6db 100644 --- a/qcsrc/common/turrets/sv_turrets.qc +++ b/qcsrc/common/turrets/sv_turrets.qc @@ -455,7 +455,7 @@ void turret_projectile_damage(entity this, entity inflictor, entity attacker, fl this.health -= damage; //this.realowner = attacker; // Dont change realowner, it does not make much sense for turrets if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(this.owner, turret_projectile_explode)); + W_PrepareExplosionByDamage(this, this.owner, turret_projectile_explode); } entity turret_projectile(Sound _snd, float _size, float _health, float _death, float _proj_type, float _cull, float _cli_anim) @@ -1179,16 +1179,16 @@ void turret_think() When .used a turret switch team to activator.team. If activator is world, the turret go inactive. */ -void turret_use() -{SELFPARAM(); - LOG_TRACE("Turret ",self.netname, " used by ", activator.classname, "\n"); +void turret_use(entity this, entity actor, entity trigger) +{ + LOG_TRACE("Turret ",this.netname, " used by ", actor.classname, "\n"); - self.team = activator.team; + this.team = actor.team; - if(self.team == 0) - self.active = ACTIVE_NOT; + if(this.team == 0) + this.active = ACTIVE_NOT; else - self.active = ACTIVE_ACTIVE; + this.active = ACTIVE_ACTIVE; } diff --git a/qcsrc/common/turrets/turret/_mod.inc b/qcsrc/common/turrets/turret/_mod.inc index 367321425f..0a1652b1a9 100644 --- a/qcsrc/common/turrets/turret/_mod.inc +++ b/qcsrc/common/turrets/turret/_mod.inc @@ -1,23 +1,23 @@ // generated file; do not modify -#include "ewheel.qc" -#include "ewheel_weapon.qc" -#include "flac.qc" -#include "flac_weapon.qc" -#include "fusionreactor.qc" -#include "hellion.qc" -#include "hellion_weapon.qc" -#include "hk.qc" -#include "hk_weapon.qc" -#include "machinegun.qc" -#include "machinegun_weapon.qc" -#include "mlrs.qc" -#include "mlrs_weapon.qc" -#include "phaser.qc" -#include "phaser_weapon.qc" -#include "plasma.qc" -#include "plasma_dual.qc" -#include "plasma_weapon.qc" -#include "tesla.qc" -#include "tesla_weapon.qc" -#include "walker.qc" -#include "walker_weapon.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/turrets/turret/_mod.qh b/qcsrc/common/turrets/turret/_mod.qh new file mode 100644 index 0000000000..4650901421 --- /dev/null +++ b/qcsrc/common/turrets/turret/_mod.qh @@ -0,0 +1,23 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/turrets/turret/ewheel.qc b/qcsrc/common/turrets/turret/ewheel.qc index 798e141ecd..0bdfca46ed 100644 --- a/qcsrc/common/turrets/turret/ewheel.qc +++ b/qcsrc/common/turrets/turret/ewheel.qc @@ -50,7 +50,7 @@ void ewheel_move_path() if (self.pathgoal) { if (self.pathgoal.use) - self.pathgoal.use(); + self.pathgoal.use(self.pathgoal, NULL, NULL); if (self.pathgoal.enemy) { diff --git a/qcsrc/common/turrets/turret/walker.qc b/qcsrc/common/turrets/turret/walker.qc index 918ce4ca3a..51ace9a7d0 100644 --- a/qcsrc/common/turrets/turret/walker.qc +++ b/qcsrc/common/turrets/turret/walker.qc @@ -109,7 +109,7 @@ void walker_rocket_damage(entity this, entity inflictor, entity attacker, float this.velocity = this.velocity + vforce; if (this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(this.owner, walker_rocket_explode)); + W_PrepareExplosionByDamage(this, this.owner, walker_rocket_explode); } #define WALKER_ROCKET_MOVE movelib_move_simple(self, newdir, (autocvar_g_turrets_unit_walker_rocket_speed), (autocvar_g_turrets_unit_walker_rocket_turnrate)); UpdateCSQCProjectile(self) @@ -313,7 +313,7 @@ void walker_move_path() if (self.pathgoal) { if (self.pathgoal.use) - self.pathgoal.use(); + self.pathgoal.use(self, NULL, NULL); if (self.pathgoal.enemy) { diff --git a/qcsrc/common/util.qc b/qcsrc/common/util.qc index 0e6b6d6ba4..ec643fcb58 100644 --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@ -1480,13 +1480,6 @@ vector animfixfps(entity e, vector a, vector b) } #endif -#ifdef SVQC -void dedicated_print(string input) // print(), but only print if the server is not local -{ - if(server_is_dedicated) { LOG_INFO(input); } -} -#endif - #ifndef MENUQC Notification Announcer_PickNumber(int type, int num) { diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index 7bc8675335..066033a175 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -2,6 +2,7 @@ #define COMMON_UTIL_H #ifndef MENUQC + vector real_origin(entity ent); #endif @@ -27,8 +28,8 @@ void depthfirst(entity start, .entity up, .entity downleft, .entity right, void( float median(float a, float b, float c); // converts a number to a string with the indicated number of decimals -// works for up to 10 decimals! string ftos_decimals(float number, float decimals); +string ftos_mindecimals(float number); bool fexists(string f); @@ -273,10 +274,6 @@ string CCR(string input); vector animfixfps(entity e, vector a, vector b); #endif -#ifdef SVQC -void dedicated_print(string input); -#endif - #ifndef MENUQC const float CNT_NORMAL = 1; const float CNT_GAMESTART = 2; diff --git a/qcsrc/common/vehicles/_mod.inc b/qcsrc/common/vehicles/_mod.inc index e80489b8fa..269858f847 100644 --- a/qcsrc/common/vehicles/_mod.inc +++ b/qcsrc/common/vehicles/_mod.inc @@ -1,4 +1,4 @@ // generated file; do not modify -#include "all.qc" -#include "cl_vehicles.qc" -#include "sv_vehicles.qc" +#include +#include +#include diff --git a/qcsrc/common/vehicles/_mod.qh b/qcsrc/common/vehicles/_mod.qh new file mode 100644 index 0000000000..d21e829f7a --- /dev/null +++ b/qcsrc/common/vehicles/_mod.qh @@ -0,0 +1,4 @@ +// generated file; do not modify +#include +#include +#include diff --git a/qcsrc/common/vehicles/sv_vehicles.qc b/qcsrc/common/vehicles/sv_vehicles.qc index 35b6c677f9..fc44613e5d 100644 --- a/qcsrc/common/vehicles/sv_vehicles.qc +++ b/qcsrc/common/vehicles/sv_vehicles.qc @@ -208,7 +208,7 @@ void vehicles_projectile_damage(entity this, entity inflictor, entity attacker, { this.takedamage = DAMAGE_NO; this.event_damage = func_null; - this.think = this.use; + this.think = adaptor_think2use; this.nextthink = time; } } @@ -232,6 +232,11 @@ void vehicles_projectile_explode() remove (self); } +void vehicles_projectile_explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, vehicles_projectile_explode()); +} + entity vehicles_projectile(entity this, string _mzlfx, Sound _mzlsound, vector _org, vector _vel, float _dmg, float _radi, float _force, float _size, @@ -257,7 +262,7 @@ entity vehicles_projectile(entity this, string _mzlfx, Sound _mzlsound, proj.bot_dodgerating = _dmg; proj.velocity = _vel; proj.touch = vehicles_projectile_explode; - proj.use = vehicles_projectile_explode; + proj.use = vehicles_projectile_explode_use; proj.owner = this; proj.realowner = _owner; proj.think = SUB_Remove_self; @@ -541,29 +546,29 @@ void vehicles_setreturn(entity veh) } -void vehicle_use() -{SELFPARAM(); - LOG_TRACE("vehicle ",self.netname, " used by ", activator.classname, "\n"); +void vehicle_use(entity this, entity actor, entity trigger) +{ + LOG_TRACE("vehicle ",this.netname, " used by ", actor.classname, "\n"); - self.tur_head.team = activator.team; + this.tur_head.team = actor.team; - if(self.tur_head.team == 0) - self.active = ACTIVE_NOT; + if(this.tur_head.team == 0) + this.active = ACTIVE_NOT; else - self.active = ACTIVE_ACTIVE; + this.active = ACTIVE_ACTIVE; - if(self.active == ACTIVE_ACTIVE && !IS_DEAD(self) && !gameover) + if(this.active == ACTIVE_ACTIVE && !IS_DEAD(this) && !gameover) { - LOG_TRACE("Respawning vehicle: ", self.netname, "\n"); - if(self.effects & EF_NODRAW) + LOG_TRACE("Respawning vehicle: ", this.netname, "\n"); + if(this.effects & EF_NODRAW) { - self.think = vehicles_spawn; - self.nextthink = time + 3; + this.think = vehicles_spawn; + this.nextthink = time + 3; } else { - vehicles_setreturn(self); - vehicles_reset_colors(self); + vehicles_setreturn(this); + vehicles_reset_colors(this); } } } diff --git a/qcsrc/common/vehicles/vehicle/_mod.inc b/qcsrc/common/vehicles/vehicle/_mod.inc index fbead4741d..065f760d21 100644 --- a/qcsrc/common/vehicles/vehicle/_mod.inc +++ b/qcsrc/common/vehicles/vehicle/_mod.inc @@ -1,9 +1,9 @@ // generated file; do not modify -#include "bumblebee.qc" -#include "bumblebee_weapons.qc" -#include "racer.qc" -#include "racer_weapon.qc" -#include "raptor.qc" -#include "raptor_weapons.qc" -#include "spiderbot.qc" -#include "spiderbot_weapons.qc" +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/vehicles/vehicle/_mod.qh b/qcsrc/common/vehicles/vehicle/_mod.qh new file mode 100644 index 0000000000..3d6606eb9d --- /dev/null +++ b/qcsrc/common/vehicles/vehicle/_mod.qh @@ -0,0 +1,9 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/vehicles/vehicle/racer_weapon.qc b/qcsrc/common/vehicles/vehicle/racer_weapon.qc index ee86a62297..36655fd1de 100644 --- a/qcsrc/common/vehicles/vehicle/racer_weapon.qc +++ b/qcsrc/common/vehicles/vehicle/racer_weapon.qc @@ -74,7 +74,7 @@ void racer_rocket_tracker() if (IS_DEAD(self.owner) || self.cnt < time) { - self.use(); + self.use(self, NULL, NULL); return; } @@ -126,7 +126,7 @@ void racer_rocket_groundhugger() if(IS_DEAD(self.owner) || self.cnt < time) { - self.use(); + self.use(self, NULL, NULL); return; } diff --git a/qcsrc/common/vehicles/vehicle/spiderbot_weapons.qc b/qcsrc/common/vehicles/vehicle/spiderbot_weapons.qc index afa57de2da..dd209676d4 100644 --- a/qcsrc/common/vehicles/vehicle/spiderbot_weapons.qc +++ b/qcsrc/common/vehicles/vehicle/spiderbot_weapons.qc @@ -23,7 +23,7 @@ void spiderbot_rocket_unguided() UpdateCSQCProjectile(self); if (IS_DEAD(self.owner) || self.cnt < time || vdist(self.pos1 - self.origin, <, 16)) - self.use(); + self.use(self, NULL, NULL); } void spiderbot_rocket_guided() @@ -43,7 +43,7 @@ void spiderbot_rocket_guided() UpdateCSQCProjectile(self); if (IS_DEAD(self.owner) || self.cnt < time) - self.use(); + self.use(self, NULL, NULL); } void spiderbot_guide_release(entity this) diff --git a/qcsrc/common/weapons/_mod.inc b/qcsrc/common/weapons/_mod.inc index d2c6fb8338..034b149bff 100644 --- a/qcsrc/common/weapons/_mod.inc +++ b/qcsrc/common/weapons/_mod.inc @@ -1,4 +1,4 @@ // generated file; do not modify -#include "all.qc" -#include "calculations.qc" -#include "config.qc" +#include +#include +#include diff --git a/qcsrc/common/weapons/_mod.qh b/qcsrc/common/weapons/_mod.qh new file mode 100644 index 0000000000..f5e07a8c01 --- /dev/null +++ b/qcsrc/common/weapons/_mod.qh @@ -0,0 +1,4 @@ +// generated file; do not modify +#include +#include +#include diff --git a/qcsrc/common/weapons/calculations.qc b/qcsrc/common/weapons/calculations.qc index 1a4888434c..e8307f39d2 100644 --- a/qcsrc/common/weapons/calculations.qc +++ b/qcsrc/common/weapons/calculations.qc @@ -157,104 +157,106 @@ vector W_CalculateSpread(vector forward, float spread, float spreadfactor, float float sigma; vector v1 = '0 0 0', v2; float dx, dy, r; - float sstyle; spread *= spreadfactor; //g_weaponspreadfactor; if(spread <= 0) return forward; - sstyle = spreadstyle; //autocvar_g_projectiles_spread_style; - if(sstyle == 0) + switch(spreadstyle) { - // this is the baseline for the spread value! - // standard deviation: sqrt(2/5) - // density function: sqrt(1-r^2) - return forward + randomvec() * spread; + case 0: + { + // this is the baseline for the spread value! + // standard deviation: sqrt(2/5) + // density function: sqrt(1-r^2) + return forward + randomvec() * spread; + } + case 1: + { + // same thing, basically + return normalize(forward + cliptoplane(randomvec() * spread, forward)); + } + case 2: + { + // circle spread... has at sigma=1 a standard deviation of sqrt(1/2) + sigma = spread * 0.89442719099991587855; // match baseline stddev + v1 = findperpendicular(forward); + v2 = cross(forward, v1); + // random point on unit circle + dx = random() * 2 * M_PI; + dy = sin(dx); + dx = cos(dx); + // radius in our dist function + r = random(); + r = sqrt(r); + return normalize(forward + (v1 * dx + v2 * dy) * r * sigma); + } + case 3: // gauss 3d + { + sigma = spread * 0.44721359549996; // match baseline stddev + // note: 2D gaussian has sqrt(2) times the stddev of 1D, so this factor is right + v1 = forward; + v1_x += gsl_ran_gaussian(sigma); + v1_y += gsl_ran_gaussian(sigma); + v1_z += gsl_ran_gaussian(sigma); + return v1; + } + case 4: // gauss 2d + { + sigma = spread * 0.44721359549996; // match baseline stddev + // note: 2D gaussian has sqrt(2) times the stddev of 1D, so this factor is right + v1_x = gsl_ran_gaussian(sigma); + v1_y = gsl_ran_gaussian(sigma); + v1_z = gsl_ran_gaussian(sigma); + return normalize(forward + cliptoplane(v1, forward)); + } + case 5: // 1-r + { + sigma = spread * 1.154700538379252; // match baseline stddev + v1 = findperpendicular(forward); + v2 = cross(forward, v1); + // random point on unit circle + dx = random() * 2 * M_PI; + dy = sin(dx); + dx = cos(dx); + // radius in our dist function + r = random(); + r = solve_cubic_abcd(-2, 3, 0, -r) * '0 1 0'; + return normalize(forward + (v1 * dx + v2 * dy) * r * sigma); + } + case 6: // 1-r^2 + { + sigma = spread * 1.095445115010332; // match baseline stddev + v1 = findperpendicular(forward); + v2 = cross(forward, v1); + // random point on unit circle + dx = random() * 2 * M_PI; + dy = sin(dx); + dx = cos(dx); + // radius in our dist function + r = random(); + r = sqrt(1 - r); + r = sqrt(1 - r); + return normalize(forward + (v1 * dx + v2 * dy) * r * sigma); + } + case 7: // (1-r) (2-r) + { + sigma = spread * 1.224744871391589; // match baseline stddev + v1 = findperpendicular(forward); + v2 = cross(forward, v1); + // random point on unit circle + dx = random() * 2 * M_PI; + dy = sin(dx); + dx = cos(dx); + // radius in our dist function + r = random(); + r = 1 - sqrt(r); + r = 1 - sqrt(r); + return normalize(forward + (v1 * dx + v2 * dy) * r * sigma); + } + default: + error("g_projectiles_spread_style must be 0 (sphere), 1 (flattened sphere), 2 (circle), 3 (gauss 3D), 4 (gauss plane), 5 (linear falloff), 6 (quadratic falloff), 7 (stronger falloff)!"); } - else if(sstyle == 1) - { - // same thing, basically - return normalize(forward + cliptoplane(randomvec() * spread, forward)); - } - else if(sstyle == 2) - { - // circle spread... has at sigma=1 a standard deviation of sqrt(1/2) - sigma = spread * 0.89442719099991587855; // match baseline stddev - v1 = findperpendicular(forward); - v2 = cross(forward, v1); - // random point on unit circle - dx = random() * 2 * M_PI; - dy = sin(dx); - dx = cos(dx); - // radius in our dist function - r = random(); - r = sqrt(r); - return normalize(forward + (v1 * dx + v2 * dy) * r * sigma); - } - else if(sstyle == 3) // gauss 3d - { - sigma = spread * 0.44721359549996; // match baseline stddev - // note: 2D gaussian has sqrt(2) times the stddev of 1D, so this factor is right - v1 = forward; - v1_x += gsl_ran_gaussian(sigma); - v1_y += gsl_ran_gaussian(sigma); - v1_z += gsl_ran_gaussian(sigma); - return v1; - } - else if(sstyle == 4) // gauss 2d - { - sigma = spread * 0.44721359549996; // match baseline stddev - // note: 2D gaussian has sqrt(2) times the stddev of 1D, so this factor is right - v1_x = gsl_ran_gaussian(sigma); - v1_y = gsl_ran_gaussian(sigma); - v1_z = gsl_ran_gaussian(sigma); - return normalize(forward + cliptoplane(v1, forward)); - } - else if(sstyle == 5) // 1-r - { - sigma = spread * 1.154700538379252; // match baseline stddev - v1 = findperpendicular(forward); - v2 = cross(forward, v1); - // random point on unit circle - dx = random() * 2 * M_PI; - dy = sin(dx); - dx = cos(dx); - // radius in our dist function - r = random(); - r = solve_cubic_abcd(-2, 3, 0, -r) * '0 1 0'; - return normalize(forward + (v1 * dx + v2 * dy) * r * sigma); - } - else if(sstyle == 6) // 1-r^2 - { - sigma = spread * 1.095445115010332; // match baseline stddev - v1 = findperpendicular(forward); - v2 = cross(forward, v1); - // random point on unit circle - dx = random() * 2 * M_PI; - dy = sin(dx); - dx = cos(dx); - // radius in our dist function - r = random(); - r = sqrt(1 - r); - r = sqrt(1 - r); - return normalize(forward + (v1 * dx + v2 * dy) * r * sigma); - } - else if(sstyle == 7) // (1-r) (2-r) - { - sigma = spread * 1.224744871391589; // match baseline stddev - v1 = findperpendicular(forward); - v2 = cross(forward, v1); - // random point on unit circle - dx = random() * 2 * M_PI; - dy = sin(dx); - dx = cos(dx); - // radius in our dist function - r = random(); - r = 1 - sqrt(r); - r = 1 - sqrt(r); - return normalize(forward + (v1 * dx + v2 * dy) * r * sigma); - } - else - error("g_projectiles_spread_style must be 0 (sphere), 1 (flattened sphere), 2 (circle), 3 (gauss 3D), 4 (gauss plane), 5 (linear falloff), 6 (quadratic falloff), 7 (stronger falloff)!"); + return '0 0 0'; /* * how to derive falloff functions: diff --git a/qcsrc/common/weapons/weapon/_mod.inc b/qcsrc/common/weapons/weapon/_mod.inc index 7852f1e7f2..06cd89d8b7 100644 --- a/qcsrc/common/weapons/weapon/_mod.inc +++ b/qcsrc/common/weapons/weapon/_mod.inc @@ -1,21 +1,21 @@ // generated file; do not modify -#include "arc.qc" -#include "blaster.qc" -#include "crylink.qc" -#include "devastator.qc" -#include "electro.qc" -#include "fireball.qc" -#include "hagar.qc" -#include "hlac.qc" -#include "hook.qc" -#include "machinegun.qc" -#include "minelayer.qc" -#include "mortar.qc" -#include "porto.qc" -#include "rifle.qc" -#include "seeker.qc" -#include "shockwave.qc" -#include "shotgun.qc" -#include "tuba.qc" -#include "vaporizer.qc" -#include "vortex.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/weapons/weapon/_mod.qh b/qcsrc/common/weapons/weapon/_mod.qh new file mode 100644 index 0000000000..bc4fff18d3 --- /dev/null +++ b/qcsrc/common/weapons/weapon/_mod.qh @@ -0,0 +1,21 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/common/weapons/weapon/arc.qc b/qcsrc/common/weapons/weapon/arc.qc index 3c23e33e77..cf391b034a 100644 --- a/qcsrc/common/weapons/weapon/arc.qc +++ b/qcsrc/common/weapons/weapon/arc.qc @@ -239,6 +239,11 @@ void W_Arc_Bolt_Explode() remove(self); } +void W_Arc_Bolt_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Arc_Bolt_Explode()); +} + void W_Arc_Bolt_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { if(this.health <= 0) @@ -251,13 +256,13 @@ void W_Arc_Bolt_Damage(entity this, entity inflictor, entity attacker, float dam this.angles = vectoangles(this.velocity); if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, this.think)); + W_PrepareExplosionByDamage(this, attacker, this.think); } void W_Arc_Bolt_Touch() {SELFPARAM(); PROJECTILE_TOUCH; - self.use(); + self.use(this, NULL, NULL); } void W_Arc_Attack_Bolt(Weapon thiswep) @@ -282,7 +287,7 @@ void W_Arc_Attack_Bolt(Weapon thiswep) missile.damagedbycontents = true; missile.touch = W_Arc_Bolt_Touch; - missile.use = W_Arc_Bolt_Explode; + missile.use = W_Arc_Bolt_Explode_use; missile.think = adaptor_think2use_hittype_splash; missile.nextthink = time + WEP_CVAR(arc, bolt_lifetime); PROJECTILE_MAKETRIGGER(missile); diff --git a/qcsrc/common/weapons/weapon/devastator.qc b/qcsrc/common/weapons/weapon/devastator.qc index 2d930ad721..1cde73d446 100644 --- a/qcsrc/common/weapons/weapon/devastator.qc +++ b/qcsrc/common/weapons/weapon/devastator.qc @@ -344,7 +344,7 @@ void W_Devastator_Damage(entity this, entity inflictor, entity attacker, float d this.angles = vectoangles(this.velocity); if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, W_Devastator_Explode)); + W_PrepareExplosionByDamage(this, attacker, W_Devastator_Explode); } void W_Devastator_Attack(Weapon thiswep) diff --git a/qcsrc/common/weapons/weapon/electro.qc b/qcsrc/common/weapons/weapon/electro.qc index b751068062..315ea5a5a4 100644 --- a/qcsrc/common/weapons/weapon/electro.qc +++ b/qcsrc/common/weapons/weapon/electro.qc @@ -191,6 +191,11 @@ void W_Electro_Explode() remove(self); } +void W_Electro_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Electro_Explode()); +} + void W_Electro_TouchExplode() { PROJECTILE_TOUCH; @@ -201,7 +206,7 @@ void W_Electro_Bolt_Think() {SELFPARAM(); if(time >= self.ltime) { - self.use(); + this.use(this, NULL, NULL); return; } @@ -242,7 +247,7 @@ void W_Electro_Bolt_Think() // if we triggered an orb, should we explode? if not, lets try again next time if(found && WEP_CVAR_PRI(electro, midaircombo_explode)) - { self.use(); } + { this.use(this, NULL, NULL); } else { self.nextthink = min(time + WEP_CVAR_PRI(electro, midaircombo_interval), self.ltime); } } @@ -272,7 +277,7 @@ void W_Electro_Attack_Bolt(Weapon thiswep) proj.owner = proj.realowner = self; proj.bot_dodge = true; proj.bot_dodgerating = WEP_CVAR_PRI(electro, damage); - proj.use = W_Electro_Explode; + proj.use = W_Electro_Explode_use; proj.think = W_Electro_Bolt_Think; proj.nextthink = time; proj.ltime = time + WEP_CVAR_PRI(electro, lifetime); @@ -342,7 +347,7 @@ void W_Electro_Orb_Damage(entity this, entity inflictor, entity attacker, float } else { - this.use = W_Electro_Explode; + this.use = W_Electro_Explode_use; this.think = adaptor_think2use; // not _hittype_splash, as this runs "immediately" } } @@ -369,7 +374,7 @@ void W_Electro_Attack_Orb(Weapon thiswep) entity proj = new(electro_orb); proj.owner = proj.realowner = self; - proj.use = W_Electro_Explode; + proj.use = W_Electro_Explode_use; proj.think = adaptor_think2use_hittype_splash; proj.bot_dodge = true; proj.bot_dodgerating = WEP_CVAR_SEC(electro, damage); diff --git a/qcsrc/common/weapons/weapon/fireball.qc b/qcsrc/common/weapons/weapon/fireball.qc index a6db7c9b71..4bbcdb68e5 100644 --- a/qcsrc/common/weapons/weapon/fireball.qc +++ b/qcsrc/common/weapons/weapon/fireball.qc @@ -112,6 +112,11 @@ void W_Fireball_Explode() remove(self); } +void W_Fireball_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Fireball_Explode()); +} + void W_Fireball_TouchExplode() { PROJECTILE_TOUCH; @@ -179,7 +184,7 @@ void W_Fireball_Damage(entity this, entity inflictor, entity attacker, float dam if(this.health <= 0) { this.cnt = 1; - WITHSELF(this, W_PrepareExplosionByDamage(attacker, W_Fireball_Explode)); + W_PrepareExplosionByDamage(this, attacker, W_Fireball_Explode); } } @@ -196,7 +201,7 @@ void W_Fireball_Attack1() proj.bot_dodge = true; proj.bot_dodgerating = WEP_CVAR_PRI(fireball, damage); proj.pushltime = time + WEP_CVAR_PRI(fireball, lifetime); - proj.use = W_Fireball_Explode; + proj.use = W_Fireball_Explode_use; proj.think = W_Fireball_Think; proj.nextthink = time; proj.health = WEP_CVAR_PRI(fireball, health); diff --git a/qcsrc/common/weapons/weapon/hagar.qc b/qcsrc/common/weapons/weapon/hagar.qc index b764a9e66f..4b0367fb5e 100644 --- a/qcsrc/common/weapons/weapon/hagar.qc +++ b/qcsrc/common/weapons/weapon/hagar.qc @@ -71,6 +71,11 @@ void W_Hagar_Explode() remove(self); } +void W_Hagar_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Hagar_Explode()); +} + void W_Hagar_Explode2() {SELFPARAM(); self.event_damage = func_null; @@ -79,6 +84,11 @@ void W_Hagar_Explode2() remove(self); } +void W_Hagar_Explode2_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Hagar_Explode2()); +} + void W_Hagar_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { if(this.health <= 0) @@ -100,13 +110,13 @@ void W_Hagar_Damage(entity this, entity inflictor, entity attacker, float damage this.angles = vectoangles(this.velocity); if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, this.think)); + W_PrepareExplosionByDamage(this, attacker, this.think); } void W_Hagar_Touch() {SELFPARAM(); PROJECTILE_TOUCH; - self.use(); + this.use(this, NULL, NULL); } void W_Hagar_Touch2() @@ -114,7 +124,7 @@ void W_Hagar_Touch2() PROJECTILE_TOUCH; if(self.cnt > 0 || other.takedamage == DAMAGE_AIM) { - self.use(); + this.use(this, NULL, NULL); } else { self.cnt++; Send_Effect(EFFECT_HAGAR_BOUNCE, self.origin, self.velocity, 1); @@ -146,7 +156,7 @@ void W_Hagar_Attack(Weapon thiswep) missile.damagedbycontents = true; missile.touch = W_Hagar_Touch; - missile.use = W_Hagar_Explode; + missile.use = W_Hagar_Explode_use; missile.think = adaptor_think2use_hittype_splash; missile.nextthink = time + WEP_CVAR_PRI(hagar, lifetime); PROJECTILE_MAKETRIGGER(missile); @@ -189,7 +199,7 @@ void W_Hagar_Attack2(Weapon thiswep) missile.touch = W_Hagar_Touch2; missile.cnt = 0; - missile.use = W_Hagar_Explode2; + missile.use = W_Hagar_Explode2_use; missile.think = adaptor_think2use_hittype_splash; missile.nextthink = time + WEP_CVAR_SEC(hagar, lifetime_min) + random() * WEP_CVAR_SEC(hagar, lifetime_rand); PROJECTILE_MAKETRIGGER(missile); @@ -247,7 +257,7 @@ void W_Hagar_Attack2_Load_Release(.entity weaponentity) missile.damagedbycontents = true; missile.touch = W_Hagar_Touch; // not bouncy - missile.use = W_Hagar_Explode2; + missile.use = W_Hagar_Explode2_use; missile.think = adaptor_think2use_hittype_splash; missile.nextthink = time + WEP_CVAR_SEC(hagar, lifetime_min) + random() * WEP_CVAR_SEC(hagar, lifetime_rand); PROJECTILE_MAKETRIGGER(missile); @@ -397,6 +407,36 @@ void W_Hagar_Attack2_Load(Weapon thiswep, .entity weaponentity) } } +void W_Hagar_Attack_Auto(Weapon thiswep, entity actor, .entity weaponentity, int fire) +{ + if(!(fire & 1) || actor.hagar_load || actor.hagar_loadblock) + { + w_ready(thiswep, actor, weaponentity, fire); + return; + } + + if(!thiswep.wr_checkammo1(thiswep)) + if(!(actor.items & IT_UNLIMITED_WEAPON_AMMO)) + { + W_SwitchWeapon_Force(actor, w_getbestweapon(actor)); + w_ready(thiswep, actor, weaponentity, fire); + return; + } + + W_Hagar_Attack(thiswep); + + int slot = weaponslot(weaponentity); + ATTACK_FINISHED(actor, slot) = time + WEP_CVAR_PRI(hagar, refire) * W_WeaponRateFactor(); + int theframe = WFRAME_FIRE1; + entity this = actor.(weaponentity); + if(this) + { + if(this.wframe == WFRAME_FIRE1) + theframe = WFRAME_DONTCHANGE; + } + weapon_thinkf(actor, weaponentity, theframe, WEP_CVAR_PRI(hagar, refire), W_Hagar_Attack_Auto); +} + METHOD(Hagar, wr_aim, void(entity thiswep)) { SELFPARAM(); @@ -414,14 +454,12 @@ METHOD(Hagar, wr_think, void(entity thiswep, entity actor, .entity weaponentity, W_Hagar_Attack2_Load(thiswep, weaponentity); // must always run each frame if(autocvar_g_balance_hagar_reload_ammo && actor.clip_load < min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo))) { // forced reload thiswep.wr_reload(thiswep, actor, weaponentity); - } else if((fire & 1) && !actor.hagar_load && !actor.hagar_loadblock) // not while secondary is loaded or awaiting reset - { - if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR_PRI(hagar, refire))) - { - W_Hagar_Attack(thiswep); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(hagar, refire), w_ready); - } } + else if((fire & 1) && !actor.hagar_load && !actor.hagar_loadblock) // not while secondary is loaded or awaiting reset + { + if(weapon_prepareattack(thiswep, actor, weaponentity, false, 0)) + W_Hagar_Attack_Auto(thiswep, actor, weaponentity, fire); + } else if((fire & 2) && !loadable_secondary && WEP_CVAR(hagar, secondary)) { if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR_SEC(hagar, refire))) diff --git a/qcsrc/common/weapons/weapon/hook.qc b/qcsrc/common/weapons/weapon/hook.qc index 91c2840e6d..fac16c4871 100644 --- a/qcsrc/common/weapons/weapon/hook.qc +++ b/qcsrc/common/weapons/weapon/hook.qc @@ -118,6 +118,11 @@ void W_Hook_Explode2() self.movetype = MOVETYPE_NONE; } +void W_Hook_Explode2_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Hook_Explode2()); +} + void W_Hook_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { if(this.health <= 0) @@ -129,13 +134,13 @@ void W_Hook_Damage(entity this, entity inflictor, entity attacker, float damage, this.health = this.health - damage; if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(this.realowner, W_Hook_Explode2)); + W_PrepareExplosionByDamage(this, this.realowner, W_Hook_Explode2); } void W_Hook_Touch2() {SELFPARAM(); PROJECTILE_TOUCH; - self.use(); + this.use(this, NULL, NULL); } void W_Hook_Attack2(Weapon thiswep, entity actor) @@ -155,7 +160,7 @@ void W_Hook_Attack2(Weapon thiswep, entity actor) gren.nextthink = time + WEP_CVAR_SEC(hook, lifetime); gren.think = adaptor_think2use_hittype_splash; - gren.use = W_Hook_Explode2; + gren.use = W_Hook_Explode2_use; gren.touch = W_Hook_Touch2; gren.takedamage = DAMAGE_YES; diff --git a/qcsrc/common/weapons/weapon/minelayer.qc b/qcsrc/common/weapons/weapon/minelayer.qc index c6e0fb86bc..9a02c850bb 100644 --- a/qcsrc/common/weapons/weapon/minelayer.qc +++ b/qcsrc/common/weapons/weapon/minelayer.qc @@ -308,7 +308,7 @@ void W_MineLayer_Damage(entity this, entity inflictor, entity attacker, float da this.angles = vectoangles(this.velocity); if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, W_MineLayer_Explode)); + W_PrepareExplosionByDamage(this, attacker, W_MineLayer_Explode); } void W_MineLayer_Attack(Weapon thiswep) diff --git a/qcsrc/common/weapons/weapon/mortar.qc b/qcsrc/common/weapons/weapon/mortar.qc index 7c9b908947..5fbacc7ba4 100644 --- a/qcsrc/common/weapons/weapon/mortar.qc +++ b/qcsrc/common/weapons/weapon/mortar.qc @@ -84,6 +84,11 @@ void W_Mortar_Grenade_Explode() remove(self); } +void W_Mortar_Grenade_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Mortar_Grenade_Explode()); +} + void W_Mortar_Grenade_Explode2() {SELFPARAM(); if(other.takedamage == DAMAGE_AIM) @@ -104,6 +109,10 @@ void W_Mortar_Grenade_Explode2() remove(self); } +void W_Mortar_Grenade_Explode2_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Mortar_Grenade_Explode2()); +} void W_Mortar_Grenade_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { @@ -116,7 +125,7 @@ void W_Mortar_Grenade_Damage(entity this, entity inflictor, entity attacker, flo this.health = this.health - damage; if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, this.use)); + W_PrepareExplosionByDamage(this, attacker, adaptor_think2use); } void W_Mortar_Grenade_Think1() @@ -138,7 +147,7 @@ void W_Mortar_Grenade_Touch1() PROJECTILE_TOUCH; if(other.takedamage == DAMAGE_AIM || WEP_CVAR_PRI(mortar, type) == 0) // always explode when hitting a player, or if normal mortar projectile { - self.use(); + this.use(this, NULL, NULL); } else if(WEP_CVAR_PRI(mortar, type) == 1) // bounce { @@ -170,7 +179,7 @@ void W_Mortar_Grenade_Touch2() PROJECTILE_TOUCH; if(other.takedamage == DAMAGE_AIM || WEP_CVAR_SEC(mortar, type) == 0) // always explode when hitting a player, or if normal mortar projectile { - self.use(); + this.use(this, NULL, NULL); } else if(WEP_CVAR_SEC(mortar, type) == 1) // bounce { @@ -227,7 +236,7 @@ void W_Mortar_Attack(Weapon thiswep) gren.cnt = time + WEP_CVAR_PRI(mortar, lifetime); gren.nextthink = time; gren.think = W_Mortar_Grenade_Think1; - gren.use = W_Mortar_Grenade_Explode; + gren.use = W_Mortar_Grenade_Explode_use; gren.touch = W_Mortar_Grenade_Touch1; gren.takedamage = DAMAGE_YES; @@ -274,7 +283,7 @@ void W_Mortar_Attack2(Weapon thiswep) gren.nextthink = time + WEP_CVAR_SEC(mortar, lifetime); gren.think = adaptor_think2use_hittype_splash; - gren.use = W_Mortar_Grenade_Explode2; + gren.use = W_Mortar_Grenade_Explode2_use; gren.touch = W_Mortar_Grenade_Touch2; gren.takedamage = DAMAGE_YES; diff --git a/qcsrc/common/weapons/weapon/seeker.qc b/qcsrc/common/weapons/weapon/seeker.qc index 34b6e895f3..6dffec39d3 100644 --- a/qcsrc/common/weapons/weapon/seeker.qc +++ b/qcsrc/common/weapons/weapon/seeker.qc @@ -220,7 +220,7 @@ void W_Seeker_Missile_Damage(entity this, entity inflictor, entity attacker, flo this.health = this.health - damage; if(this.health <= 0) - WITHSELF(this, W_PrepareExplosionByDamage(attacker, W_Seeker_Missile_Explode)); + W_PrepareExplosionByDamage(this, attacker, W_Seeker_Missile_Explode); } /* @@ -313,6 +313,11 @@ void W_Seeker_Flac_Explode() remove(self); } +void W_Seeker_Flac_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_Seeker_Flac_Explode()); +} + void W_Seeker_Flac_Touch() { PROJECTILE_TOUCH; @@ -355,7 +360,7 @@ void W_Seeker_Fire_Flac(Weapon thiswep) missile.bot_dodge = true; missile.bot_dodgerating = WEP_CVAR(seeker, flac_damage); missile.touch = W_Seeker_Flac_Explode; - missile.use = W_Seeker_Flac_Explode; + missile.use = W_Seeker_Flac_Explode_use; missile.think = adaptor_think2use_hittype_splash; missile.nextthink = time + WEP_CVAR(seeker, flac_lifetime) + WEP_CVAR(seeker, flac_lifetime_rand); missile.solid = SOLID_BBOX; diff --git a/qcsrc/common/weapons/weapon/vaporizer.qc b/qcsrc/common/weapons/weapon/vaporizer.qc index 933124564c..8ce6caadd5 100644 --- a/qcsrc/common/weapons/weapon/vaporizer.qc +++ b/qcsrc/common/weapons/weapon/vaporizer.qc @@ -227,6 +227,11 @@ void W_RocketMinsta_Laser_Explode () remove(self); } +void W_RocketMinsta_Laser_Explode_use(entity this, entity actor, entity trigger) +{ + WITHSELF(this, W_RocketMinsta_Laser_Explode()); +} + void W_RocketMinsta_Laser_Touch () {SELFPARAM(); PROJECTILE_TOUCH; @@ -258,7 +263,7 @@ void W_RocketMinsta_Attack2() proj.owner = proj.realowner = self; proj.bot_dodge = true; proj.bot_dodgerating = autocvar_g_rm_laser_damage; - proj.use = W_RocketMinsta_Laser_Explode; + proj.use = W_RocketMinsta_Laser_Explode_use; proj.think = adaptor_think2use_hittype_splash; proj.nextthink = time + autocvar_g_rm_laser_lifetime; PROJECTILE_MAKETRIGGER(proj); @@ -310,7 +315,7 @@ void W_RocketMinsta_Attack3 () proj.owner = proj.realowner = self; proj.bot_dodge = true; proj.bot_dodgerating = autocvar_g_rm_laser_damage; - proj.use = W_RocketMinsta_Laser_Explode; + proj.use = W_RocketMinsta_Laser_Explode_use; proj.think = adaptor_think2use_hittype_splash; proj.nextthink = time + autocvar_g_rm_laser_lifetime; PROJECTILE_MAKETRIGGER(proj); diff --git a/qcsrc/dpdefs/csprogsdefs.qh b/qcsrc/dpdefs/csprogsdefs.qh index ce39bca1bd..d0125b5e31 100644 --- a/qcsrc/dpdefs/csprogsdefs.qh +++ b/qcsrc/dpdefs/csprogsdefs.qh @@ -41,4 +41,7 @@ #pragma noref 0 +#define use use1 +.void(entity this, entity actor, entity trigger) use; + #endif diff --git a/qcsrc/dpdefs/progsdefs.qh b/qcsrc/dpdefs/progsdefs.qh index 783ac036fa..e2668a54b7 100644 --- a/qcsrc/dpdefs/progsdefs.qh +++ b/qcsrc/dpdefs/progsdefs.qh @@ -28,4 +28,7 @@ MACRO_END #pragma noref 0 +#define use use1 +.void(entity this, entity actor, entity trigger) use; + #endif diff --git a/qcsrc/lib/_all.inc b/qcsrc/lib/_all.inc index fb7122fd8b..c5e020660d 100644 --- a/qcsrc/lib/_all.inc +++ b/qcsrc/lib/_all.inc @@ -103,3 +103,5 @@ void isnt_bool( float this) { print(ftos(this)); } #include "urllib.qc" #include "vector.qh" #include "yenc.qh" + +#include "matrix/_mod.inc" diff --git a/qcsrc/lib/_mod.inc b/qcsrc/lib/_mod.inc index fd811e7a9c..115a6a070f 100644 --- a/qcsrc/lib/_mod.inc +++ b/qcsrc/lib/_mod.inc @@ -1,7 +1,8 @@ // generated file; do not modify -#include "angle.qc" -#include "p2mathlib.qc" -#include "random.qc" -#include "sortlist.qc" -#include "test.qc" -#include "urllib.qc" +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/lib/_mod.qh b/qcsrc/lib/_mod.qh new file mode 100644 index 0000000000..fd97f51b65 --- /dev/null +++ b/qcsrc/lib/_mod.qh @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/lib/csqcmodel/_mod.inc b/qcsrc/lib/csqcmodel/_mod.inc index 1d4c6ec262..a2012c8fa2 100644 --- a/qcsrc/lib/csqcmodel/_mod.inc +++ b/qcsrc/lib/csqcmodel/_mod.inc @@ -1,5 +1,5 @@ // generated file; do not modify -#include "cl_model.qc" -#include "cl_player.qc" -#include "interpolate.qc" -#include "sv_model.qc" +#include +#include +#include +#include diff --git a/qcsrc/lib/csqcmodel/_mod.qh b/qcsrc/lib/csqcmodel/_mod.qh new file mode 100644 index 0000000000..de3102fa85 --- /dev/null +++ b/qcsrc/lib/csqcmodel/_mod.qh @@ -0,0 +1,5 @@ +// generated file; do not modify +#include +#include +#include +#include diff --git a/qcsrc/lib/csqcmodel/cl_player.qc b/qcsrc/lib/csqcmodel/cl_player.qc index 4e308ee56a..13fb927493 100644 --- a/qcsrc/lib/csqcmodel/cl_player.qc +++ b/qcsrc/lib/csqcmodel/cl_player.qc @@ -164,6 +164,11 @@ void CSQCPlayer_Physics(entity this) if(autocvar_cl_movement == 1) CSQCPlayer_CheckWater(this); // we apparently need to check water *before* physics so it can use this for water jump + vector oldv_angle = this.v_angle; + vector oldangles = this.angles; // we need to save these, as they're abused by other code + this.v_angle = PHYS_INPUT_ANGLES(this); + this.angles = PHYS_WORLD_ANGLES(this); + CSQC_ClientMovement_PlayerMove_Frame(this); if(autocvar_cl_movement == 1) @@ -180,6 +185,11 @@ void CSQCPlayer_Physics(entity this) Movetype_Physics_Spam(this); } + view_angles = this.v_angle; + input_angles = this.angles; + this.v_angle = oldv_angle; + this.angles = oldangles; + this.pmove_flags = ((this.flags & FL_DUCKED) ? PMF_DUCKED : 0) | (!(this.flags & FL_JUMPRELEASED) ? PMF_JUMP_HELD : 0) | diff --git a/qcsrc/lib/defer.qh b/qcsrc/lib/defer.qh index d4c1eadac7..24764ae158 100644 --- a/qcsrc/lib/defer.qh +++ b/qcsrc/lib/defer.qh @@ -9,6 +9,7 @@ class(Defer).entity owner; class(Defer).void() think; class(Defer).float nextthink; + class(Defer).void(entity) defer_func; /** Remove self */ void SUB_Remove(entity this) @@ -28,18 +29,18 @@ SELFPARAM(); this.think = SUB_Remove_self; this.nextthink = time; - WITHSELF(this.owner, this.selfthink(this)); + this.defer_func(this.owner); } /** * Execute func() after time + fdelay. * self when func is executed = self when defer is called */ - void defer(entity this, float fdelay, void(entity this) func) + void defer(entity this, float fdelay, void(entity) func) { entity e = new_pure(deferred); e.owner = this; - setthink(e, func); + e.defer_func = func; e.think = defer_think; e.nextthink = time + fdelay; } diff --git a/qcsrc/lib/json.qc b/qcsrc/lib/json.qc index 555c4b10cc..acdf198e83 100644 --- a/qcsrc/lib/json.qc +++ b/qcsrc/lib/json.qc @@ -78,7 +78,7 @@ bool _json_parse_array() { int it = bufstr_add(_json_buffer, key, 0); bool ret = false; WITH(string, _json_ns, key, ret = _json_parse_value()); if (!ret) { - bufstr_set(_json_buffer, it, string_null); + bufstr_free(_json_buffer, it); if (required) JSON_FAIL("expected value"); else break; } bufstr_set(_json_buffer, len, ftos(n + 1)); @@ -157,6 +157,7 @@ bool _json_parse_string(bool add) { case 'n': esc = "\n"; break; case 't': esc = "\t"; break; case 'u': esc = "\\u"; break; // TODO + case '/': esc = "/"; break; } s = strcat(s, esc); } else { @@ -271,6 +272,13 @@ void json_del(int buf) buf_del(buf); } +void json_dump(int buf) +{ + for (int i = 0, n = buf_getsize(buf); i < n; ++i) { + print(bufstr_get(buf, i), "\n"); + } +} + #undef JSON_BEGIN #undef JSON_FAIL #undef JSON_END @@ -287,8 +295,6 @@ TEST(json, Parse) print(s, "\n"); int buf = json_parse(s, _json_parse_object); EXPECT_NE(-1, buf); - for (int i = 0, n = buf_getsize(buf); i < n; ++i) { - print(bufstr_get(buf, i), "\n"); - } + json_dump(buf); SUCCEED(); } diff --git a/qcsrc/lib/log.qh b/qcsrc/lib/log.qh index 02a25cdad0..370d96be56 100644 --- a/qcsrc/lib/log.qh +++ b/qcsrc/lib/log.qh @@ -38,11 +38,11 @@ string(string...) strcat0n = #53; string(string...) strcat0n = #115; #endif -#define __SOURCELOC__ (sprintf("^9"__FILE__"^7" ":" "^9%s^7" ":" "^9"STR(__LINE__)"^7", __FUNC__)) +#define __SOURCELOC__ (sprintf("^7%s^9" "(" "^9"__FILE__"^7" ":" "^9"STR(__LINE__)"^7" ")", __FUNC__)) #define _LOG(f, level, s) \ MACRO_BEGIN { \ - f(sprintf("^9[::^7" PROGNAME "^9::" level "^9] [%s^9]\n^7%s\n", __SOURCELOC__, s)); \ + f(sprintf("^9[::" "^7"PROGNAME"^9" "::" level"^9" "] %s\n^7%s\n", __SOURCELOC__, s)); \ } MACRO_END #define LOG_FATAL(...) _LOG_FATAL(strcat0n(__VA_ARGS__)) diff --git a/qcsrc/lib/matrix/_mod.inc b/qcsrc/lib/matrix/_mod.inc new file mode 100644 index 0000000000..4854f092a0 --- /dev/null +++ b/qcsrc/lib/matrix/_mod.inc @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/lib/matrix/_mod.qh b/qcsrc/lib/matrix/_mod.qh new file mode 100644 index 0000000000..9658122972 --- /dev/null +++ b/qcsrc/lib/matrix/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/lib/matrix/command.qc b/qcsrc/lib/matrix/command.qc new file mode 100644 index 0000000000..27c7ec959c --- /dev/null +++ b/qcsrc/lib/matrix/command.qc @@ -0,0 +1,48 @@ +#include "command.qh" + +#include + +GENERIC_COMMAND(mx, "Send a matrix command") { + switch (argv(1)) { + case "user": + if (matrix_user) strunzone(matrix_user); + matrix_user = strzone(substring(command, argv_start_index(2), -1)); + break; + case "token": + if (matrix_access_token) strunzone(matrix_access_token); + matrix_access_token = strzone(substring(command, argv_start_index(2), -1)); + break; + case "messages": + MX_Messages(string_null); + break; + case "nick": + MX_Nick(substring(command, argv_start_index(2), -1)); + break; + case "join": + string s = substring(command, argv_start_index(2), -1); + if (s != matrix_room && matrix_room != "") { + MX_Leave(matrix_room); + strunzone(matrix_room); + } + matrix_room = strzone(s); + MX_Join(matrix_room); + break; + case "sync": + MX_Sync(string_null); + break; + case "typing": + MX_Typing(true); + break; + case "say": + MX_Say(substring(command, argv_start_index(2), -1)); + break; + case "leave": + MX_Leave(matrix_room); + matrix_room = string_null; + break; + case "forget": + MX_Forget(matrix_room); + matrix_room = ""; + break; + } +} diff --git a/qcsrc/lib/matrix/command.qh b/qcsrc/lib/matrix/command.qh new file mode 100644 index 0000000000..76459540f2 --- /dev/null +++ b/qcsrc/lib/matrix/command.qh @@ -0,0 +1,3 @@ +#pragma once + +#include "matrix.qh" diff --git a/qcsrc/lib/matrix/matrix.qc b/qcsrc/lib/matrix/matrix.qc new file mode 100644 index 0000000000..23ec02e823 --- /dev/null +++ b/qcsrc/lib/matrix/matrix.qc @@ -0,0 +1,212 @@ +#include "matrix.qh" + +.string message; + +void MX_Nick_(entity fh, entity pass, int status); +void MX_Nick(string name) +{ + if (!matrix_access_token) return; + entity pass = new_pure(mx); + pass.message = name; + url_single_fopen( + sprintf("%s/_matrix/client/r0/profile/%s/displayname?access_token=%s", autocvar_matrix_server, matrix_user, matrix_access_token), + FILE_WRITE, + MX_Nick_, + pass + ); +} +void MX_Nick_(entity fh, entity pass, int status) +{ + switch (status) { + case URL_READY_CANWRITE: { + fh.url_verb = "PUT"; + fh.url_content_type = "application/json"; + url_fputs(fh, sprintf("{\"displayname\": \"%s\"}", pass.message)); + remove(pass); + url_fclose(fh); + break; + } + } +} + + +void MX_Messages_(entity fh, entity pass, int status); +void MX_Messages(string from) +{ + if (!matrix_access_token) return; + string s = sprintf("%s/_matrix/client/r0/events?room_id=%s&limit=50&timeout=30000&from=%s&access_token=%s", autocvar_matrix_server, matrix_room, from, matrix_access_token); + url_single_fopen( + s, + FILE_READ, + MX_Messages_, + NULL + ); +} +void MX_Messages_(entity fh, entity pass, int status) +{ + switch (status) { + default: { + LOG_WARNINGF("status: %d", status); + break; + } + case URL_READY_CLOSED: break; + case URL_READY_CANREAD: { + string json = ""; + for (string s; (s = url_fgets(fh)); ) { json = strcat(json, s, "\n"); } + url_fclose(fh); + int buf = json_parse(json, _json_parse_object); + EXPECT_NE(-1, buf); + for (int i = 0, n = stof(json_get(buf, "chunk.length")); i < n; ++i) { + MX_Handle(buf, sprintf("chunk.%d", i)); + } + MX_Messages(json_get(buf, "end")); + break; + } + } +} + + +void MX_Sync_(entity fh, entity pass, int status); +void MX_Sync(string since) +{ + if (!matrix_access_token) return; + string s = strcat(autocvar_matrix_server, "/_matrix/client/r0/sync?"); + if (since) { + s = strcat(s, + "since=", since, "&", + "timeout=30000&", + sprintf("filter={\"account_data\":{\"types\":[]},\"presence\":{\"types\":[]},\"room\":{\"rooms\":[\"%s\"]}}&", matrix_room) + ); + } else { + s = strcat(s, + "timeout=0&", + "filter={\"account_data\":{\"types\":[]},\"presence\":{\"types\":[]},\"room\":{\"rooms\":[]}}&" + ); + } + s = strcat(s, "access_token=", matrix_access_token); + url_single_fopen(s, FILE_READ, MX_Sync_, NULL); +} +void MX_Sync_(entity fh, entity pass, int status) +{ + switch (status) { + default: { + LOG_WARNINGF("status: %d", status); + break; + } + case URL_READY_CLOSED: break; + case URL_READY_CANREAD: { + string json = ""; + for (string s; (s = url_fgets(fh)); ) { json = strcat(json, s, "\n"); } + url_fclose(fh); + int buf = json_parse(json, _json_parse_object); + EXPECT_NE(-1, buf); + string arr = sprintf("rooms.join.%s.timeline.events", matrix_room); + for (int i = 0, n = stof(json_get(buf, sprintf("%s.length", arr))); i < n; ++i) { + MX_Handle(buf, sprintf("%s.%d", arr, i)); + } + MX_Sync(json_get(buf, "next_batch")); + break; + } + } +} + + +void MX_JLF_(entity fh, entity pass, int status); +void MX_Join(string room) +{ + if (!matrix_access_token) return; + url_single_fopen( + sprintf("%s/_matrix/client/r0/rooms/%s/join?access_token=%s", autocvar_matrix_server, matrix_room, matrix_access_token), + FILE_WRITE, + MX_JLF_, + NULL + ); +} +void MX_Leave(string room) +{ + if (!matrix_access_token) return; + url_single_fopen( + sprintf("%s/_matrix/client/r0/rooms/%s/leave?access_token=%s", autocvar_matrix_server, matrix_room, matrix_access_token), + FILE_WRITE, + MX_JLF_, + NULL + ); +} +void MX_Forget(string room) +{ + if (!matrix_access_token) return; + url_single_fopen( + sprintf("%s/_matrix/client/r0/rooms/%s/forget?access_token=%s", autocvar_matrix_server, matrix_room, matrix_access_token), + FILE_WRITE, + MX_JLF_, + NULL + ); +} +void MX_JLF_(entity fh, entity pass, int status) +{ + switch (status) { + case URL_READY_CANWRITE: { + fh.url_content_type = "application/json"; + url_fputs(fh, sprintf("{}", pass.message)); + url_fclose(fh); + break; + } + } +} + + +void MX_Typing_(entity fh, entity pass, int status); +void MX_Typing(bool state) +{ + if (!matrix_access_token) return; + entity pass = new_pure(mx); + pass.message = state ? "true" : "false"; + url_single_fopen( + sprintf("%s/_matrix/client/r0/rooms/%s/typing/%s?access_token=%s", autocvar_matrix_server, matrix_room, matrix_user, matrix_access_token), + FILE_WRITE, + MX_Typing_, + pass + ); +} +void MX_Typing_(entity fh, entity pass, int status) +{ + switch (status) { + case URL_READY_CANWRITE: { + fh.url_verb = "PUT"; + fh.url_content_type = "application/json"; + url_fputs(fh, sprintf("{\"typing\": %s, \"timeout\": 30000}", pass.message)); + remove(pass); + url_fclose(fh); + break; + } + } +} + + +void MX_Say_(entity fh, entity pass, int status); +void MX_Say(string body) +{ + if (!matrix_access_token) return; + static int txnid; + entity pass = new_pure(mx); + pass.message = strzone(body); + url_single_fopen( + sprintf("%s/_matrix/client/r0/rooms/%s/send/m.room.message/%d?access_token=%s", autocvar_matrix_server, matrix_room, ++txnid, matrix_access_token), + FILE_WRITE, + MX_Say_, + pass + ); +} +void MX_Say_(entity fh, entity pass, int status) +{ + switch (status) { + case URL_READY_CANWRITE: { + fh.url_verb = "PUT"; + fh.url_content_type = "application/json"; + url_fputs(fh, sprintf("{\"msgtype\": \"m.text\", \"body\": \"%s\"}", pass.message)); + strunzone(pass.message); remove(pass); + url_fclose(fh); + break; + } + } +} diff --git a/qcsrc/lib/matrix/matrix.qh b/qcsrc/lib/matrix/matrix.qh new file mode 100644 index 0000000000..076d8a293b --- /dev/null +++ b/qcsrc/lib/matrix/matrix.qh @@ -0,0 +1,17 @@ +#pragma once + +string autocvar_matrix_server = "http://matrix.org"; +string matrix_user; +string matrix_access_token; +string matrix_room; + +void MX_Messages(string from); +void MX_Nick(string name); +void MX_Join(string room); +void MX_Sync(string since); +void MX_Typing(bool state); +void MX_Say(string body); +void MX_Leave(string room); +void MX_Forget(string room); + +var void(int buf, string ancestor) MX_Handle; diff --git a/qcsrc/lib/self.qh b/qcsrc/lib/self.qh index 31d7d07c80..092a8945b7 100644 --- a/qcsrc/lib/self.qh +++ b/qcsrc/lib/self.qh @@ -37,9 +37,9 @@ void touch_self() { SELFPARAM(); this.selftouch(this); } #define settouch(e, f) (e.touch = touch_self, e.selftouch = f) -.void(entity this) selfuse; -void use_self() { SELFPARAM(); this.selfuse(this); } -#define setuse(e, f) (e.use = use_self, e.selfuse = f) +//.void(entity this) selfuse; +//void use_self() { SELFPARAM(); this.selfuse(this); } +//#define setuse(e, f) (e.use = use_self, e.selfuse = f) .void(entity this) selfthink; void think_self() { SELFPARAM(); this.selfthink(this); } diff --git a/qcsrc/lib/string.qh b/qcsrc/lib/string.qh index 47a8175cac..384188091d 100644 --- a/qcsrc/lib/string.qh +++ b/qcsrc/lib/string.qh @@ -281,16 +281,24 @@ void buf_save(float buf, string pFilename) /** * converts a number to a string with the indicated number of decimals - * works for up to 10 decimals! */ string ftos_decimals(float number, int decimals) { // inhibit stupid negative zero if (number == 0) number = 0; - // we have sprintf... return sprintf("%.*f", decimals, number); } +/** + * converts a number to a string with the minimum number of decimals + */ +string ftos_mindecimals(float number) +{ + // inhibit stupid negative zero + if (number == 0) number = 0; + return sprintf("%.7g", number); +} + int vercmp_recursive(string v1, string v2) { int dot1 = strstrofs(v1, ".", 0); diff --git a/qcsrc/lib/test.qh b/qcsrc/lib/test.qh index af00f979ca..d05ae28cd9 100644 --- a/qcsrc/lib/test.qh +++ b/qcsrc/lib/test.qh @@ -46,19 +46,19 @@ bool RUN_ALL_TESTS(); #define EXPECT_FALSE(condition) EXPECT_EQ(false, condition) #define ASSERT_FALSE(condition) ASSERT_EQ(false, condition) -#define EXPECT_NE(val1, val2) EXPECT_TRUE(val1 != val2) +#define EXPECT_NE(val1, val2) EXPECT_TRUE((val1) != (val2)) #define ASSERT_NE(val1, val2) _TEST_ASSERT(EXPECT_NE(val1, val2)) -#define EXPECT_LT(val1, val2) EXPECT_TRUE(val1 < val2) +#define EXPECT_LT(val1, val2) EXPECT_TRUE((val1) < (val2)) #define ASSERT_LT(val1, val2) _TEST_ASSERT(EXPECT_LT(val1, val2)) -#define EXPECT_LE(val1, val2) EXPECT_TRUE(val1 <= val2) +#define EXPECT_LE(val1, val2) EXPECT_TRUE((val1) <= (val2)) #define ASSERT_LE(val1, val2) _TEST_ASSERT(EXPECT_LE(val1, val2)) -#define EXPECT_GT(val1, val2) EXPECT_TRUE(val1 > val2) +#define EXPECT_GT(val1, val2) EXPECT_TRUE((val1) > (val2)) #define ASSERT_GT(val1, val2) _TEST_ASSERT(EXPECT_GT(val1, val2)) -#define EXPECT_GE(val1, val2) EXPECT_TRUE(val1 >= val2) +#define EXPECT_GE(val1, val2) EXPECT_TRUE((val1) >= (val2)) #define ASSERT_GE(val1, val2) _TEST_ASSERT(EXPECT_GE(val1, val2)) #define EXPECT_NO_FATAL_FAILURE(statement) EXPECT_NO_FATAL_FAILURE_(statement, { }) diff --git a/qcsrc/lib/urllib.qc b/qcsrc/lib/urllib.qc index 80145d8b84..c4c700a72d 100644 --- a/qcsrc/lib/urllib.qc +++ b/qcsrc/lib/urllib.qc @@ -7,6 +7,8 @@ const float URL_FH_STDOUT = -2; // URLs .string url_url; +.string url_content_type; +.string url_verb; .float url_wbuf; .float url_wbufpos; .float url_rbuf; @@ -96,6 +98,8 @@ void url_single_fopen(string url, int mode, url_ready_func rdy, entity pass) // create a writing end that does nothing yet e = new_pure(url_single_fopen_file); e.url_url = strzone(url); + e.url_content_type = "text/plain"; + e.url_verb = ""; e.url_fh = URL_FH_CURL; e.url_wbuf = buf_create(); if (e.url_wbuf < 0) @@ -231,7 +235,7 @@ void url_fclose(entity e) } // POST the data - if (!crypto_uri_postbuf(e.url_url, i + MIN_URL_ID, "text/plain", "", e.url_wbuf, 0)) + if (!crypto_uri_postbuf(e.url_url, i + MIN_URL_ID, e.url_content_type, e.url_verb, e.url_wbuf, 0)) { LOG_INFO("url_fclose: failure in crypto_uri_postbuf\n"); e.url_ready(e, e.url_ready_pass, URL_READY_ERROR); diff --git a/qcsrc/lib/warpzone/_mod.inc b/qcsrc/lib/warpzone/_mod.inc index ef257d6f6d..274e8c0aeb 100644 --- a/qcsrc/lib/warpzone/_mod.inc +++ b/qcsrc/lib/warpzone/_mod.inc @@ -1,7 +1,7 @@ // generated file; do not modify -#include "anglestransform.qc" -#include "client.qc" -#include "common.qc" -#include "mathlib.qc" -#include "server.qc" -#include "util_server.qc" +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/lib/warpzone/_mod.qh b/qcsrc/lib/warpzone/_mod.qh new file mode 100644 index 0000000000..d679cc928b --- /dev/null +++ b/qcsrc/lib/warpzone/_mod.qh @@ -0,0 +1,7 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/lib/warpzone/server.qc b/qcsrc/lib/warpzone/server.qc index 2b860d6f43..f8260b5ad0 100644 --- a/qcsrc/lib/warpzone/server.qc +++ b/qcsrc/lib/warpzone/server.qc @@ -241,21 +241,18 @@ void WarpZone_Touch () { #ifdef SVQC string save1, save2; - activator = other; save1 = this.target; this.target = string_null; save2 = this.target3; this.target3 = string_null; - SUB_UseTargets(); + SUB_UseTargets(this, other, other); // use other too? if (!this.target) this.target = save1; if (!this.target3) this.target3 = save2; - setself(this.enemy); save1 = this.target; this.target = string_null; save2 = this.target2; this.target2 = string_null; - SUB_UseTargets(); + SUB_UseTargets(this.enemy, other, other); // use other too? if (!this.target) this.target = save1; if (!this.target2) this.target2 = save2; - setself(this); #endif } else @@ -412,27 +409,19 @@ float WarpZone_CheckProjectileImpact(entity player) player.velvec = player.warpzone_oldvelocity; if(WarpZone_Teleport(wz, player, 0, 1)) { - entity oldself; string save1, save2; - oldself = self; - self = wz; - other = player; - activator = player; - - save1 = self.target; self.target = string_null; - save2 = self.target3; self.target3 = string_null; - SUB_UseTargets(); - if (!self.target) self.target = save1; - if (!self.target3) self.target3 = save2; - - self = self.enemy; - save1 = self.target; self.target = string_null; - save2 = self.target2; self.target2 = string_null; - SUB_UseTargets(); - if (!self.target) self.target = save1; - if (!self.target2) self.target2 = save2; - self = oldself; + save1 = wz.target; wz.target = string_null; + save2 = wz.target3; wz.target3 = string_null; + SUB_UseTargets(wz, player, player); + if (!wz.target) wz.target = save1; + if (!wz.target3) wz.target3 = save2; + + save1 = wz.enemy.target; wz.enemy.target = string_null; + save2 = wz.enemy.target2; wz.enemy.target2 = string_null; + SUB_UseTargets(wz.enemy, player, player); + if (!wz.enemy.target) wz.enemy.target = save1; + if (!wz.enemy.target2) wz.enemy.target2 = save2; } else { @@ -906,8 +895,8 @@ bool visible_to_some_client(entity ent) )); return false; } -void trigger_warpzone_reconnect_use() -{SELFPARAM(); +void trigger_warpzone_reconnect_use(entity this, entity actor, entity trigger) +{ // NOTE: this matches for target, not targetname, but of course // targetname must be set too on the other entities for(entity e = warpzone_first; e; e = e.warpzone_next) diff --git a/qcsrc/menu/_mod.inc b/qcsrc/menu/_mod.inc index 589808ec11..e1a26e76b6 100644 --- a/qcsrc/menu/_mod.inc +++ b/qcsrc/menu/_mod.inc @@ -1,4 +1,5 @@ // generated file; do not modify -#include "draw.qc" -#include "item.qc" -#include "menu.qc" +#include +#include +#include +#include diff --git a/qcsrc/menu/_mod.qh b/qcsrc/menu/_mod.qh new file mode 100644 index 0000000000..a5fe87d3e4 --- /dev/null +++ b/qcsrc/menu/_mod.qh @@ -0,0 +1,5 @@ +// generated file; do not modify +#include +#include +#include +#include diff --git a/qcsrc/menu/anim/_mod.inc b/qcsrc/menu/anim/_mod.inc index c8048a1178..e979fe2f5b 100644 --- a/qcsrc/menu/anim/_mod.inc +++ b/qcsrc/menu/anim/_mod.inc @@ -1,5 +1,5 @@ // generated file; do not modify -#include "animation.qc" -#include "animhost.qc" -#include "easing.qc" -#include "keyframe.qc" +#include +#include +#include +#include diff --git a/qcsrc/menu/anim/_mod.qh b/qcsrc/menu/anim/_mod.qh new file mode 100644 index 0000000000..8208cdd297 --- /dev/null +++ b/qcsrc/menu/anim/_mod.qh @@ -0,0 +1,5 @@ +// generated file; do not modify +#include +#include +#include +#include diff --git a/qcsrc/menu/command/_mod.inc b/qcsrc/menu/command/_mod.inc index 061d60a452..e721f357a3 100644 --- a/qcsrc/menu/command/_mod.inc +++ b/qcsrc/menu/command/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "all.qc" -#include "menu_cmd.qc" +#include +#include diff --git a/qcsrc/menu/command/_mod.qh b/qcsrc/menu/command/_mod.qh new file mode 100644 index 0000000000..5e66557301 --- /dev/null +++ b/qcsrc/menu/command/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/menu/item/_mod.inc b/qcsrc/menu/item/_mod.inc index a470788a6f..d80de382d2 100644 --- a/qcsrc/menu/item/_mod.inc +++ b/qcsrc/menu/item/_mod.inc @@ -1,17 +1,17 @@ // generated file; do not modify -#include "borderimage.qc" -#include "button.qc" -#include "checkbox.qc" -#include "container.qc" -#include "dialog.qc" -#include "image.qc" -#include "inputbox.qc" -#include "inputcontainer.qc" -#include "label.qc" -#include "listbox.qc" -#include "modalcontroller.qc" -#include "nexposee.qc" -#include "radiobutton.qc" -#include "slider.qc" -#include "tab.qc" -#include "textslider.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/menu/item/_mod.qh b/qcsrc/menu/item/_mod.qh new file mode 100644 index 0000000000..0dee9d9332 --- /dev/null +++ b/qcsrc/menu/item/_mod.qh @@ -0,0 +1,17 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/menu/matrix.qc b/qcsrc/menu/matrix.qc new file mode 100644 index 0000000000..b0c4ec880c --- /dev/null +++ b/qcsrc/menu/matrix.qc @@ -0,0 +1,26 @@ +var void MX_Handle(int buf, string ancestor) +{ + string type = json_get(buf, strcat(ancestor, ".type")); + switch (type) { + case "m.typing": { + string arr = strcat(ancestor, ".content.user_ids"); + for (int i = 0, n = stof(json_get(buf, sprintf("%s.length", arr))); i < n; ++i) { + string s = json_get(buf, sprintf("%s.%d", arr, i)); + print("\{1}", s, " is typing...\n"); + } + break; + } + case "m.room.message": { + string msgtype = json_get(buf, strcat(ancestor, ".content.msgtype")); + switch (msgtype) { + case "m.text": { + string sender = json_get(buf, strcat(ancestor, ".sender")); + string body = json_get(buf, strcat(ancestor, ".content.body")); + if (body) print("\{1}", sender, ": ", body, "\n"); + break; + } + } + break; + } + } +} diff --git a/qcsrc/menu/mutators/_mod.qh b/qcsrc/menu/mutators/_mod.qh new file mode 100644 index 0000000000..98fb4815c1 --- /dev/null +++ b/qcsrc/menu/mutators/_mod.qh @@ -0,0 +1 @@ +// generated file; do not modify diff --git a/qcsrc/menu/progs.inc b/qcsrc/menu/progs.inc index 57a34c36c7..9b15d8caa6 100644 --- a/qcsrc/menu/progs.inc +++ b/qcsrc/menu/progs.inc @@ -1,6 +1,6 @@ #include -#include "_mod.inc" +#include "../menu/_mod.inc" #include "anim/_mod.inc" #include "command/_mod.inc" #include "item/_mod.inc" diff --git a/qcsrc/menu/xonotic/_mod.inc b/qcsrc/menu/xonotic/_mod.inc index 4702bbf70d..867f77b840 100644 --- a/qcsrc/menu/xonotic/_mod.inc +++ b/qcsrc/menu/xonotic/_mod.inc @@ -1,116 +1,116 @@ // generated file; do not modify -#include "bigbutton.qc" -#include "bigcommandbutton.qc" -#include "button.qc" -#include "campaign.qc" -#include "charmap.qc" -#include "checkbox.qc" -#include "checkbox_slider_invalid.qc" -#include "checkbox_string.qc" -#include "colorbutton.qc" -#include "colorpicker.qc" -#include "colorpicker_string.qc" -#include "commandbutton.qc" -#include "credits.qc" -#include "crosshairpicker.qc" -#include "crosshairpreview.qc" -#include "cvarlist.qc" -#include "datasource.qc" -#include "demolist.qc" -#include "dialog.qc" -#include "dialog_credits.qc" -#include "dialog_firstrun.qc" -#include "dialog_hudpanel_ammo.qc" -#include "dialog_hudpanel_centerprint.qc" -#include "dialog_hudpanel_chat.qc" -#include "dialog_hudpanel_engineinfo.qc" -#include "dialog_hudpanel_healtharmor.qc" -#include "dialog_hudpanel_infomessages.qc" -#include "dialog_hudpanel_itemstime.qc" -#include "dialog_hudpanel_modicons.qc" -#include "dialog_hudpanel_notification.qc" -#include "dialog_hudpanel_physics.qc" -#include "dialog_hudpanel_powerups.qc" -#include "dialog_hudpanel_pressedkeys.qc" -#include "dialog_hudpanel_quickmenu.qc" -#include "dialog_hudpanel_racetimer.qc" -#include "dialog_hudpanel_radar.qc" -#include "dialog_hudpanel_score.qc" -#include "dialog_hudpanel_timer.qc" -#include "dialog_hudpanel_vote.qc" -#include "dialog_hudpanel_weapons.qc" -#include "dialog_hudsetup_exit.qc" -#include "dialog_monstertools.qc" -#include "dialog_multiplayer.qc" -#include "dialog_multiplayer_create.qc" -#include "dialog_multiplayer_create_mapinfo.qc" -#include "dialog_multiplayer_create_mutators.qc" -#include "dialog_multiplayer_join.qc" -#include "dialog_multiplayer_join_serverinfo.qc" -#include "dialog_multiplayer_media.qc" -#include "dialog_multiplayer_media_demo.qc" -#include "dialog_multiplayer_media_demo_startconfirm.qc" -#include "dialog_multiplayer_media_demo_timeconfirm.qc" -#include "dialog_multiplayer_media_musicplayer.qc" -#include "dialog_multiplayer_media_screenshot.qc" -#include "dialog_multiplayer_media_screenshot_viewer.qc" -#include "dialog_multiplayer_profile.qc" -#include "dialog_quit.qc" -#include "dialog_sandboxtools.qc" -#include "dialog_settings.qc" -#include "dialog_settings_audio.qc" -#include "dialog_settings_effects.qc" -#include "dialog_settings_game.qc" -#include "dialog_settings_game_crosshair.qc" -#include "dialog_settings_game_hud.qc" -#include "dialog_settings_game_hudconfirm.qc" -#include "dialog_settings_game_messages.qc" -#include "dialog_settings_game_model.qc" -#include "dialog_settings_game_view.qc" -#include "dialog_settings_game_weapons.qc" -#include "dialog_settings_input.qc" -#include "dialog_settings_input_userbind.qc" -#include "dialog_settings_misc.qc" -#include "dialog_settings_misc_cvars.qc" -#include "dialog_settings_misc_reset.qc" -#include "dialog_settings_user.qc" -#include "dialog_settings_user_languagewarning.qc" -#include "dialog_settings_video.qc" -#include "dialog_singleplayer.qc" -#include "dialog_singleplayer_winner.qc" -#include "dialog_teamselect.qc" -#include "gametypelist.qc" -#include "hudskinlist.qc" -#include "image.qc" -#include "inputbox.qc" -#include "keybinder.qc" -#include "languagelist.qc" -#include "listbox.qc" -#include "mainwindow.qc" -#include "maplist.qc" -#include "nexposee.qc" -#include "picker.qc" -#include "playerlist.qc" -#include "playermodel.qc" -#include "playlist.qc" -#include "radiobutton.qc" -#include "rootdialog.qc" -#include "screenshotimage.qc" -#include "screenshotlist.qc" -#include "serverlist.qc" -#include "skinlist.qc" -#include "slider.qc" -#include "slider_decibels.qc" -#include "slider_particles.qc" -#include "slider_picmip.qc" -#include "slider_resolution.qc" -#include "slider_sbfadetime.qc" -#include "soundlist.qc" -#include "statslist.qc" -#include "tab.qc" -#include "tabcontroller.qc" -#include "textlabel.qc" -#include "textslider.qc" -#include "util.qc" -#include "weaponarenacheckbox.qc" -#include "weaponslist.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/menu/xonotic/_mod.qh b/qcsrc/menu/xonotic/_mod.qh new file mode 100644 index 0000000000..adfefc05d7 --- /dev/null +++ b/qcsrc/menu/xonotic/_mod.qh @@ -0,0 +1,116 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/menu/xonotic/checkbox.qc b/qcsrc/menu/xonotic/checkbox.qc index 21743b9a15..6015e48bad 100644 --- a/qcsrc/menu/xonotic/checkbox.qc +++ b/qcsrc/menu/xonotic/checkbox.qc @@ -77,9 +77,9 @@ void XonoticCheckBox_saveCvars(entity me) return; if(me.checked) - cvar_set(me.cvarName, ftos(me.yesValue)); + cvar_set(me.cvarName, ftos_mindecimals(me.yesValue)); else - cvar_set(me.cvarName, ftos(me.noValue)); + cvar_set(me.cvarName, ftos_mindecimals(me.noValue)); CheckSendCvars(me, me.cvarName); } diff --git a/qcsrc/menu/xonotic/cvarlist.qc b/qcsrc/menu/xonotic/cvarlist.qc index 956285ec8b..f23af46d9e 100644 --- a/qcsrc/menu/xonotic/cvarlist.qc +++ b/qcsrc/menu/xonotic/cvarlist.qc @@ -2,6 +2,7 @@ #include "inputbox.qh" #include "../item/container.qh" +#include "../item/checkbox.qh" entity makeXonoticCvarList() { @@ -16,19 +17,47 @@ void XonoticCvarList_configureXonoticCvarList(entity me) me.handle = buf_create(); me.nItems = 0; } +void CvarList_Load(entity me, string filter) +{ + if(me.handle < 0) + return; + + buf_cvarlist(me.handle, filter, "_"); + me.nItems = buf_getsize(me.handle); + if(autocvar_menu_cvarlist_onlymodified) + { + float newbuf = buf_create(); + for (int i = 0; i < me.nItems; ++i) + { + string k = bufstr_get(me.handle, i); + if(cvar_string(k) != cvar_defstring(k)) + bufstr_add(newbuf, k, false); + } + buf_del(me.handle); + me.handle = newbuf; + me.nItems = buf_getsize(me.handle); + } +} void XonoticCvarList_showNotify(entity me) { bool force_initial_selection = false; if(me.handle >= 0 && me.nItems <= 0) // me.handle not loaded yet? force_initial_selection = true; - buf_cvarlist(me.handle, "", "_"); - me.nItems = buf_getsize(me.handle); + CvarList_Load(me, me.controlledTextbox.text); if(force_initial_selection) me.setSelected(me, 0); } +void XonoticCvarList_hideNotify(entity me) +{ + if(me.handle) + buf_del(me.handle); + me.handle = buf_create(); + me.nItems = 0; +} void XonoticCvarList_destroy(entity me) { - buf_del(me.handle); + if(me.handle) + buf_del(me.handle); } string autocvar_menu_forced_saved_cvars; string autocvar_menu_reverted_nonsaved_cvars; @@ -102,9 +131,14 @@ void XonoticCvarList_setSelected(entity me, float i) } void CvarList_Filter_Change(entity box, entity me) { - buf_cvarlist(me.handle, box.text, "_"); - me.nItems = buf_getsize(me.handle); - + CvarList_Load(me, box.text); + me.setSelected(me, 0); +} +void CvarList_Filter_ModifiedCvars(entity box, entity me) +{ + cvar_set("menu_cvarlist_onlymodified", ftos(!autocvar_menu_cvarlist_onlymodified)); + box.setChecked(box, autocvar_menu_cvarlist_onlymodified); + CvarList_Load(me, me.controlledTextbox.text); me.setSelected(me, 0); } void XonoticCvarList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) diff --git a/qcsrc/menu/xonotic/cvarlist.qh b/qcsrc/menu/xonotic/cvarlist.qh index 4bc56b3b8d..2c99866cf7 100644 --- a/qcsrc/menu/xonotic/cvarlist.qh +++ b/qcsrc/menu/xonotic/cvarlist.qh @@ -8,6 +8,7 @@ CLASS(XonoticCvarList, XonoticListBox) METHOD(XonoticCvarList, resizeNotify, void(entity, vector, vector, vector, vector)); METHOD(XonoticCvarList, keyDown, float(entity, float, float, float)); METHOD(XonoticCvarList, showNotify, void(entity)); + METHOD(XonoticCvarList, hideNotify, void(entity)); METHOD(XonoticCvarList, destroy, void(entity)); @@ -38,6 +39,9 @@ CLASS(XonoticCvarList, XonoticListBox) ENDCLASS(XonoticCvarList) entity makeXonoticCvarList(); void CvarList_Filter_Change(entity box, entity me); +void CvarList_Filter_ModifiedCvars(entity box, entity me); void CvarList_Value_Change(entity box, entity me); void CvarList_Revert_Click(entity btn, entity me); void CvarList_End_Editing(entity box, entity me); + +float autocvar_menu_cvarlist_onlymodified; diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc b/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc index c158ebabfc..ac305b8325 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc +++ b/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc @@ -11,6 +11,8 @@ void XonoticHUDHealthArmorDialog_fill(entity me) DIALOG_HUDPANEL_COMMON(); + me.TR(me); + me.TD(me, 1, 4, e = makeXonoticCheckBox(0, "hud_panel_healtharmor_combined", _("Combine health and armor"))); me.TR(me); me.TD(me, 1, 4, e = makeXonoticCheckBox(0, "hud_panel_healtharmor_progressbar", _("Enable status bar"))); me.TR(me); diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qh b/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qh index 68ffe79ea5..495047c5fc 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qh +++ b/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qh @@ -6,7 +6,7 @@ CLASS(XonoticHUDHealthArmorDialog, XonoticRootDialog) ATTRIB(XonoticHUDHealthArmorDialog, title, string, _("Health/Armor Panel")) ATTRIB(XonoticHUDHealthArmorDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDHealthArmorDialog, intendedWidth, float, 0.4) - ATTRIB(XonoticHUDHealthArmorDialog, rows, float, 15) + ATTRIB(XonoticHUDHealthArmorDialog, rows, float, 16) ATTRIB(XonoticHUDHealthArmorDialog, columns, float, 4) ATTRIB(XonoticHUDHealthArmorDialog, name, string, "HUDhealtharmor") ATTRIB(XonoticHUDHealthArmorDialog, requiresConnection, float, true) diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc b/qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc index 1676aab803..61339b6b93 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc +++ b/qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc @@ -56,6 +56,7 @@ void XonoticHUDWeaponsDialog_fill(entity me) me.TR(me); me.TDempty(me, 0.2); me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Weapon ID scale:"))); + setDependent(e, "hud_panel_weapons_label", 1, 2); me.TD(me, 1, 2.4, e = makeXonoticSlider(0.1, 1, 0.05, "hud_panel_weapons_label_scale")); setDependent(e, "hud_panel_weapons_label", 1, 2); me.TR(me); @@ -65,11 +66,13 @@ void XonoticHUDWeaponsDialog_fill(entity me) me.TR(me); me.TDempty(me, 0.2); me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Ammo bar alpha:"))); + setDependent(e, "hud_panel_weapons_ammo", 1, 1); me.TD(me, 1, 2.4, e = makeXonoticSlider(0.1, 1, 0.1, "hud_panel_weapons_ammo_alpha")); setDependent(e, "hud_panel_weapons_ammo", 1, 1); me.TR(me); me.TDempty(me, 0.2); me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Ammo bar color:"))); + setDependent(e, "hud_panel_weapons_ammo", 1, 1); me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_weapons_ammo_color", "hud_panel_weapons_ammo_color")); setDependent(e, "hud_panel_weapons_ammo", 1, 1); me.TR(me); diff --git a/qcsrc/menu/xonotic/dialog_settings_effects.qc b/qcsrc/menu/xonotic/dialog_settings_effects.qc index 1b0666c75a..0f5c5a4af2 100644 --- a/qcsrc/menu/xonotic/dialog_settings_effects.qc +++ b/qcsrc/menu/xonotic/dialog_settings_effects.qc @@ -135,6 +135,7 @@ void XonoticEffectsSettingsTab_fill(entity me) me.TR(me); me.TD(me, 1, 1, e = makeXonoticCheckBox_T(1, "mod_q3bsp_nolightmaps", _("Use lightmaps"), _("Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"))); + e.applyButton = effectsApplyButton; me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_deluxemapping", _("Deluxe mapping"), _("Use per-pixel lighting effects (default: enabled)"))); setDependentAND(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0); diff --git a/qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc b/qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc index 664306738d..a03c547312 100644 --- a/qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc +++ b/qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc @@ -123,6 +123,7 @@ void XonoticGameCrosshairSettingsTab_fill(entity me) setDependent(e, "crosshair_enabled", 1, 2); me.TR(me); me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Hit testing:"))); + setDependent(e, "crosshair_enabled", 1, 2); me.TD(me, 1, 2, e = makeXonoticTextSlider_T("crosshair_hittest", _("None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy"))); e.addValue(e, ZCTX(_("HTTST^Disabled")), "0"); diff --git a/qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc b/qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc index f1fec78cf2..f35e0d22db 100644 --- a/qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc +++ b/qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc @@ -1,5 +1,6 @@ #include "dialog_settings_misc_cvars.qh" +#include "checkbox.qh" #include "cvarlist.qh" #include "textlabel.qh" #include "inputbox.qh" @@ -28,15 +29,16 @@ void XonoticCvarsDialog_fill(entity me) // in this dialog, use SKINCOLOR_CVARLIS me.TR(me); me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Cvar filter:"))); - me.TD(me, 1, me.columns - 1, e = makeXonoticInputBox(0, string_null)); - e.color = SKINCOLOR_CVARLIST_CONTROLS; - e.colorF = SKINCOLOR_CVARLIST_CONTROLS; - e.cb_color = SKINCOLOR_CVARLIST_CONTROLS; - e.cb_colorC = SKINCOLOR_CVARLIST_CONTROLS; - e.cb_colorF = SKINCOLOR_CVARLIST_CONTROLS; + me.TD(me, 1, 3, e = makeXonoticInputBox(0, string_null)); + e.color = e.colorF = SKINCOLOR_CVARLIST_CONTROLS; + e.cb_color = e.cb_colorC = e.cb_colorF = SKINCOLOR_CVARLIST_CONTROLS; e.onChange = CvarList_Filter_Change; e.onChangeEntity = cvarlist; cvarlist.controlledTextbox = e; // this COULD also be the Value box, but this leads to accidentally editing stuff + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "menu_cvarlist_onlymodified", _("Modified cvars only"))); + e.color = e.colorC = e.colorF = e.colorD = SKINCOLOR_CVARLIST_CONTROLS; + e.onClickEntity = cvarlist; + e.onClick = CvarList_Filter_ModifiedCvars; me.TR(me); me.TD(me, me.rows - me.currentRow - 9, me.columns, cvarlist); me.gotoRC(me, me.rows - 8, 0); @@ -51,11 +53,8 @@ void XonoticCvarsDialog_fill(entity me) // in this dialog, use SKINCOLOR_CVARLIS me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Value:"))); me.TD(me, 1, me.columns - 2, e = makeXonoticInputBox(0, string_null)); cvarlist.cvarValueBox = e; - e.color = SKINCOLOR_CVARLIST_CONTROLS; - e.colorF = SKINCOLOR_CVARLIST_CONTROLS; - e.cb_color = SKINCOLOR_CVARLIST_CONTROLS; - e.cb_colorC = SKINCOLOR_CVARLIST_CONTROLS; - e.cb_colorF = SKINCOLOR_CVARLIST_CONTROLS; + e.color = e.colorF = SKINCOLOR_CVARLIST_CONTROLS; + e.cb_color = e.cb_colorC = e.cb_colorF = SKINCOLOR_CVARLIST_CONTROLS; e.onChange = CvarList_Value_Change; e.onChangeEntity = cvarlist; e.onEnter = CvarList_End_Editing; diff --git a/qcsrc/menu/xonotic/dialog_settings_video.qc b/qcsrc/menu/xonotic/dialog_settings_video.qc index 1ec53c623e..9320a6ebf2 100644 --- a/qcsrc/menu/xonotic/dialog_settings_video.qc +++ b/qcsrc/menu/xonotic/dialog_settings_video.qc @@ -86,6 +86,7 @@ void XonoticVideoSettingsTab_fill(entity me) e.addValue(e, _("4x"), "4"); e.configureXonoticTextSliderValues(e); setDependent(e, "r_viewfbo", 0, 0); + e.applyButton = videoApplyButton; me.TR(me); me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "r_viewfbo", _("High-quality frame buffer"))); setDependent(e, "vid_samples", 1, 1); @@ -154,6 +155,7 @@ void XonoticVideoSettingsTab_fill(entity me) _("Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"))); me.TR(me); me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", _("Use OpenGL 2.0 shaders (GLSL)"))); + e.applyButton = videoApplyButton; me.TR(me); me.TDempty(me, 0.2); me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "v_glslgamma", _("Use GLSL to handle color control"), diff --git a/qcsrc/menu/xonotic/slider.qc b/qcsrc/menu/xonotic/slider.qc index fc4228cf98..c8e057a641 100644 --- a/qcsrc/menu/xonotic/slider.qc +++ b/qcsrc/menu/xonotic/slider.qc @@ -58,7 +58,7 @@ void XonoticSlider_saveCvars(entity me) if (!me.cvarName) return; - cvar_set(me.cvarName, ftos(me.value)); + cvar_set(me.cvarName, ftos_mindecimals(me.value)); CheckSendCvars(me, me.cvarName); } diff --git a/qcsrc/server/_mod.inc b/qcsrc/server/_mod.inc index d502c48ed3..f22742f1dd 100644 --- a/qcsrc/server/_mod.inc +++ b/qcsrc/server/_mod.inc @@ -1,32 +1,33 @@ // generated file; do not modify -#include "anticheat.qc" -#include "antilag.qc" -#include "campaign.qc" -#include "cheats.qc" -#include "cl_client.qc" -#include "cl_impulse.qc" -#include "cl_player.qc" -#include "g_damage.qc" -#include "g_hook.qc" -#include "g_lights.qc" -#include "g_models.qc" -#include "g_subs.qc" -#include "g_world.qc" -#include "ipban.qc" -#include "item_key.qc" -#include "mapvoting.qc" -#include "miscfunctions.qc" -#include "playerdemo.qc" -#include "portals.qc" -#include "race.qc" -#include "round_handler.qc" -#include "scores.qc" -#include "scores_rules.qc" -#include "spawnpoints.qc" -#include "steerlib.qc" -#include "sv_main.qc" -#include "teamplay.qc" -#include "tests.qc" -#include "t_halflife.qc" -#include "t_quake.qc" -#include "t_quake3.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/_mod.qh b/qcsrc/server/_mod.qh new file mode 100644 index 0000000000..17e0a829d4 --- /dev/null +++ b/qcsrc/server/_mod.qh @@ -0,0 +1,33 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 893bb64785..c565298e8f 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -220,8 +220,11 @@ float autocvar_g_maxspeed; bool autocvar_g_instagib_damagedbycontents = true; bool autocvar_g_instagib_blaster_keepdamage = false; bool autocvar_g_instagib_blaster_keepforce = false; +bool autocvar_g_instagib_mirrordamage; +bool autocvar_g_instagib_friendlypush = true; #define autocvar_g_mirrordamage cvar("g_mirrordamage") #define autocvar_g_mirrordamage_virtual cvar("g_mirrordamage_virtual") +bool autocvar_g_mirrordamage_onlyweapons; float autocvar_g_movement_highspeed = 1; string autocvar_g_mutatormsg; @@ -331,6 +334,7 @@ int autocvar_sv_clientcommand_antispam_count; bool autocvar_sv_curl_serverpackages_auto; bool autocvar_sv_db_saveasdump; bool autocvar_sv_defaultcharacter; +bool autocvar_sv_defaultcharacterskin; string autocvar_sv_defaultplayercolors; string autocvar_sv_defaultplayermodel; string autocvar_sv_defaultplayermodel_blue; diff --git a/qcsrc/server/bot/_mod.inc b/qcsrc/server/bot/_mod.inc index 02ef867616..787939110d 100644 --- a/qcsrc/server/bot/_mod.inc +++ b/qcsrc/server/bot/_mod.inc @@ -1,6 +1,6 @@ // generated file; do not modify -#include "aim.qc" -#include "bot.qc" -#include "navigation.qc" -#include "scripting.qc" -#include "waypoints.qc" +#include +#include +#include +#include +#include diff --git a/qcsrc/server/bot/_mod.qh b/qcsrc/server/bot/_mod.qh new file mode 100644 index 0000000000..802d391878 --- /dev/null +++ b/qcsrc/server/bot/_mod.qh @@ -0,0 +1,6 @@ +// generated file; do not modify +#include +#include +#include +#include +#include diff --git a/qcsrc/server/bot/aim.qc b/qcsrc/server/bot/aim.qc index 2d6a642bab..0f138d2d56 100644 --- a/qcsrc/server/bot/aim.qc +++ b/qcsrc/server/bot/aim.qc @@ -156,8 +156,8 @@ void bot_lagfunc(entity this, float t, float f1, float f2, entity e1, vector v1, } this.bot_aimtarg = e1; this.bot_aimlatency = this.ping; // FIXME? Shouldn't this be in the lag item? - this.bot_aimselforigin = v1; - this.bot_aimselfvelocity = v2; + //this.bot_aimselforigin = v1; + //this.bot_aimselfvelocity = v2; this.bot_aimtargorigin = v3; this.bot_aimtargvelocity = v4; if(skill <= 0) diff --git a/qcsrc/server/bot/aim.qh b/qcsrc/server/bot/aim.qh index 5a1cb16c4d..a26e64bc79 100644 --- a/qcsrc/server/bot/aim.qh +++ b/qcsrc/server/bot/aim.qh @@ -74,8 +74,8 @@ vector shotdir; .vector bot_5th_order_aimfilter; .vector bot_olddesiredang; -.vector bot_aimselforigin; -.vector bot_aimselfvelocity; +//.vector bot_aimselforigin; +//.vector bot_aimselfvelocity; .vector bot_aimtargorigin; .vector bot_aimtargvelocity; diff --git a/qcsrc/server/bot/havocbot/_mod.inc b/qcsrc/server/bot/havocbot/_mod.inc index fa2d660a07..a6270bc138 100644 --- a/qcsrc/server/bot/havocbot/_mod.inc +++ b/qcsrc/server/bot/havocbot/_mod.inc @@ -1,3 +1,3 @@ // generated file; do not modify -#include "havocbot.qc" -#include "roles.qc" +#include +#include diff --git a/qcsrc/server/bot/havocbot/_mod.qh b/qcsrc/server/bot/havocbot/_mod.qh new file mode 100644 index 0000000000..4b62d1b8e6 --- /dev/null +++ b/qcsrc/server/bot/havocbot/_mod.qh @@ -0,0 +1,3 @@ +// generated file; do not modify +#include +#include diff --git a/qcsrc/server/bot/havocbot/havocbot.qc b/qcsrc/server/bot/havocbot/havocbot.qc index 5403b35ca6..cff3fe2145 100644 --- a/qcsrc/server/bot/havocbot/havocbot.qc +++ b/qcsrc/server/bot/havocbot/havocbot.qc @@ -1106,24 +1106,24 @@ void havocbot_chooseweapon(entity this) void havocbot_aim(entity this) { - vector selfvel, enemyvel; + vector myvel, enemyvel; // if(this.flags & FL_INWATER) // return; if (time < this.nextaim) return; this.nextaim = time + 0.1; - selfvel = this.velocity; + myvel = this.velocity; if (!this.waterlevel) - selfvel.z = 0; + myvel.z = 0; if (this.enemy) { enemyvel = this.enemy.velocity; if (!this.enemy.waterlevel) enemyvel.z = 0; - lag_additem(this, time + this.ping, 0, 0, this.enemy, this.origin, selfvel, (this.enemy.absmin + this.enemy.absmax) * 0.5, enemyvel); + lag_additem(this, time + this.ping, 0, 0, this.enemy, this.origin, myvel, (this.enemy.absmin + this.enemy.absmax) * 0.5, enemyvel); } else - lag_additem(this, time + this.ping, 0, 0, world, this.origin, selfvel, ( this.goalcurrent.absmin + this.goalcurrent.absmax ) * 0.5, '0 0 0'); + lag_additem(this, time + this.ping, 0, 0, world, this.origin, myvel, ( this.goalcurrent.absmin + this.goalcurrent.absmax ) * 0.5, '0 0 0'); } bool havocbot_moveto_refresh_route(entity this) @@ -1273,6 +1273,7 @@ vector havocbot_dodge() // LordHavoc: disabled because this is too expensive return '0 0 0'; #if 0 +SELFPARAM(); entity head; vector dodge, v, n; float danger, bestdanger, vl, d; @@ -1282,13 +1283,13 @@ vector havocbot_dodge() head = findchainfloat(bot_dodge, true); while(head) { - if (head.owner != self) + if (head.owner != this) { vl = vlen(head.velocity); if (vl > autocvar_sv_maxspeed * 0.3) { n = normalize(head.velocity); - v = self.origin - head.origin; + v = this.origin - head.origin; d = v * n; if (d > (0 - head.bot_dodgerating)) if (d < (vl * 0.2 + head.bot_dodgerating)) @@ -1306,11 +1307,11 @@ vector havocbot_dodge() } else { - danger = head.bot_dodgerating - vlen(head.origin - self.origin); + danger = head.bot_dodgerating - vlen(head.origin - this.origin); if (bestdanger < danger) { bestdanger = danger; - dodge = normalize(self.origin - head.origin); + dodge = normalize(this.origin - head.origin); } } } diff --git a/qcsrc/server/bot/navigation.qc b/qcsrc/server/bot/navigation.qc index 56cf7d9815..e4e389b15c 100644 --- a/qcsrc/server/bot/navigation.qc +++ b/qcsrc/server/bot/navigation.qc @@ -15,8 +15,8 @@ // rough simulation of walking from one point to another to test if a path // can be traveled, used for waypoint linking and havocbot -float tracewalk(entity e, vector start, vector m1, vector m2, vector end, float movemode) -{SELFPARAM(); +bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float movemode) +{ vector org; vector move; vector dir; @@ -30,7 +30,7 @@ float tracewalk(entity e, vector start, vector m1, vector m2, vector end, float if(autocvar_bot_debug_tracewalk) { debugresetnodes(); - debugnode(self, start); + debugnode(e, start); } move = end - start; @@ -81,7 +81,7 @@ float tracewalk(entity e, vector start, vector m1, vector m2, vector end, float return true; } if(autocvar_bot_debug_tracewalk) - debugnode(self, org); + debugnode(e, org); if (dist <= 0) break; @@ -107,16 +107,16 @@ float tracewalk(entity e, vector start, vector m1, vector m2, vector end, float tracebox(org, m1, m2, org + move * stepdist, movemode, e); if(autocvar_bot_debug_tracewalk) - debugnode(self, trace_endpos); + debugnode(e, trace_endpos); if (trace_fraction < 1) { swimming = true; org = trace_endpos - normalize(org - trace_endpos) * stepdist; - for (; org.z < end.z + self.maxs.z; org.z += stepdist) + for (; org.z < end.z + e.maxs.z; org.z += stepdist) { if(autocvar_bot_debug_tracewalk) - debugnode(self, org); + debugnode(e, org); if(pointcontents(org) == CONTENT_EMPTY) break; @@ -142,7 +142,7 @@ float tracewalk(entity e, vector start, vector m1, vector m2, vector end, float tracebox(org, m1, m2, move, movemode, e); if(autocvar_bot_debug_tracewalk) - debugnode(self, trace_endpos); + debugnode(e, trace_endpos); // hit something if (trace_fraction < 1) @@ -470,8 +470,6 @@ float navigation_markroutes_nearestwaypoints(entity this, entity waylist, float if(vdist(diff, <, maxdist)) { head.wpconsidered = true; - entity oldself = self; - setself(this); if (tracewalk(this, this.origin, this.mins, this.maxs, v, bot_navigation_movemode)) { head.wpnearestpoint = v; @@ -480,7 +478,6 @@ float navigation_markroutes_nearestwaypoints(entity this, entity waylist, float head.enemy = world; c = c + 1; } - setself(oldself); } } head = head.chain; @@ -1086,8 +1083,6 @@ void navigation_unstuck(entity this) // evaluate the next goal on the queue float d = vlen(this.origin - bot_waypoint_queue_goal.origin); LOG_DEBUG(strcat(this.netname, " evaluating ", bot_waypoint_queue_goal.classname, " with distance ", ftos(d), "\n")); - entity oldself = self; - setself(this); // tracewalk has questionable use of self if(tracewalk(bot_waypoint_queue_goal, this.origin, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), bot_waypoint_queue_goal.origin, bot_navigation_movemode)) { if( d > bot_waypoint_queue_bestgoalrating) @@ -1096,7 +1091,6 @@ void navigation_unstuck(entity this) bot_waypoint_queue_bestgoal = bot_waypoint_queue_goal; } } - setself(oldself); bot_waypoint_queue_goal = bot_waypoint_queue_goal.bot_waypoint_queue_nextgoal; if (!bot_waypoint_queue_goal) diff --git a/qcsrc/server/bot/waypoints.qc b/qcsrc/server/bot/waypoints.qc index 184710818c..bba6a1b9e2 100644 --- a/qcsrc/server/bot/waypoints.qc +++ b/qcsrc/server/bot/waypoints.qc @@ -32,6 +32,7 @@ entity waypoint_spawn(vector m1, vector m2, float f) w = new(waypoint); w.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP | DPCONTENTS_BOTCLIP; w.wpflags = f; + w.solid = SOLID_TRIGGER; setorigin(w, (m1 + m2) * 0.5); setsize(w, m1 - w.origin, m2 - w.origin); if (vlen(w.size) > 0) @@ -171,20 +172,20 @@ void waypoint_think() bot_navigation_movemode = ((autocvar_bot_navigation_ignoreplayers) ? MOVE_NOMONSTERS : MOVE_NORMAL); - //dprint("waypoint_think wpisbox = ", ftos(self.wpisbox), "\n"); - sm1 = self.origin + self.mins; - sm2 = self.origin + self.maxs; + //dprint("waypoint_think wpisbox = ", ftos(this.wpisbox), "\n"); + sm1 = this.origin + this.mins; + sm2 = this.origin + this.maxs; for(e = world; (e = find(e, classname, "waypoint")); ) { - if (boxesoverlap(self.absmin, self.absmax, e.absmin, e.absmax)) + if (boxesoverlap(this.absmin, this.absmax, e.absmin, e.absmax)) { - waypoint_addlink(self, e); - waypoint_addlink(e, self); + waypoint_addlink(this, e); + waypoint_addlink(e, this); } else { ++relink_total; - if(!checkpvs(self.origin, e)) + if(!checkpvs(this.origin, e)) { ++relink_pvsculled; continue; @@ -193,7 +194,7 @@ void waypoint_think() sv.x = bound(sm1_x, sv.x, sm2_x); sv.y = bound(sm1_y, sv.y, sm2_y); sv.z = bound(sm1_z, sv.z, sm2_z); - ev = self.origin; + ev = this.origin; em1 = e.origin + e.mins; em2 = e.origin + e.maxs; ev.x = bound(em1_x, ev.x, em2_x); @@ -207,9 +208,9 @@ void waypoint_think() continue; } navigation_testtracewalk = 0; - if (!self.wpisbox) + if (!this.wpisbox) { - tracebox(sv - STAT(PL_MIN, NULL).z * '0 0 1', STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), sv, false, self); + tracebox(sv - STAT(PL_MIN, NULL).z * '0 0 1', STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), sv, false, this); if (!trace_startsolid) { //dprint("sv deviation", vtos(trace_endpos - sv), "\n"); @@ -225,20 +226,20 @@ void waypoint_think() ev = trace_endpos + '0 0 1'; } } - //traceline(self.origin, e.origin, false, world); + //traceline(this.origin, e.origin, false, world); //if (trace_fraction == 1) - if (!self.wpisbox && tracewalk(self, sv, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), ev, MOVE_NOMONSTERS)) - waypoint_addlink(self, e); + if (!this.wpisbox && tracewalk(this, sv, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), ev, MOVE_NOMONSTERS)) + waypoint_addlink(this, e); else relink_walkculled += 0.5; if (!e.wpisbox && tracewalk(e, ev, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), sv, MOVE_NOMONSTERS)) - waypoint_addlink(e, self); + waypoint_addlink(e, this); else relink_walkculled += 0.5; } } navigation_testtracewalk = 0; - self.wplinked = true; + this.wplinked = true; } void waypoint_clearlinks(entity wp) diff --git a/qcsrc/server/cheats.qc b/qcsrc/server/cheats.qc index e13678dce5..add6d53556 100644 --- a/qcsrc/server/cheats.qc +++ b/qcsrc/server/cheats.qc @@ -675,8 +675,7 @@ float CheatCommand(float argc) IS_CHEAT(0, argc, 0); setself(spawn()); self.target = argv(1); - activator = this; - SUB_UseTargets(); + SUB_UseTargets(self, this, NULL); remove(self); setself(this); DID_CHEAT(); @@ -685,8 +684,7 @@ float CheatCommand(float argc) IS_CHEAT(0, argc, 0); setself(spawn()); self.killtarget = argv(1); - activator = this; - SUB_UseTargets(); + SUB_UseTargets(self, this, NULL); remove(self); setself(this); DID_CHEAT(); diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 9edcf8d5f0..c157530fa7 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -371,6 +371,19 @@ void FixPlayermodel(entity player) defaultmodel = substring(defaultmodel, 0, i); } } + if(autocvar_sv_defaultcharacterskin && !defaultskin) + { + if(teamplay) + { + string s = Static_Team_ColorName_Lower(player.team); + if (s != "neutral") + defaultskin = cvar(strcat("sv_defaultplayerskin_", s)); + } + + if(!defaultskin) + defaultskin = autocvar_sv_defaultplayerskin; + } + MUTATOR_CALLHOOK(FixPlayermodel, defaultmodel, defaultskin); defaultmodel = ret_string; defaultskin = ret_int; @@ -401,8 +414,16 @@ void FixPlayermodel(entity player) chmdl = true; } - oldskin = player.skin; - player.skin = stof(player.playerskin); + if(!autocvar_sv_defaultcharacterskin) + { + oldskin = player.skin; + player.skin = stof(player.playerskin); + } + else + { + oldskin = player.skin; + player.skin = defaultskin; + } } if(chmdl || oldskin != player.skin) // model or skin has changed @@ -569,7 +590,8 @@ void PutClientInServer() this.oldorigin = this.origin; this.prevorigin = this.origin; this.lastteleporttime = time; // prevent insane speeds due to changing origin - this.hud = HUD_NORMAL; + this.conveyor = NULL; // prevent conveyors at the previous location from moving a freshly spawned player + this.hud = HUD_NORMAL; this.event_damage = PlayerDamage; @@ -607,9 +629,7 @@ void PutClientInServer() { string s = spot.target; spot.target = string_null; - WITH(entity, activator, this, LAMBDA( - WITHSELF(spot, SUB_UseTargets()) - )); + SUB_UseTargets(spot, this, NULL); spot.target = s; } diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 42904695c6..8aaf68cda6 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -657,6 +657,12 @@ void MoveToTeam(entity client, int team_colour, int type) LogTeamchange(client.playerid, client.team, type); } +/** print(), but only print if the server is not local */ +void dedicated_print(string input) +{ + if (server_is_dedicated) print(input); +} + /** * message "": do not say, just test flood control * return value: @@ -664,20 +670,14 @@ void MoveToTeam(entity client, int team_colour, int type) * 0 = reject * -1 = fake accept */ -int Say(entity source, float teamsay, entity privatesay, string msgin, bool floodcontrol) +int Say(entity source, int teamsay, entity privatesay, string msgin, bool floodcontrol) { - string msgstr, colorstr, cmsgstr, namestr, fullmsgstr, sourcemsgstr, fullcmsgstr, sourcecmsgstr, colorprefix; - float flood; - var .float flood_field; - float ret; - string privatemsgprefix = string_null; float privatemsgprefixlen = 0; - - if(!teamsay && !privatesay) - if(substring(msgin, 0, 1) == " ") - msgin = substring(msgin, 1, strlen(msgin) - 1); // work around DP say bug (say_team does not have this!) + if (!teamsay && !privatesay) if (substring(msgin, 0, 1) == " ") + msgin = substring(msgin, 1, -1); // work around DP say bug (say_team does not have this!) msgin = formatmessage(msgin); + string colorstr; if (!IS_PLAYER(source)) colorstr = "^0"; // black for spectators else if(teamplay) @@ -691,6 +691,11 @@ int Say(entity source, float teamsay, entity privatesay, string msgin, bool floo if(intermission_running) teamsay = false; + if (!source) { + colorstr = ""; + teamsay = false; + } + if(msgin != "") msgin = trigger_magicear_processmessage_forallears(source, teamsay, privatesay, msgin); @@ -705,18 +710,18 @@ int Say(entity source, float teamsay, entity privatesay, string msgin, bool floo } */ - if(autocvar_g_chat_teamcolors) - namestr = playername(source); - else - namestr = source.netname; + string namestr = ""; + if (source) + namestr = autocvar_g_chat_teamcolors ? playername(source) : source.netname; - if(strdecolorize(namestr) == namestr) - colorprefix = "^3"; - else - colorprefix = "^7"; + string colorprefix = (strdecolorize(namestr) == namestr) ? "^3" : "^7"; - if(msgin != "") - { + string msgstr, cmsgstr; + string privatemsgprefix = string_null; + int privatemsgprefixlen = 0; + if (msgin == "") { + msgstr = cmsgstr = ""; + } else { if(privatesay) { msgstr = strcat("\{1}\{13}* ", colorprefix, namestr, "^3 tells you: ^7"); @@ -750,23 +755,22 @@ int Say(entity source, float teamsay, entity privatesay, string msgin, bool floo msgin = strreplace("/me", strcat(colorprefix, namestr), msgin); msgstr = strcat("\{1}^4* ", "^7", msgin); } - else - msgstr = strcat("\{1}", colorprefix, namestr, "^7: ", msgin); + else { + msgstr = "\{1}"; + msgstr = strcat(msgstr, (namestr != "") ? strcat(colorprefix, namestr, "^7: ") : "^7"); + msgstr = strcat(msgstr, msgin); + } cmsgstr = ""; } msgstr = strcat(strreplace("\n", " ", msgstr), "\n"); // newlines only are good for centerprint } - else - { - msgstr = cmsgstr = ""; - } - fullmsgstr = msgstr; - fullcmsgstr = cmsgstr; + string fullmsgstr = msgstr; + string fullcmsgstr = cmsgstr; // FLOOD CONTROL - flood = 0; - flood_field = floodcontrol_chat; + int flood = 0; + var .float flood_field = floodcontrol_chat; if(floodcontrol) { float flood_spl; @@ -838,6 +842,7 @@ int Say(entity source, float teamsay, entity privatesay, string msgin, bool floo source.(flood_field) = flood = 0; } + string sourcemsgstr, sourcecmsgstr; if(flood == 2) // cannot happen for empty msgstr { if(autocvar_g_chat_flood_notify_flooder) @@ -858,8 +863,7 @@ int Say(entity source, float teamsay, entity privatesay, string msgin, bool floo sourcecmsgstr = cmsgstr; } - if(!privatesay) - if (!IS_PLAYER(source)) + if (!privatesay && source && !IS_PLAYER(source)) { if (!intermission_running) if(teamsay || (autocvar_g_chat_nospectators == 1) || (autocvar_g_chat_nospectators == 2 && !(warmup_stage || gameover))) @@ -873,6 +877,7 @@ int Say(entity source, float teamsay, entity privatesay, string msgin, bool floo if(privatesay) sourcemsgstr = strcat(privatemsgprefix, substring(sourcemsgstr, privatemsgprefixlen, -1)); + int ret; if(source.muted) { // always fake the message @@ -913,7 +918,7 @@ int Say(entity source, float teamsay, entity privatesay, string msgin, bool floo { sprint(source, sourcemsgstr); dedicated_print(msgstr); // send to server console too - FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != source && it.active_minigame == source.active_minigame, LAMBDA(sprint(it, msgstr))); + FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != source && it.active_minigame == source.active_minigame, sprint(it, msgstr)); } else if(teamsay > 0) // team message, only sent to team mates { @@ -921,26 +926,27 @@ int Say(entity source, float teamsay, entity privatesay, string msgin, bool floo dedicated_print(msgstr); // send to server console too if(sourcecmsgstr != "") centerprint(source, sourcecmsgstr); - FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it) && it != source && it.team == source.team, LAMBDA( + FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it) && it != source && it.team == source.team, { sprint(it, msgstr); if(cmsgstr != "") centerprint(it, cmsgstr); - )); + }); } else if(teamsay < 0) // spectator message, only sent to spectators { sprint(source, sourcemsgstr); dedicated_print(msgstr); // send to server console too - FOREACH_CLIENT(!IS_PLAYER(it) && IS_REAL_CLIENT(it) && it != source, LAMBDA(sprint(it, msgstr))); - } - else if(sourcemsgstr != msgstr) // trimmed/server fixed message, sent to all players - { - sprint(source, sourcemsgstr); - dedicated_print(msgstr); // send to server console too - FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != source, LAMBDA(sprint(it, msgstr))); + FOREACH_CLIENT(!IS_PLAYER(it) && IS_REAL_CLIENT(it) && it != source, sprint(it, msgstr)); } else - bprint(msgstr); // entirely normal message, sent to all players -- bprint sends to server console too. + { + if (source) { + sprint(source, sourcemsgstr); + dedicated_print(msgstr); // send to server console too + MX_Say(strcat(playername(source), "^7: ", msgin)); + } + FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != source, sprint(it, msgstr)); + } } return ret; diff --git a/qcsrc/server/command/_mod.inc b/qcsrc/server/command/_mod.inc index 1f2b37a0dc..fa15432311 100644 --- a/qcsrc/server/command/_mod.inc +++ b/qcsrc/server/command/_mod.inc @@ -1,9 +1,11 @@ // generated file; do not modify -#include "all.qc" -#include "banning.qc" -#include "cmd.qc" -#include "common.qc" -#include "getreplies.qc" -#include "radarmap.qc" -#include "sv_cmd.qc" -#include "vote.qc" +#include +#include +#include +#ifdef SVQC + #include +#endif +#include +#include +#include +#include diff --git a/qcsrc/server/command/_mod.qh b/qcsrc/server/command/_mod.qh new file mode 100644 index 0000000000..60e34ffe52 --- /dev/null +++ b/qcsrc/server/command/_mod.qh @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/command/vote.qc b/qcsrc/server/command/vote.qc index 4bd8dee6e5..2b1e4e75de 100644 --- a/qcsrc/server/command/vote.qc +++ b/qcsrc/server/command/vote.qc @@ -570,10 +570,15 @@ float VoteCommand_checkargs(float startpos, float argc) { float p, q, check, minargs; string cvarname = strcat("sv_vote_command_restriction_", argv(startpos)); - string cmdrestriction = cvar_string(cvarname); // note: this warns on undefined cvar. We want that. + string cmdrestriction = ""; // No we don't. string charlist, arg; float checkmate; + if(cvar_type(cvarname) & CVAR_TYPEFLAG_EXISTS) + cmdrestriction = cvar_string(cvarname); + else + LOG_INFO("NOTE: ", cvarname, " does not exist, no restrictions will be applied.\n"); + if (cmdrestriction == "") return true; ++startpos; // skip command name diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 7124e4468f..29374036cf 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -299,8 +299,8 @@ void W_Porto_Remove (entity p); .entity ballcarried; // Also used for keepaway float g_nexball_meter_period; -void SUB_DontUseTargets(); -void SUB_UseTargets(); +void SUB_DontUseTargets(entity this, entity actor, entity trigger); +void SUB_UseTargets(entity this, entity actor, entity trigger); .void(entity this) reset; // if set, an entity is reset using this .void() reset2; // if set, an entity is reset using this (after calling ALL the reset functions for other entities) @@ -384,7 +384,7 @@ const float ACTIVE_IDLE = 2; const float ACTIVE_BUSY = 2; const float ACTIVE_TOGGLE = 3; .float active; -.void (float act_state) setactive; +.void (entity this, int act_state) setactive; .entity realowner; //float serverflags; diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index 208ae62e59..675b794ecd 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -328,7 +328,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype) return; } LogDeath("suicide", deathtype, targ, targ); - GiveFrags(attacker, targ, -1, deathtype); + if(deathtype != DEATH_AUTOTEAMCHANGE.m_id) // special case: don't negate frags if auto switched + GiveFrags(attacker, targ, -1, deathtype); } // ====== @@ -873,6 +874,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, int d setself(this); // apply mirror damage if any + if(!autocvar_g_mirrordamage_onlyweapons || DEATH_WEAPONOF(deathtype) != WEP_Null) if(mirrordamage > 0 || mirrorforce > 0) { attacker = attacker_save; diff --git a/qcsrc/server/g_lights.qc b/qcsrc/server/g_lights.qc index 5e9273f7cd..352f0be430 100644 --- a/qcsrc/server/g_lights.qc +++ b/qcsrc/server/g_lights.qc @@ -82,13 +82,12 @@ void dynlight_find_target(entity this) self.think = dynlight_think; self.nextthink = time + 0.1; } -void dynlight_use() +void dynlight_use(entity this, entity actor, entity trigger) { - SELFPARAM(); - if (self.light_lev == 0) - self.light_lev = self.lefty; + if (this.light_lev == 0) + this.light_lev = this.lefty; else - self.light_lev = 0; + this.light_lev = 0; } spawnfunc(dynlight) { diff --git a/qcsrc/server/g_models.qc b/qcsrc/server/g_models.qc index baca561786..6623a0778e 100644 --- a/qcsrc/server/g_models.qc +++ b/qcsrc/server/g_models.qc @@ -16,39 +16,39 @@ class(BGMScript) .float bgmscriptrelease; .float modelscale; -void g_model_setcolormaptoactivator () -{SELFPARAM(); +void g_model_setcolormaptoactivator(entity this, entity actor, entity trigger) +{ if(teamplay) { - if(activator.team) - self.colormap = (activator.team - 1) * 0x11; + if(actor.team) + this.colormap = (actor.team - 1) * 0x11; else - self.colormap = 0x00; + this.colormap = 0x00; } else - self.colormap = floor(random() * 256); - self.colormap |= BIT(10); // RENDER_COLORMAPPED + this.colormap = floor(random() * 256); + this.colormap |= BIT(10); // RENDER_COLORMAPPED } -void g_clientmodel_setcolormaptoactivator () -{SELFPARAM(); - g_model_setcolormaptoactivator(); - self.SendFlags |= (BIT(3) | BIT(0)); +void g_clientmodel_setcolormaptoactivator(entity this, entity actor, entity trigger) +{ + g_model_setcolormaptoactivator(this, actor, trigger); + this.SendFlags |= (BIT(3) | BIT(0)); } -void g_clientmodel_use() -{SELFPARAM(); - if (self.antiwall_flag == 1) +void g_clientmodel_use(entity this, entity actor, entity trigger) +{ + if (this.antiwall_flag == 1) { - self.inactive = 1; - self.solid = SOLID_NOT; + this.inactive = 1; + this.solid = SOLID_NOT; } - else if (self.antiwall_flag == 2) + else if (this.antiwall_flag == 2) { - self.inactive = 0; - self.solid = self.default_solid; + this.inactive = 0; + this.solid = this.default_solid; } - g_clientmodel_setcolormaptoactivator(); + g_clientmodel_setcolormaptoactivator(this, actor, trigger); } void g_model_dropbyspawnflags(entity this) diff --git a/qcsrc/server/g_subs.qh b/qcsrc/server/g_subs.qh index 49bcd8904f..dc8ffe8c0d 100644 --- a/qcsrc/server/g_subs.qh +++ b/qcsrc/server/g_subs.qh @@ -4,7 +4,6 @@ void SUB_NullThink(); void() SUB_CalcMoveDone; void() SUB_CalcAngleMoveDone; -//void() SUB_UseTargets; spawnfunc(info_null); diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 99411e0bb2..054e19d746 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -413,6 +413,7 @@ void cvar_changes_init() BADCVAR("sv_autotaunt"); BADCVAR("sv_curl_defaulturl"); BADCVAR("sv_defaultcharacter"); + BADCVAR("sv_defaultcharacterskin"); BADCVAR("sv_defaultplayercolors"); BADCVAR("sv_defaultplayermodel"); BADCVAR("sv_defaultplayerskin"); @@ -584,9 +585,8 @@ spawnfunc(worldspawn) { server_is_dedicated = boolean(stof(cvar_defstring("is_dedicated"))); + bool wantrestart = false; { - bool wantrestart = false; - if (!server_is_dedicated) { // force unloading of server pk3 files when starting a listen server @@ -733,6 +733,9 @@ spawnfunc(worldspawn) if(!limits_are_set) SetLimits(autocvar_fraglimit_override, autocvar_leadlimit_override, autocvar_timelimit_override, -1); + if(warmup_limit == 0) + warmup_limit = (autocvar_timelimit > 0) ? autocvar_timelimit * 60 : autocvar_timelimit; + player_count = 0; bot_waypoints_for_items = autocvar_g_waypoints_for_items; if(bot_waypoints_for_items == 1) @@ -864,7 +867,7 @@ spawnfunc(worldspawn) CheatInit(); - localcmd("\n_sv_hook_gamestart ", GetGametype(), "\n"); + if (!wantrestart) localcmd("\n_sv_hook_gamestart ", GetGametype(), "\n"); // fill sv_curl_serverpackages from .serverpackage files if (autocvar_sv_curl_serverpackages_auto) diff --git a/qcsrc/server/item_key.qc b/qcsrc/server/item_key.qc index 0230a21cbb..9688d51db1 100644 --- a/qcsrc/server/item_key.qc +++ b/qcsrc/server/item_key.qc @@ -84,8 +84,7 @@ void item_key_touch() string oldmsg = self.message; self.message = ""; - activator = other; - SUB_UseTargets(); + SUB_UseTargets(self, other, other); // TODO: should we be using other for the trigger here? self.message = oldmsg; }; diff --git a/qcsrc/server/matrix.qc b/qcsrc/server/matrix.qc new file mode 100644 index 0000000000..b7d26decf5 --- /dev/null +++ b/qcsrc/server/matrix.qc @@ -0,0 +1,22 @@ +#include "matrix.qh" + +#include "cl_player.qh" + +var void MX_Handle(int buf, string ancestor) +{ + string type = json_get(buf, strcat(ancestor, ".type")); + switch (type) { + case "m.room.message": { + string msgtype = json_get(buf, strcat(ancestor, ".content.msgtype")); + switch (msgtype) { + case "m.text": { + string sender = json_get(buf, strcat(ancestor, ".sender")); + string body = json_get(buf, strcat(ancestor, ".content.body")); + if (sender != matrix_user && body) Say(NULL, false, NULL, body, false); + break; + } + } + break; + } + } +} diff --git a/qcsrc/server/matrix.qh b/qcsrc/server/matrix.qh new file mode 100644 index 0000000000..6f70f09bee --- /dev/null +++ b/qcsrc/server/matrix.qh @@ -0,0 +1 @@ +#pragma once diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 72747037de..9b5a279d55 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -969,21 +969,15 @@ void adaptor_think2touch() void adaptor_think2use() {SELFPARAM(); - entity o, a; - o = other; - a = activator; - activator = world; - other = world; - self.use(); - other = o; - activator = a; + if(this.use) + this.use(this, NULL, NULL); } void adaptor_think2use_hittype_splash() // for timed projectile detonation {SELFPARAM(); - if(!(IS_ONGROUND(self))) // if onground, we ARE touching something, but HITTYPE_SPLASH is to be networked if the damage causing projectile is not touching ANYTHING - self.projectiledeathtype |= HITTYPE_SPLASH; - adaptor_think2use(); + if(!(IS_ONGROUND(this))) // if onground, we ARE touching something, but HITTYPE_SPLASH is to be networked if the damage causing projectile is not touching ANYTHING + this.projectiledeathtype |= HITTYPE_SPLASH; + WITHSELF(this, adaptor_think2use()); } // deferred dropping diff --git a/qcsrc/server/miscfunctions.qh b/qcsrc/server/miscfunctions.qh index 04221e439e..2e947f29db 100644 --- a/qcsrc/server/miscfunctions.qh +++ b/qcsrc/server/miscfunctions.qh @@ -116,6 +116,8 @@ void WarpZone_crosshair_trace(entity pl); void WarpZone_traceline_antilag (entity source, vector v1, vector v2, float nomonst, entity forent, float lag); +void adaptor_think2use(); + #define IS_DEAD(s) ((s).deadflag != DEAD_NO) @@ -262,8 +264,6 @@ void readlevelcvars() warmup_stage = cvar("g_warmup"); warmup_limit = cvar("g_warmup_limit"); - if(warmup_limit == 0) - warmup_limit = (autocvar_timelimit > 0) ? autocvar_timelimit * 60 : autocvar_timelimit; g_warmup_allguns = cvar("g_warmup_allguns"); g_warmup_allow_timeout = cvar("g_warmup_allow_timeout"); diff --git a/qcsrc/server/mutators/_mod.inc b/qcsrc/server/mutators/_mod.inc index 254d13d7e2..3d2321896c 100644 --- a/qcsrc/server/mutators/_mod.inc +++ b/qcsrc/server/mutators/_mod.inc @@ -1,2 +1,2 @@ // generated file; do not modify -#include "all.qc" +#include diff --git a/qcsrc/server/mutators/_mod.qh b/qcsrc/server/mutators/_mod.qh new file mode 100644 index 0000000000..8feb1f37d8 --- /dev/null +++ b/qcsrc/server/mutators/_mod.qh @@ -0,0 +1,2 @@ +// generated file; do not modify +#include diff --git a/qcsrc/server/mutators/mutator/_mod.inc b/qcsrc/server/mutators/mutator/_mod.inc index c56c2db5ab..6835f5d560 100644 --- a/qcsrc/server/mutators/mutator/_mod.inc +++ b/qcsrc/server/mutators/mutator/_mod.inc @@ -1,14 +1,14 @@ // generated file; do not modify -#include "gamemode_assault.qc" -#include "gamemode_ca.qc" -#include "gamemode_ctf.qc" -#include "gamemode_cts.qc" -#include "gamemode_deathmatch.qc" -#include "gamemode_domination.qc" -#include "gamemode_freezetag.qc" -#include "gamemode_invasion.qc" -#include "gamemode_keepaway.qc" -#include "gamemode_keyhunt.qc" -#include "gamemode_lms.qc" -#include "gamemode_race.qc" -#include "gamemode_tdm.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/mutators/mutator/_mod.qh b/qcsrc/server/mutators/mutator/_mod.qh new file mode 100644 index 0000000000..aef0b332ab --- /dev/null +++ b/qcsrc/server/mutators/mutator/_mod.qh @@ -0,0 +1,14 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/mutators/mutator/gamemode_assault.qc b/qcsrc/server/mutators/mutator/gamemode_assault.qc index 34c19d4251..e7785c7d0a 100644 --- a/qcsrc/server/mutators/mutator/gamemode_assault.qc +++ b/qcsrc/server/mutators/mutator/gamemode_assault.qc @@ -62,29 +62,27 @@ const float ST_ASSAULT_OBJECTIVES = 1; const float SP_ASSAULT_OBJECTIVES = 4; // predefined spawnfuncs -void target_objective_decrease_activate(); +void target_objective_decrease_activate(entity this); #endif #ifdef IMPLEMENTATION .entity sprite; // random functions -void assault_objective_use() -{SELFPARAM(); +void assault_objective_use(entity this, entity actor, entity trigger) +{ // activate objective - self.health = 100; - //print("^2Activated objective ", self.targetname, "=", etos(self), "\n"); - //print("Activator is ", activator.classname, "\n"); + this.health = 100; + //print("^2Activated objective ", this.targetname, "=", etos(this), "\n"); + //print("Activator is ", actor.classname, "\n"); for (entity e = world; (e = find(e, target, this.targetname)); ) { if (e.classname == "target_objective_decrease") { - WITHSELF(e, target_objective_decrease_activate()); + target_objective_decrease_activate(e); } } - - setself(this); } vector target_objective_spawn_evalfunc(entity player, entity spot, vector current) @@ -102,47 +100,40 @@ void assault_objective_reset(entity this) } // decrease the health of targeted objectives -void assault_objective_decrease_use() -{SELFPARAM(); - if(activator.team != assault_attacker_team) +void assault_objective_decrease_use(entity this, entity actor, entity trigger) +{ + if(actor.team != assault_attacker_team) { // wrong team triggered decrease return; } - if(other.assault_sprite) + if(trigger.assault_sprite) { - WaypointSprite_Disown(other.assault_sprite, waypointsprite_deadlifetime); - if(other.classname == "func_assault_destructible") - other.sprite = world; + WaypointSprite_Disown(trigger.assault_sprite, waypointsprite_deadlifetime); + if(trigger.classname == "func_assault_destructible") + trigger.sprite = world; // TODO: just unsetting it?! } else return; // already activated! cannot activate again! - if(self.enemy.health < ASSAULT_VALUE_INACTIVE) + if(this.enemy.health < ASSAULT_VALUE_INACTIVE) { - if(self.enemy.health - self.dmg > 0.5) + if(this.enemy.health - this.dmg > 0.5) { - PlayerTeamScore_Add(activator, SP_SCORE, ST_SCORE, self.dmg); - self.enemy.health = self.enemy.health - self.dmg; + PlayerTeamScore_Add(actor, SP_SCORE, ST_SCORE, this.dmg); + this.enemy.health = this.enemy.health - this.dmg; } else { - PlayerTeamScore_Add(activator, SP_SCORE, ST_SCORE, self.enemy.health); - PlayerTeamScore_Add(activator, SP_ASSAULT_OBJECTIVES, ST_ASSAULT_OBJECTIVES, 1); - self.enemy.health = -1; - - entity oldactivator; + PlayerTeamScore_Add(actor, SP_SCORE, ST_SCORE, this.enemy.health); + PlayerTeamScore_Add(actor, SP_ASSAULT_OBJECTIVES, ST_ASSAULT_OBJECTIVES, 1); + this.enemy.health = -1; - setself(this.enemy); - if(self.message) - FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(centerprint(it, self.message))); + if(this.enemy.message) + FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(centerprint(it, this.enemy.message))); - oldactivator = activator; - activator = this; - SUB_UseTargets(); - activator = oldactivator; - setself(this); + SUB_UseTargets(this.enemy, this, trigger); } } } @@ -150,19 +141,19 @@ void assault_objective_decrease_use() void assault_setenemytoobjective(entity this) { entity objective; - for(objective = world; (objective = find(objective, targetname, self.target)); ) + for(objective = world; (objective = find(objective, targetname, this.target)); ) { if(objective.classname == "target_objective") { - if(self.enemy == world) - self.enemy = objective; + if(this.enemy == world) + this.enemy = objective; else objerror("more than one objective as target - fix the map!"); break; } } - if(self.enemy == world) + if(this.enemy == world) objerror("no objective as target - fix the map!"); } @@ -178,21 +169,21 @@ float assault_decreaser_sprite_visible(entity e) return true; } -void target_objective_decrease_activate() -{SELFPARAM(); +void target_objective_decrease_activate(entity this) +{ entity ent, spr; - self.owner = world; - for(ent = world; (ent = find(ent, target, self.targetname)); ) + this.owner = world; + for(ent = world; (ent = find(ent, target, this.targetname)); ) { if(ent.assault_sprite != world) { WaypointSprite_Disown(ent.assault_sprite, waypointsprite_deadlifetime); if(ent.classname == "func_assault_destructible") - ent.sprite = world; + ent.sprite = world; // TODO: just unsetting it?! } spr = WaypointSprite_SpawnFixed(WP_Assault, 0.5 * (ent.absmin + ent.absmax), ent, assault_sprite, RADARICON_OBJECTIVE); - spr.assault_decreaser = self; + spr.assault_decreaser = this; spr.waypointsprite_visible_for_player = assault_decreaser_sprite_visible; spr.classname = "sprite_waypoint"; WaypointSprite_UpdateRule(spr, assault_attacker_team, SPRITERULE_TEAMPLAY); @@ -220,15 +211,14 @@ void target_assault_roundend_reset(entity this) this.winning = false; // up round } -void target_assault_roundend_use() -{SELFPARAM(); - self.winning = 1; // round has been won by attackers +void target_assault_roundend_use(entity this, entity actor, entity trigger) +{ + this.winning = 1; // round has been won by attackers } -void assault_roundstart_use(entity this) +void assault_roundstart_use(entity this, entity actor, entity trigger) { - activator = self; - SUB_UseTargets(); + SUB_UseTargets(this, this, trigger); //(Re)spawn all turrets FOREACH_ENTITY_CLASS("turret_main", true, LAMBDA( @@ -242,10 +232,14 @@ void assault_roundstart_use(entity this) WITHSELF(it, turret_respawn()); )); } +void assault_roundstart_use_this(entity this) +{ + assault_roundstart_use(this, NULL, NULL); +} void assault_roundstart_use_self() { SELFPARAM(); - assault_roundstart_use(this); + assault_roundstart_use(this, NULL, NULL); } void assault_wall_think() @@ -276,13 +270,10 @@ void assault_new_round() FOREACH_CLIENT(IS_PLAYER(it) && it.vehicle, WITHSELF(it, vehicles_exit(VHEF_RELEASE))); FOREACH_ENTITY_FLAGS(vehicle_flags, VHF_ISVEHICLE, LAMBDA( - setself(it); - vehicles_clearreturn(self); - vehicles_spawn(); + vehicles_clearreturn(it); + WITHSELF(it, vehicles_spawn()); )); - setself(this); - // up round counter self.winning = self.winning + 1; @@ -348,17 +339,17 @@ int WinningCondition_Assault() // spawnfuncs spawnfunc(info_player_attacker) { - if (!g_assault) { remove(self); return; } + if (!g_assault) { remove(this); return; } - self.team = NUM_TEAM_1; // red, gets swapped every round + this.team = NUM_TEAM_1; // red, gets swapped every round spawnfunc_info_player_deathmatch(this); } spawnfunc(info_player_defender) { - if (!g_assault) { remove(self); return; } + if (!g_assault) { remove(this); return; } - self.team = NUM_TEAM_2; // blue, gets swapped every round + this.team = NUM_TEAM_2; // blue, gets swapped every round spawnfunc_info_player_deathmatch(this); } @@ -375,71 +366,71 @@ spawnfunc(target_objective) spawnfunc(target_objective_decrease) { - if (!g_assault) { remove(self); return; } + if (!g_assault) { remove(this); return; } - self.classname = "target_objective_decrease"; + this.classname = "target_objective_decrease"; - if(!self.dmg) - self.dmg = 101; + if(!this.dmg) + this.dmg = 101; - self.use = assault_objective_decrease_use; - self.health = ASSAULT_VALUE_INACTIVE; - self.max_health = ASSAULT_VALUE_INACTIVE; - self.enemy = world; + this.use = assault_objective_decrease_use; + this.health = ASSAULT_VALUE_INACTIVE; + this.max_health = ASSAULT_VALUE_INACTIVE; + this.enemy = world; - InitializeEntity(self, target_objective_decrease_findtarget, INITPRIO_FINDTARGET); + InitializeEntity(this, target_objective_decrease_findtarget, INITPRIO_FINDTARGET); } // destructible walls that can be used to trigger target_objective_decrease spawnfunc(func_breakable); spawnfunc(func_assault_destructible) { - if (!g_assault) { remove(self); return; } + if (!g_assault) { remove(this); return; } - self.spawnflags = 3; - self.classname = "func_assault_destructible"; + this.spawnflags = 3; + this.classname = "func_assault_destructible"; if(assault_attacker_team == NUM_TEAM_1) - self.team = NUM_TEAM_2; + this.team = NUM_TEAM_2; else - self.team = NUM_TEAM_1; + this.team = NUM_TEAM_1; spawnfunc_func_breakable(this); } spawnfunc(func_assault_wall) { - if (!g_assault) { remove(self); return; } + if (!g_assault) { remove(this); return; } - self.classname = "func_assault_wall"; - self.mdl = self.model; - _setmodel(self, self.mdl); - self.solid = SOLID_BSP; - self.think = assault_wall_think; - self.nextthink = time; - InitializeEntity(self, assault_setenemytoobjective, INITPRIO_FINDTARGET); + this.classname = "func_assault_wall"; + this.mdl = this.model; + _setmodel(this, this.mdl); + this.solid = SOLID_BSP; + this.think = assault_wall_think; + this.nextthink = time; + InitializeEntity(this, assault_setenemytoobjective, INITPRIO_FINDTARGET); } spawnfunc(target_assault_roundend) { - if (!g_assault) { remove(self); return; } + if (!g_assault) { remove(this); return; } - self.winning = 0; // round not yet won by attackers - self.classname = "target_assault_roundend"; - self.use = target_assault_roundend_use; - self.cnt = 0; // first round - self.reset = target_assault_roundend_reset; + this.winning = 0; // round not yet won by attackers + this.classname = "target_assault_roundend"; + this.use = target_assault_roundend_use; + this.cnt = 0; // first round + this.reset = target_assault_roundend_reset; } spawnfunc(target_assault_roundstart) { - if (!g_assault) { remove(self); return; } + if (!g_assault) { remove(this); return; } assault_attacker_team = NUM_TEAM_1; - self.classname = "target_assault_roundstart"; - self.use = assault_roundstart_use_self; - self.reset2 = assault_roundstart_use_self; - InitializeEntity(self, assault_roundstart_use, INITPRIO_FINDTARGET); + this.classname = "target_assault_roundstart"; + this.use = assault_roundstart_use; + this.reset2 = assault_roundstart_use_self; + InitializeEntity(this, assault_roundstart_use_this, INITPRIO_FINDTARGET); } // legacy bot code diff --git a/qcsrc/server/mutators/mutator/gamemode_ca.qc b/qcsrc/server/mutators/mutator/gamemode_ca.qc index 9a9d228809..072fe90dde 100644 --- a/qcsrc/server/mutators/mutator/gamemode_ca.qc +++ b/qcsrc/server/mutators/mutator/gamemode_ca.qc @@ -47,7 +47,7 @@ REGISTER_MUTATOR(ca, false) EliminatedPlayers_Init(ca_isEliminated); ActivateTeamplay(); - SetLimits(autocvar_g_ca_point_limit, autocvar_g_ca_point_leadlimit, -1, -1); + SetLimits(autocvar_g_ca_point_limit, autocvar_g_ca_point_leadlimit, autocvar_timelimit_override, -1); if (autocvar_g_ca_team_spawns) have_team_spawns = -1; // request team spawns diff --git a/qcsrc/server/mutators/mutator/gamemode_ctf.qc b/qcsrc/server/mutators/mutator/gamemode_ctf.qc index a7d6fb2a1b..702ff45743 100644 --- a/qcsrc/server/mutators/mutator/gamemode_ctf.qc +++ b/qcsrc/server/mutators/mutator/gamemode_ctf.qc @@ -13,7 +13,7 @@ REGISTER_MUTATOR(ctf, false) ctf_Initialize(); ActivateTeamplay(); - SetLimits(autocvar_capturelimit_override, autocvar_captureleadlimit_override, -1, -1); + SetLimits(autocvar_capturelimit_override, autocvar_captureleadlimit_override, autocvar_timelimit_override, -1); have_team_spawns = -1; // request team spawns } @@ -1231,16 +1231,18 @@ void ctf_FlagSetup(int teamnumber, entity flag) // called when spawning a flag e if (flag.capeffect == "") { flag.capeffect = EFFECT_CAP(teamnumber).eent_eff_name; } // sounds - flag.snd_flag_taken = strzone(SND(CTF_TAKEN(teamnumber))); - flag.snd_flag_returned = strzone(SND(CTF_RETURNED(teamnumber))); - flag.snd_flag_capture = strzone(SND(CTF_CAPTURE(teamnumber))); - flag.snd_flag_dropped = strzone(SND(CTF_DROPPED(teamnumber))); - if (flag.snd_flag_respawn == "") flag.snd_flag_respawn = strzone(SND(CTF_RESPAWN)); // if there is ever a team-based sound for this, update the code to match. - precache_sound(flag.snd_flag_respawn); - if (flag.snd_flag_touch == "") flag.snd_flag_touch = strzone(SND(CTF_TOUCH)); // again has no team-based sound - precache_sound(flag.snd_flag_touch); - if (flag.snd_flag_pass == "") flag.snd_flag_pass = strzone(SND(CTF_PASS)); // same story here - precache_sound(flag.snd_flag_pass); +#define X(s,b) \ + if(flag.s == "") flag.s = b; \ + precache_sound(flag.s); + + X(snd_flag_taken, strzone(SND(CTF_TAKEN(teamnumber)))) + X(snd_flag_returned, strzone(SND(CTF_RETURNED(teamnumber)))) + X(snd_flag_capture, strzone(SND(CTF_CAPTURE(teamnumber)))) + X(snd_flag_dropped, strzone(SND(CTF_DROPPED(teamnumber)))) + X(snd_flag_respawn, strzone(SND(CTF_RESPAWN))) + X(snd_flag_touch, strzone(SND(CTF_TOUCH))) + X(snd_flag_pass, strzone(SND(CTF_PASS))) +#undef X // precache precache_model(flag.model); diff --git a/qcsrc/server/mutators/mutator/gamemode_cts.qc b/qcsrc/server/mutators/mutator/gamemode_cts.qc index 1f99c938de..f05b53ce8c 100644 --- a/qcsrc/server/mutators/mutator/gamemode_cts.qc +++ b/qcsrc/server/mutators/mutator/gamemode_cts.qc @@ -15,7 +15,7 @@ REGISTER_MUTATOR(cts, false) g_race_qualifying = true; independent_players = 1; - SetLimits(0, 0, -1, -1); + SetLimits(0, 0, autocvar_timelimit_override, -1); cts_Initialize(); } diff --git a/qcsrc/server/mutators/mutator/gamemode_domination.qc b/qcsrc/server/mutators/mutator/gamemode_domination.qc index 01f17ec9fe..141837c260 100644 --- a/qcsrc/server/mutators/mutator/gamemode_domination.qc +++ b/qcsrc/server/mutators/mutator/gamemode_domination.qc @@ -22,7 +22,7 @@ REGISTER_MUTATOR(dom, false) fraglimit_override = autocvar_g_domination_roundbased_point_limit; ActivateTeamplay(); - SetLimits(fraglimit_override, autocvar_g_domination_point_leadlimit, -1, -1); + SetLimits(fraglimit_override, autocvar_g_domination_point_leadlimit, autocvar_timelimit_override, -1); have_team_spawns = -1; // request team spawns } @@ -150,8 +150,7 @@ void dompoint_captured () old_team = self.team; self.team = real_team; self.delay = 0; - activator = self; - SUB_UseTargets (); + SUB_UseTargets (self, self, NULL); self.delay = old_delay; self.team = old_team; diff --git a/qcsrc/server/mutators/mutator/gamemode_freezetag.qc b/qcsrc/server/mutators/mutator/gamemode_freezetag.qc index 8482e258e9..f57661fba9 100644 --- a/qcsrc/server/mutators/mutator/gamemode_freezetag.qc +++ b/qcsrc/server/mutators/mutator/gamemode_freezetag.qc @@ -16,7 +16,7 @@ REGISTER_MUTATOR(ft, false) freezetag_Initialize(); ActivateTeamplay(); - SetLimits(autocvar_g_freezetag_point_limit, autocvar_g_freezetag_point_leadlimit, -1, -1); + SetLimits(autocvar_g_freezetag_point_limit, autocvar_g_freezetag_point_leadlimit, autocvar_timelimit_override, -1); if (autocvar_g_freezetag_team_spawns) have_team_spawns = -1; // request team spawns diff --git a/qcsrc/server/mutators/mutator/gamemode_invasion.qc b/qcsrc/server/mutators/mutator/gamemode_invasion.qc index efb6842e5d..e49bf3d546 100644 --- a/qcsrc/server/mutators/mutator/gamemode_invasion.qc +++ b/qcsrc/server/mutators/mutator/gamemode_invasion.qc @@ -19,7 +19,7 @@ REGISTER_MUTATOR(inv, false) cvar_settemp("g_monsters", "1"); - SetLimits(autocvar_g_invasion_point_limit, -1, -1, -1); + SetLimits(autocvar_g_invasion_point_limit, autocvar_leadlimit_override, autocvar_timelimit_override, -1); if (autocvar_g_invasion_teams >= 2) { ActivateTeamplay(); diff --git a/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc b/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc index dbcaa5f898..e311f72c13 100644 --- a/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc +++ b/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc @@ -16,7 +16,7 @@ REGISTER_MUTATOR(kh, false) kh_Initialize(); ActivateTeamplay(); - SetLimits(autocvar_g_keyhunt_point_limit, autocvar_g_keyhunt_point_leadlimit, -1, -1); + SetLimits(autocvar_g_keyhunt_point_limit, autocvar_g_keyhunt_point_leadlimit, autocvar_timelimit_override, -1); if (autocvar_g_keyhunt_team_spawns) have_team_spawns = -1; // request team spawns } diff --git a/qcsrc/server/mutators/mutator/gamemode_lms.qc b/qcsrc/server/mutators/mutator/gamemode_lms.qc index a2f1f2507e..22850d8b8b 100644 --- a/qcsrc/server/mutators/mutator/gamemode_lms.qc +++ b/qcsrc/server/mutators/mutator/gamemode_lms.qc @@ -13,7 +13,7 @@ REGISTER_MUTATOR(lms, false) error("This is a game type and it cannot be added at runtime."); lms_Initialize(); - SetLimits(((!autocvar_g_lms_lives_override) ? -1 : autocvar_g_lms_lives_override), 0, -1, -1); + SetLimits(((!autocvar_g_lms_lives_override) ? -1 : autocvar_g_lms_lives_override), 0, autocvar_timelimit_override, -1); } MUTATOR_ONROLLBACK_OR_REMOVE diff --git a/qcsrc/server/mutators/mutator/gamemode_tdm.qc b/qcsrc/server/mutators/mutator/gamemode_tdm.qc index 078e3517d0..6c22a8e198 100644 --- a/qcsrc/server/mutators/mutator/gamemode_tdm.qc +++ b/qcsrc/server/mutators/mutator/gamemode_tdm.qc @@ -16,7 +16,7 @@ REGISTER_MUTATOR(tdm, false) InitializeEntity(world, tdm_DelayedInit, INITPRIO_GAMETYPE); ActivateTeamplay(); - SetLimits(autocvar_g_tdm_point_limit, autocvar_g_tdm_point_leadlimit, -1, -1); + SetLimits(autocvar_g_tdm_point_limit, autocvar_g_tdm_point_leadlimit, autocvar_timelimit_override, -1); if (autocvar_g_tdm_team_spawns) have_team_spawns = -1; // request team spawns } diff --git a/qcsrc/server/pathlib/_mod.inc b/qcsrc/server/pathlib/_mod.inc index c737f2440e..88ce7fc19b 100644 --- a/qcsrc/server/pathlib/_mod.inc +++ b/qcsrc/server/pathlib/_mod.inc @@ -1,8 +1,8 @@ // generated file; do not modify -#include "costs.qc" -#include "debug.qc" -#include "expandnode.qc" -#include "main.qc" -#include "movenode.qc" -#include "path_waypoint.qc" -#include "utility.qc" +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/pathlib/_mod.qh b/qcsrc/server/pathlib/_mod.qh new file mode 100644 index 0000000000..6fe0472e25 --- /dev/null +++ b/qcsrc/server/pathlib/_mod.qh @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/progs.inc b/qcsrc/server/progs.inc index 2c7eb92536..0396dee6cd 100644 --- a/qcsrc/server/progs.inc +++ b/qcsrc/server/progs.inc @@ -5,7 +5,7 @@ #include #include "_all.qh" -#include "_mod.inc" +#include "../server/_mod.inc" #include "bot/_mod.inc" #include "bot/havocbot/_mod.inc" #include "command/_mod.inc" diff --git a/qcsrc/server/race.qc b/qcsrc/server/race.qc index 9fd6ca7b3f..d24a0769b5 100644 --- a/qcsrc/server/race.qc +++ b/qcsrc/server/race.qc @@ -580,10 +580,9 @@ void checkpoint_passed() */ if (!((self.spawnflags & 2) && (IS_PLAYER(other)))) { - activator = other; oldmsg = self.message; self.message = ""; - SUB_UseTargets(); + SUB_UseTargets(self, other, other); // TODO: should we be using other for the trigger here? self.message = oldmsg; } @@ -652,10 +651,9 @@ void checkpoint_passed() */ if(self.spawnflags & 2) { - activator = other; oldmsg = self.message; self.message = ""; - SUB_UseTargets(); + SUB_UseTargets(self, other, other); // TODO: should we be using other for the trigger here? self.message = oldmsg; } @@ -707,12 +705,12 @@ void checkpoint_touch() checkpoint_passed(); } -void checkpoint_use() +void checkpoint_use(entity this, entity actor, entity trigger) { - if(other.classname == "info_player_deathmatch") // a spawn, a spawn + if(trigger.classname == "info_player_deathmatch") // a spawn, a spawn return; - other = activator; + other = actor; checkpoint_passed(); } @@ -1107,9 +1105,9 @@ void penalty_touch() } } -void penalty_use() -{SELFPARAM(); - race_ImposePenaltyTime(activator, self.race_penalty, self.race_penalty_reason); +void penalty_use(entity this, entity actor, entity trigger) +{ + race_ImposePenaltyTime(actor, this.race_penalty, this.race_penalty_reason); } spawnfunc(trigger_race_penalty) diff --git a/qcsrc/server/spawnpoints.qc b/qcsrc/server/spawnpoints.qc index 51af4d16e3..711b15df56 100644 --- a/qcsrc/server/spawnpoints.qc +++ b/qcsrc/server/spawnpoints.qc @@ -58,12 +58,12 @@ void spawnpoint_think() } } -void spawnpoint_use() -{SELFPARAM(); +void spawnpoint_use(entity this, entity actor, entity trigger) +{ if(teamplay) if(have_team_spawns > 0) { - self.team = activator.team; + this.team = actor.team; some_spawn_has_been_used = 1; } //LOG_INFO("spawnpoint was used!\n"); diff --git a/qcsrc/server/spawnpoints.qh b/qcsrc/server/spawnpoints.qh index b010350908..a22ebb60c8 100644 --- a/qcsrc/server/spawnpoints.qh +++ b/qcsrc/server/spawnpoints.qh @@ -6,4 +6,4 @@ bool SpawnEvent_Send(entity this, entity to, int sf); entity Spawn_FilterOutBadSpots(entity firstspot, float mindist, float teamcheck); entity SelectSpawnPoint (float anypoint); spawnfunc(info_player_deathmatch); -void spawnpoint_use(); +void spawnpoint_use(entity this, entity actor, entity trigger); diff --git a/qcsrc/server/weapons/_mod.inc b/qcsrc/server/weapons/_mod.inc index cb24b279d1..b8954f293a 100644 --- a/qcsrc/server/weapons/_mod.inc +++ b/qcsrc/server/weapons/_mod.inc @@ -1,11 +1,11 @@ // generated file; do not modify -#include "accuracy.qc" -#include "common.qc" -#include "csqcprojectile.qc" -#include "hitplot.qc" -#include "selection.qc" -#include "spawning.qc" -#include "throwing.qc" -#include "tracing.qc" -#include "weaponstats.qc" -#include "weaponsystem.qc" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/weapons/_mod.qh b/qcsrc/server/weapons/_mod.qh new file mode 100644 index 0000000000..dfa2cbf581 --- /dev/null +++ b/qcsrc/server/weapons/_mod.qh @@ -0,0 +1,11 @@ +// generated file; do not modify +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/qcsrc/server/weapons/common.qc b/qcsrc/server/weapons/common.qc index 2a439f3d9e..4a06e16661 100644 --- a/qcsrc/server/weapons/common.qc +++ b/qcsrc/server/weapons/common.qc @@ -73,21 +73,21 @@ float W_CheckProjectileDamage(entity inflictor, entity projowner, int deathtype, return true; // if none of these return, then allow damage anyway. } -void W_PrepareExplosionByDamage(entity attacker, void() explode) -{SELFPARAM(); - self.takedamage = DAMAGE_NO; - self.event_damage = func_null; +void W_PrepareExplosionByDamage(entity this, entity attacker, void() explode) +{ + this.takedamage = DAMAGE_NO; + this.event_damage = func_null; if(IS_CLIENT(attacker) && !autocvar_g_projectiles_keep_owner) { - self.owner = attacker; - self.realowner = attacker; + this.owner = attacker; + this.realowner = attacker; } - MUTATOR_CALLHOOK(PrepareExplosionByDamage, self, attacker); + MUTATOR_CALLHOOK(PrepareExplosionByDamage, this, attacker); // do not explode NOW but in the NEXT FRAME! // because recursive calls to RadiusDamage are not allowed - self.nextthink = time; - self.think = explode; + this.nextthink = time; + this.think = explode; } diff --git a/qcsrc/server/weapons/common.qh b/qcsrc/server/weapons/common.qh index 7633c386e7..2ab8ea5acc 100644 --- a/qcsrc/server/weapons/common.qh +++ b/qcsrc/server/weapons/common.qh @@ -5,4 +5,4 @@ void W_GiveWeapon (entity e, float wep); .float prevstrengthsoundattempt; void W_PlayStrengthSound(entity player); float W_CheckProjectileDamage(entity inflictor, entity projowner, int deathtype, float exception); -void W_PrepareExplosionByDamage(entity attacker, void() explode); +void W_PrepareExplosionByDamage(entity this, entity attacker, void() explode); diff --git a/qcsrc/tools/genmod.sh b/qcsrc/tools/genmod.sh index 269c631f78..b4c4fc3048 100755 --- a/qcsrc/tools/genmod.sh +++ b/qcsrc/tools/genmod.sh @@ -2,13 +2,26 @@ set -eu cd "$(dirname "$0")" cd .. +ROOT=$PWD/ -MOD=_mod.inc +MOD=_mod function genmod() { - echo '// generated file; do not modify' > ${MOD} + # use context to work around cmake issue #12619 + CTX="${PWD#$ROOT}/" + echo '// generated file; do not modify' > ${MOD}.inc + echo '// generated file; do not modify' > ${MOD}.qh for f in $(ls | sort -k 1,1 -t .); do - if [[ "$f" == *.qc ]]; then echo "#include \"$f\"" >> ${MOD}; fi + if [[ "$f" == cl_* ]]; then if [[ -f "${f#cl_}" ]]; then continue; fi; fi + if [[ "$f" == sv_* ]]; then if [[ -f "${f#sv_}" ]]; then continue; fi; fi + if [[ "$f" == ui_* ]]; then if [[ -f "${f#ui_}" ]]; then continue; fi; fi + if [[ "$f" == *.qc ]]; then + echo "#include <${CTX}$f>" >> ${MOD}.inc + echo "#include <${CTX}${f%.qc}.qh>" >> ${MOD}.qh + if [[ -f "cl_$f" ]]; then echo -e "#ifdef CSQC\n #include <${CTX}cl_$f>\n#endif" >> ${MOD}.inc; fi + if [[ -f "sv_$f" ]]; then echo -e "#ifdef SVQC\n #include <${CTX}sv_$f>\n#endif" >> ${MOD}.inc; fi + if [[ -f "ui_$f" ]]; then echo -e "#ifdef MENUQC\n #include <${CTX}ui_$f>\n#endif" >> ${MOD}.inc; fi + fi done # echo >> ${MOD} for f in *; do if [ -d "$f" ]; then diff --git a/serverbench.cfg b/serverbench.cfg index 39ada82f78..0dfad90ec9 100644 --- a/serverbench.cfg +++ b/serverbench.cfg @@ -18,6 +18,7 @@ sv_eventlog 1 sv_logscores_bots 1 g_weaponarena all g_weaponarena_random 2 +g_playerstats_gamereport_uri "" // Start!