From aa0ccf44139e64b6d9e381e7f93d7614a44ca6f7 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Wed, 3 Nov 2021 21:54:43 +0100 Subject: [PATCH] Add test_grenadeclip. Add helper functions to convert RGB255 to ^x color codes. Small fixes for fonts in vguilib. --- .../scripts/custinfoparms.txt | 2 +- .../maps/test_grenadeclip.bsp | Bin 0 -> 1597184 bytes .../maps/test_grenadeclip.map | 139 ++++++++++++++++++ .../models/logos/visions_eye.mat | 10 +- src/client/entry.qc | 4 +- src/gs-entbase/client/env_glow.qc | 18 ++- src/gs-entbase/client/prop_rope.qc | 2 +- src/gs-entbase/decals.h | 14 +- src/gs-entbase/server/func_tankcontrols.qc | 2 + src/gs-entbase/shared/NSEntity.qc | 1 + src/menu-fn/colors.qc | 44 +----- src/shared/colors.h | 57 +++++++ src/shared/defs.h | 1 + src/vgui/font.qc | 29 ++-- src/vgui/ui_button.qc | 4 +- src/vgui/ui_label.qc | 2 +- src/vgui/ui_tabview.qc | 2 +- 17 files changed, 250 insertions(+), 81 deletions(-) create mode 100644 platform/test_maps.pk3dir/maps/test_grenadeclip.bsp create mode 100644 platform/test_maps.pk3dir/maps/test_grenadeclip.map create mode 100644 src/shared/colors.h diff --git a/platform/base_scripts.pk3dir/scripts/custinfoparms.txt b/platform/base_scripts.pk3dir/scripts/custinfoparms.txt index 69f517b8..f133ca03 100644 --- a/platform/base_scripts.pk3dir/scripts/custinfoparms.txt +++ b/platform/base_scripts.pk3dir/scripts/custinfoparms.txt @@ -1,7 +1,7 @@ { climb 0x00004000 vehicleclip 0x00008000 - grenadeclip 0x00010000 + grenadeclip 0x00000080 } { leakssteam 0x00080000 diff --git a/platform/test_maps.pk3dir/maps/test_grenadeclip.bsp b/platform/test_maps.pk3dir/maps/test_grenadeclip.bsp new file mode 100644 index 0000000000000000000000000000000000000000..7e0a1bd4efdca3a8aca1eed9a4a01c4e25fae3c4 GIT binary patch literal 1597184 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 z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#~EKke2_j}%oH2H=m8 zi;SY62&i1f0WZji+!Qb1D2jr#qN9k2+O~j70)qh(V+?`c;MQnjVoY4<7K4ci(Zm?H zxNu`)bge&OtZHVuPSqimn6NTWce?w0=dDxc)YDy6O@IIa0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkL{ zDhfhU6m1w7cZ{LGF?}d5lfdYt;!SuAgX4Z%Whc+qYL`G4EZqH6J{9u$Hc>&6|zw&Ye4Vu>I=Qs|W2U z_FNyEt@&8B@f9@EFtSzE((~ufS9LLORg|r4?AhVr;lU;&BO`-$x#mc|?khO|U2PnZ zY5b9<*}NCiG#mSQt7L6#^Gw-Tn>Ta5l+K&|>Mpka>T2_5d;TWfb9Q$BmZr@$Z}~M% zv$Ok`G|kTLA6wJ!({$dvc~x0_zgs`4%7|>uU!`gD+}}N#rp+VT(|Wz?v|g_|wd+;$ zcso1Nd7D<9-D#Sw>ZLTzj_CC?UAAmlRTfsAh#>-YOj>u=*?>)1=J^M2R5=FieJJKm4eG&_&}O4Dp??Y_`-p7=Rkb93y( z_pR5Bi>+gSNLQ83`)!&w=iOVoFJ#C2X*xE$#{QnB+4Z^gKGE7is$cYtM?IxF%*7&p9zS<`u896Y)~K-0$5Nuf+a%H4emUaWGzw zH~PJAMmOGyUh#Z84#nX(((k>}+tj{~hDQ$_>zz6^**kt@bY%2{6DN-yKJ|X@gUQk1 zGs8uA;^fhHk4_fJeH%ADw0=YXF|wiA7_IN+=;S*my6+$BeR$+#_tfd$$PHPf%MtE^|TneEEFY?rUHJ@c5UXYz8~zb*4& A*Z=?k literal 0 HcmV?d00001 diff --git a/platform/test_maps.pk3dir/maps/test_grenadeclip.map b/platform/test_maps.pk3dir/maps/test_grenadeclip.map new file mode 100644 index 00000000..07d56152 --- /dev/null +++ b/platform/test_maps.pk3dir/maps/test_grenadeclip.map @@ -0,0 +1,139 @@ + +// entity 0 +{ +"classname" "worldspawn" +// brush 0 +{ +( 248 192 -64 ) ( 248 -192 -64 ) ( -264 192 -64 ) next/cracked1 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( 256 192 8 ) ( -256 192 8 ) ( 256 192 0 ) next/cracked1 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( 256 192 8 ) ( 256 192 0 ) ( 256 -192 8 ) next/cracked1 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -256 -192 -128 ) ( 256 -192 -128 ) ( -256 192 -128 ) next/cracked1 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( -256 -192 0 ) ( -256 -192 8 ) ( 256 -192 0 ) next/cracked1 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -256 -192 0 ) ( -256 192 0 ) ( -256 -192 8 ) next/cracked1 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +} +// brush 1 +{ +( 248 192 192 ) ( 248 -192 192 ) ( -264 192 192 ) skies/yukongold [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 256 192 264 ) ( -256 192 264 ) ( 256 192 256 ) skies/yukongold [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 256 192 264 ) ( 256 192 256 ) ( 256 -192 264 ) skies/yukongold [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 128 ) ( 256 -192 128 ) ( -256 192 128 ) skies/yukongold [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 256 ) ( -256 -192 264 ) ( 256 -192 256 ) skies/yukongold [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 256 ) ( -256 192 256 ) ( -256 -192 264 ) skies/yukongold [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 2 +{ +( 184 192 192 ) ( 184 -192 192 ) ( -328 192 192 ) next/bunker2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( 192 192 264 ) ( -320 192 264 ) ( 192 192 256 ) next/bunker2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -256 192 8 ) ( -256 192 0 ) ( -256 -192 8 ) next/bunker2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -768 -192 -128 ) ( -256 -192 -128 ) ( -768 192 -128 ) next/bunker2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( -320 -192 256 ) ( -320 -192 264 ) ( 192 -192 256 ) next/bunker2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -320 -192 256 ) ( -320 192 256 ) ( -320 -192 264 ) next/bunker2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +} +// brush 3 +{ +( 760 192 192 ) ( 760 -192 192 ) ( 248 192 192 ) next/bunker2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( 768 192 264 ) ( 256 192 264 ) ( 768 192 256 ) next/bunker2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( 320 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) next/bunker2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) next/bunker2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) next/bunker2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( 256 -192 256 ) ( 256 192 256 ) ( 256 -192 264 ) next/bunker2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +} +// brush 4 +{ +( 184 -192 192 ) ( 184 -576 192 ) ( -328 -192 192 ) next/bunker2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) next/bunker2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) next/bunker2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -768 -576 -128 ) ( -256 -576 -128 ) ( -768 -192 -128 ) next/bunker2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( 272 -256 256 ) ( 272 -256 264 ) ( 784 -256 256 ) next/bunker2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) next/bunker2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +} +// brush 5 +{ +( 184 256 192 ) ( 184 -128 192 ) ( -328 256 192 ) next/bunker2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( 192 256 264 ) ( -320 256 264 ) ( 192 256 256 ) next/bunker2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( 320 544 8 ) ( 320 544 0 ) ( 320 160 8 ) next/bunker2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -768 -128 -128 ) ( -256 -128 -128 ) ( -768 256 -128 ) next/bunker2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.25 0.25 0 0 0 +( 272 192 256 ) ( 272 192 264 ) ( 784 192 256 ) next/bunker2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +( -320 -128 256 ) ( -320 256 256 ) ( -320 -128 264 ) next/bunker2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.25 0.25 0 0 0 +} +// brush 6 +{ +( 224 192 64 ) ( 224 92 64 ) ( 128 192 64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 224 192 64 ) ( 128 192 64 ) ( 224 192 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 192 228 64 ) ( 192 228 -64 ) ( 192 128 64 ) next/plywood2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 128 92 -64 ) ( 224 92 -64 ) ( 128 192 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 96 128 -64 ) ( 96 128 64 ) ( 192 128 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 128 92 -64 ) ( 128 192 -64 ) ( 128 92 64 ) next/plywood2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 7 +{ +( 288 64 64 ) ( 288 -36 64 ) ( 192 64 64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 288 64 64 ) ( 192 64 64 ) ( 288 64 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 256 100 64 ) ( 256 100 -64 ) ( 256 0 64 ) next/plywood2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 192 -36 -64 ) ( 288 -36 -64 ) ( 192 64 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 160 0 -64 ) ( 160 0 64 ) ( 256 0 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 192 -36 -64 ) ( 192 64 -64 ) ( 192 -36 64 ) next/plywood2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 8 +{ +( 288 -64 64 ) ( 288 -164 64 ) ( 192 -64 64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 288 -64 64 ) ( 192 -64 64 ) ( 288 -64 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 256 -28 64 ) ( 256 -28 -64 ) ( 256 -128 64 ) next/plywood2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 192 -164 -64 ) ( 288 -164 -64 ) ( 192 -64 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 160 -128 -64 ) ( 160 -128 64 ) ( 256 -128 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 192 -164 -64 ) ( 192 -64 -64 ) ( 192 -164 64 ) next/plywood2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 9 +{ +( 160 -128 64 ) ( 160 -228 64 ) ( 64 -128 64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 160 -128 64 ) ( 64 -128 64 ) ( 160 -128 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 128 -92 64 ) ( 128 -92 -64 ) ( 128 -192 64 ) next/plywood2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 64 -228 -64 ) ( 160 -228 -64 ) ( 64 -128 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 32 -192 -64 ) ( 32 -192 64 ) ( 128 -192 -64 ) next/plywood2 [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 64 -228 -64 ) ( 64 -128 -64 ) ( 64 -228 64 ) next/plywood2 [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 10 +{ +( 16 64 64 ) ( 16 -64 64 ) ( 0 64 64 ) common/clipgrenade [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 16 64 64 ) ( 0 64 64 ) ( 16 64 -64 ) common/clipgrenade [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 16 64 64 ) ( 16 64 -64 ) ( 16 -64 64 ) common/clipgrenade [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 0 -64 -64 ) ( 16 -64 -64 ) ( 0 64 -64 ) common/clipgrenade [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 0 -64 -64 ) ( 0 -64 64 ) ( 16 -64 -64 ) common/clipgrenade [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 0 -64 -64 ) ( 0 64 -64 ) ( 0 -64 64 ) common/clipgrenade [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "-128.000000 0.000000 0.000000" +} +// entity 2 +{ +"classname" "info_player_deathmatch" +"origin" "-128.000000 0.000000 0.000000" +} +// entity 3 +{ +"classname" "light" +"origin" "128.000000 0.000000 64.000000" +"light" "100" +} +// entity 4 +{ +"classname" "light" +"origin" "-128.000000 0.000000 64.000000" +"light" "100" +} +// entity 5 +{ +"classname" "func_detail_illusionary" +// brush 0 +{ +( 16 64 64 ) ( 16 -64 64 ) ( 0 64 64 ) measure/wall128g [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 16 64 64 ) ( 0 64 64 ) ( 16 64 -64 ) measure/wall128g [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 16 64 64 ) ( 16 64 -64 ) ( 16 -64 64 ) measure/wall128g [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 0 -64 -64 ) ( 16 -64 -64 ) ( 0 64 -64 ) measure/wall128g [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 0 -64 -64 ) ( 0 -64 64 ) ( 16 -64 -64 ) measure/wall128g [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 0 -64 -64 ) ( 0 64 -64 ) ( 0 -64 64 ) measure/wall128g [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +} diff --git a/platform/test_maps.pk3dir/models/logos/visions_eye.mat b/platform/test_maps.pk3dir/models/logos/visions_eye.mat index f8a254fe..f845e0dc 100644 --- a/platform/test_maps.pk3dir/models/logos/visions_eye.mat +++ b/platform/test_maps.pk3dir/models/logos/visions_eye.mat @@ -1,14 +1,6 @@ // Vera Visions Material { + program unlit diffusemap models/logos/visions_eye.ktx normalmap models/logos/visions_eye_n.tga - - { - program vertexlit_specular - } - { - clampmap models/logos/visions_eye.tga - blendFunc add - rgbGen wave sin 1 0.2 1 .8 - } } diff --git a/src/client/entry.qc b/src/client/entry.qc index da27e48f..7e1f8562 100644 --- a/src/client/entry.qc +++ b/src/client/entry.qc @@ -340,8 +340,8 @@ CSQC_UpdateView(float w, float h, float focus) player bp = (player)c; removeentity(c); setproperty(VF_ORIGIN, pSeat->m_vecPredictedOrigin + bp.view_ofs); - setproperty(VF_ANGLES, [bp.pitch, bp.angles[1], bp.angles[2]]); - setproperty(VF_CL_VIEWANGLES, [bp.pitch, bp.angles[1], bp.angles[2]]); + setproperty(VF_ANGLES, bp.v_angle); + setproperty(VF_CL_VIEWANGLES, bp.v_angle); } break; default: diff --git a/src/gs-entbase/client/env_glow.qc b/src/gs-entbase/client/env_glow.qc index 177f2491..1e12778e 100644 --- a/src/gs-entbase/client/env_glow.qc +++ b/src/gs-entbase/client/env_glow.qc @@ -14,7 +14,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/*QUAKED env_glow (0 0.5 1) (-8 -8 -8) (8 8 8) +/*QUAKED env_glow (0 0.5 1) (-8 -8 -8) (8 8 8) EVGLOW_ORIENT Client-side glare/glow orb effect like the flares in 1997's Unreal. -------- KEYS -------- @@ -37,6 +37,8 @@ class env_glow:NSEntity /* change to renderablentity? */ vector m_vecSize; float m_flScale; + vector m_vecOrientation; + void(void) env_glow; virtual float() predraw; @@ -55,6 +57,12 @@ env_glow::RendererRestarted(void) m_strSprite = spriteframe(model, 0, 0.0f); m_vecSize = drawgetimagesize(m_strSprite) / 2; } + + if (spawnflags & 1) { + hitcontentsmaski = CONTENTBIT_SOLID; + decal_pickwall(this, origin); + m_vecOrientation = vectoangles(g_tracedDecal.normal * -1); + } } float @@ -95,8 +103,11 @@ env_glow::predraw(void) makevectors(vectoangles(origin - vecPlayer)); forg = origin + (v_forward * -16); - /* Project it, always facing the player */ - makevectors(view_angles); + if (spawnflags & 1) + makevectors(m_vecOrientation); + else + makevectors(view_angles); + #ifndef FTE_QUADFIX R_BeginPolygon(m_strSprite, 1, 0); R_PolygonVertex(forg + v_right * fsize[0] - v_up * fsize[1], @@ -170,7 +181,6 @@ env_glow::env_glow(void) drawmask = MASK_ENGINE; setsize(this, [0,0,0], [0,0,0]); effects &= ~EF_NOSHADOW; - Init(); RendererRestarted(); diff --git a/src/gs-entbase/client/prop_rope.qc b/src/gs-entbase/client/prop_rope.qc index e3d8c8c2..229073ae 100644 --- a/src/gs-entbase/client/prop_rope.qc +++ b/src/gs-entbase/client/prop_rope.qc @@ -14,7 +14,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/*QUAKED prop_rope (1 1 0.5) (-8 -8 -8) (8 8 8) +/*QUAKED prop_rope (1 1 0.5) (-8 -8 -8) (8 8 8) ROPE_VERTICAL Client-side decorative rope entity. Connect the entity to a named info_notnull and watch it swing around. diff --git a/src/gs-entbase/decals.h b/src/gs-entbase/decals.h index 6c7dfd6c..b3938a54 100644 --- a/src/gs-entbase/decals.h +++ b/src/gs-entbase/decals.h @@ -45,34 +45,34 @@ decal_pickwall(entity dself, vector vpos) { traced_t tmp[6]; float frac = 1.0f; - + g_tracedDecal.fraction = 1.0f; g_tracedDecal.endpos = [0,0,0]; g_tracedDecal.normal = [0,0,0]; /* unrolled, trace against walls in all 6 directions */ makevectors([0, 0, 0]); - traceline(vpos + (v_forward * -1), vpos + (v_forward * 128), 1, dself); + traceline(vpos + (v_forward * -1), vpos + (v_forward * 128), 0, dself); tmp[0].fraction = trace_fraction; tmp[0].normal = trace_plane_normal; tmp[0].endpos = trace_endpos; - traceline(vpos + (v_forward * 1), vpos + (v_forward * -128), 1, dself); + traceline(vpos + (v_forward * 1), vpos + (v_forward * -128), 0, dself); tmp[1].fraction = trace_fraction; tmp[1].normal = trace_plane_normal; tmp[1].endpos = trace_endpos; - traceline(vpos + (v_right * -1), vpos + (v_right * 128), 1, dself); + traceline(vpos + (v_right * -1), vpos + (v_right * 128), 0, dself); tmp[2].fraction = trace_fraction; tmp[2].normal = trace_plane_normal; tmp[2].endpos = trace_endpos; - traceline(vpos + (v_right * 1), vpos + (v_right * -128), 1, dself); + traceline(vpos + (v_right * 1), vpos + (v_right * -128), 0, dself); tmp[3].fraction = trace_fraction; tmp[3].normal = trace_plane_normal; tmp[3].endpos = trace_endpos; - traceline(vpos + (v_up * -1), vpos + (v_up * 128), 1, dself); + traceline(vpos + (v_up * -1), vpos + (v_up * 128), 0, dself); tmp[4].fraction = trace_fraction; tmp[4].normal = trace_plane_normal; tmp[4].endpos = trace_endpos; - traceline(vpos + (v_up * 1), vpos + (v_up * -128), 1, dself); + traceline(vpos + (v_up * 1), vpos + (v_up * -128), 0, dself); tmp[5].fraction = trace_fraction; tmp[5].normal = trace_plane_normal; tmp[5].endpos = trace_endpos; diff --git a/src/gs-entbase/server/func_tankcontrols.qc b/src/gs-entbase/server/func_tankcontrols.qc index 0be17159..e76f5708 100644 --- a/src/gs-entbase/server/func_tankcontrols.qc +++ b/src/gs-entbase/server/func_tankcontrols.qc @@ -64,6 +64,8 @@ void func_tankcontrols::Respawn(void) { InitBrushTrigger(); + solid = SOLID_BBOX; + setorigin(this, origin); PlayerUse = OnPlayerUse; } diff --git a/src/gs-entbase/shared/NSEntity.qc b/src/gs-entbase/shared/NSEntity.qc index 99dba637..713ef01c 100644 --- a/src/gs-entbase/shared/NSEntity.qc +++ b/src/gs-entbase/shared/NSEntity.qc @@ -396,6 +396,7 @@ NSEntity::Restore(string strKey, string strValue) break; case "solid": solid = stof(strValue); + setorigin(this, origin); break; case "movetype": movetype = stof(strValue); diff --git a/src/menu-fn/colors.qc b/src/menu-fn/colors.qc index 3398a5f0..73f59e96 100644 --- a/src/menu-fn/colors.qc +++ b/src/menu-fn/colors.qc @@ -14,6 +14,8 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include "../shared/colors.h" + vector col_help; vector col_prompt_bg; vector col_prompt_text; @@ -29,48 +31,6 @@ vector col_button_select; /* 1,0,0 */ vector col_button_click; /* 1,1,0 */ vector col_button_disabled; /* 0.25, 0.25, 0.25 */ -string -Colors_RGB8_to_HEX(vector color) -{ - string out = "^x"; - - for (int i = 0; i < 3; i++) { - string a = ""; - float b = rint(color[i] * 15); - - switch (b) { - case 10: - a = "A"; - break; - case 11: - a = "B"; - break; - case 12: - a = "C"; - break; - case 13: - a = "D"; - break; - case 14: - a = "E"; - break; - case 15: - a = "F"; - break; - default: - a = ftos(b); - } - out = sprintf("%s%s", out, a); - } - return out; -} - -string -Colors_RGB255_to_HEX(vector color) -{ - return Colors_RGB8_to_HEX(color / 255); -} - void Colors_Init(void) { diff --git a/src/shared/colors.h b/src/shared/colors.h new file mode 100644 index 00000000..3163310f --- /dev/null +++ b/src/shared/colors.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +string +Colors_RGB8_to_HEX(vector color) +{ + string out = "^x"; + + for (int i = 0; i < 3; i++) { + string a = ""; + float b = rint(color[i] * 15); + + switch (b) { + case 10: + a = "A"; + break; + case 11: + a = "B"; + break; + case 12: + a = "C"; + break; + case 13: + a = "D"; + break; + case 14: + a = "E"; + break; + case 15: + a = "F"; + break; + default: + a = ftos(b); + } + out = sprintf("%s%s", out, a); + } + return out; +} + +string +Colors_RGB255_to_HEX(vector color) +{ + return Colors_RGB8_to_HEX(color / 255); +} \ No newline at end of file diff --git a/src/shared/defs.h b/src/shared/defs.h index b42cd7a5..dadad048 100644 --- a/src/shared/defs.h +++ b/src/shared/defs.h @@ -31,6 +31,7 @@ #include "propdata.h" #include "surfaceproperties.h" #include "vehicles.h" +#include "colors.h" #define BSPVER_PREREL 28 #define BSPVER_Q1 29 diff --git a/src/vgui/font.qc b/src/vgui/font.qc index e74b6d22..fc44786c 100644 --- a/src/vgui/font.qc +++ b/src/vgui/font.qc @@ -25,7 +25,8 @@ enumflags typedef struct { int iID; - int iScale; + int iScaleX; + int iScaleY; vector vecColor; float flAlpha; int iFlags; @@ -36,7 +37,7 @@ Font_Load(string strFile, font_s &fntNew) { #ifdef CLASSIC_VGUI fntNew.iID = (int)loadfont("", "gfx/conchars", "12", -1, 0, 0); - fntNew.iScale = 12; + fntNew.iScaleX = fntNew.iScaleY = 12; fntNew.vecColor = [255,200,0] / 255; fntNew.flAlpha = 1.0f; fntNew.iFlags = 0; @@ -45,14 +46,16 @@ Font_Load(string strFile, font_s &fntNew) string strFontPath = ""; filestream fileFont = fopen(strFile, FILE_READ); fntNew.iID = 0; - fntNew.iScale = 8; + fntNew.iScaleX = fntNew.iScaleY = 8; fntNew.vecColor = [1,1,1]; fntNew.flAlpha = 1.0f; fntNew.iFlags = 0; if (fileFont >= 0) { + int argc; while ((strTemp = fgets(fileFont))) { - if (tokenizebyseparator(strTemp, "=") == 2) { + argc = tokenizebyseparator(strTemp, "="); + if (argc == 2) { switch (argv(0)) { case "COLOR": fntNew.vecColor = stov(argv(1)) / 255; @@ -60,14 +63,20 @@ Font_Load(string strFile, font_s &fntNew) case "ALPHA": fntNew.flAlpha = stof(argv(1)) / 255; break; + case "SIZE_X": + fntNew.iScaleX = stoi(argv(1)); + break; + case "SIZE_Y": + fntNew.iScaleY = stoi(argv(1)); + break; case "SIZE": - fntNew.iScale = (int)stof(argv(1)); + fntNew.iScaleY = fntNew.iScaleX = stoi(argv(1)); break; case "PATH": strFontPath = argv(1); break; case "FLAGS": - fntNew.iFlags = (int)stof(argv(1)); + fntNew.iFlags = stoi(argv(1)); break; default: break; @@ -79,19 +88,19 @@ Font_Load(string strFile, font_s &fntNew) error(sprintf("[MENU] Cannot load font file %s!", strFile)); } - fntNew.iID = (int)loadfont("", strFontPath, ftos((float)fntNew.iScale), -1, 0, 0); + fntNew.iID = (int)loadfont("", strFontPath, ftos((float)fntNew.iScaleY), -1, 0, 0); #endif } void -Font_DrawText (vector vecOrigin, string strText, font_s fnt) +Font_DrawText(vector vecOrigin, string strText, font_s fnt) { drawfont = (float)fnt.iID; - drawstring(vecOrigin, strText, [fnt.iScale, fnt.iScale], fnt.vecColor, fnt.flAlpha, (float)fnt.iFlags); + drawstring(vecOrigin, strText, [fnt.iScaleX, fnt.iScaleY], fnt.vecColor, fnt.flAlpha, (float)fnt.iFlags); } void -Font_DrawField (vector vecOrigin, vector vecSize, string strText, font_s fnt, int iAlignFlags) +Font_DrawField(vector vecOrigin, vector vecSize, string strText, font_s fnt, int iAlignFlags) { drawfont = (float)fnt.iID; drawtextfield(vecOrigin, vecSize, (float)iAlignFlags, strText); diff --git a/src/vgui/ui_button.qc b/src/vgui/ui_button.qc index 0e8a744a..71d88534 100644 --- a/src/vgui/ui_button.qc +++ b/src/vgui/ui_button.qc @@ -85,14 +85,12 @@ void CUIButton::SetTitle(string strName) { vector newsize; - int scale; m_strTitle = strName; m_strTitleActive = sprintf("^3%s", m_strTitle); drawfont = g_fntDefault.iID; - scale = g_fntDefault.iScale; - newsize[0] = stringwidth(m_strTitle, TRUE, [scale, scale]) + 16; + newsize[0] = stringwidth(m_strTitle, TRUE, [g_fntDefault.iScaleX, g_fntDefault.iScaleY]) + 16; newsize[1] = 24; SetSize(newsize); } diff --git a/src/vgui/ui_label.qc b/src/vgui/ui_label.qc index 9a40f593..edefda04 100644 --- a/src/vgui/ui_label.qc +++ b/src/vgui/ui_label.qc @@ -47,7 +47,7 @@ void CUILabel::SetTitle (string strName) /* hack, add 2 just to make sure it doesn't immediately wrap. bug * in engines' textfield thing in combo with ttf. */ - SetSize([2 + stringwidth(m_strTitle, TRUE, [g_fntDefault.iScale, g_fntDefault.iScale]), 16]); + SetSize([2 + stringwidth(m_strTitle, TRUE, [g_fntDefault.iScaleX, g_fntDefault.iScaleY]), 16]); } void CUILabel::Draw(void) { diff --git a/src/vgui/ui_tabview.qc b/src/vgui/ui_tabview.qc index 14d0e305..07ccdb39 100644 --- a/src/vgui/ui_tabview.qc +++ b/src/vgui/ui_tabview.qc @@ -60,7 +60,7 @@ vector CUITabView::GetSize(void) void CUITabView::SetTitle (string strName) { m_strTitle = strName; - SetSize([stringwidth(m_strTitle, TRUE, [g_fntDefault.iScale, g_fntDefault.iScale]), 16]); + SetSize([stringwidth(m_strTitle, TRUE, [g_fntDefault.iScaleX, g_fntDefault.iScaleY]), 16]); } void CUITabView::Draw(void) {