BunnyCademy


Table Of Contents

Defrag Setup / Installation Guide

Snap-Hud and CGaz-Hud

Jel-Hud

https://github.com/Jelvan1/cgame_proxymod/blob/master/README.md


The proxymod that Jelvan1 made for defrag is commonly called "Jel-hud".
It adds many features to the standard df hud, e.g. better calculations for CGaz and snaphud, colours for all hud elements, a +moveup analyzer, independent FOV of the hud, new projection methods and many helpful tools for weapon jumps.

Bunny Hud Config

seta cg_crosshairColor "7"

seta cg_crosshairHealth "0"

seta cg_crosshairSize "20"

seta cg_crosshairX "0"

seta cg_crosshairY "11"

seta df_accel_AdjustMaxSpeed "1"

seta df_accel_Draw "0"

seta df_accel_FontSize "7"

seta df_accel_HistoryResetSpeed "100"

seta df_accel_Mode "0"

seta df_accel_OffsetX "0"

seta df_accel_OffsetY "33"

seta df_accel_Output "0"

seta df_accel_Scale "-1.200"

seta df_ar_format "$map.$-route[$gt.$phys.$-mode]$m.$-s.$-ms($pl.$plc)"

seta df_ar_speedcapture_format "0"

seta df_ar_stopdelay "2000"

seta df_autorecord "1"

seta df_checkpoints "2"

seta df_chs0_DisplayType "2"

seta df_chs0_Draw "1"

seta df_chs0_FontColor "7"

seta df_chs0_FontShadow "0"

seta df_chs0_FontSize "8"

seta df_chs0_FontTransparency "1.000"

seta df_chs0_LabelColor "7"

seta df_chs0_OffsetX "0"

seta df_chs0_OffsetY "2"

seta df_chs1_ComboSeparator "/"

seta df_chs1_DisplayType "0"

seta df_chs1_Draw "1"

seta df_chs1_EnableCombos "0"

seta df_chs1_FontColor "7"

seta df_chs1_FontShadow "1"

seta df_chs1_FontSize "13"

seta df_chs1_FontTransparency "1.000"

seta df_chs1_Info1 "23"

seta df_chs1_Info2 "0"

seta df_chs1_Info3 "0"

seta df_chs1_Info4 "0"

seta df_chs1_Info5 "0"

seta df_chs1_Info6 "0"

seta df_chs1_Info7 "0"

seta df_chs1_Info8 "0"

seta df_chs1_LabelColor "7"

seta df_chs1_LabelType "0"

seta df_chs1_OffsetX "0"

seta df_chs1_OffsetY "0"

seta df_chs2_ComboSeparator "/"

seta df_chs2_DisplayType "1"

seta df_chs2_Draw "1"

seta df_chs2_EnableCombos "0"

seta df_chs2_FontColor "7"

seta df_chs2_FontShadow "0"

seta df_chs2_FontSize "10"

seta df_chs2_FontTransparency "1.000"

seta df_chs2_Info1 "140"

seta df_chs2_Info2 "0"

seta df_chs2_Info3 "0"

seta df_chs2_Info4 "0"

seta df_chs2_Info5 "0"

seta df_chs2_Info6 "0"

seta df_chs2_Info7 "0"

seta df_chs2_Info8 "0"

seta df_chs2_LabelColor "7"

seta df_chs2_LabelType "0"

seta df_chs2_OffsetX "-320"

seta df_chs2_OffsetY "190"

seta df_chs_UsePredicted "1"

seta df_cl_alwaysDrawItems "1"

seta df_country "Germany"

seta df_demos_CameraMode "8"

seta df_demos_CameraTransitionSpeed "50"

seta df_demos_HideLocalEntities "0"

seta df_demos_HidePacketEntities "0"

seta df_demos_ReplayDrawMask "32767"

seta df_demos_ReplayFilename "$demoname"

seta df_demos_ReplayMode "1"

seta df_demos_UICompatibility "0"

seta df_demos_UnlockThirdPersonPitch "0"

seta df_demos_validation "1"

seta df_drawBesttime "0"

seta df_drawCheckpointEvents "1"

seta df_drawCheckpointStats "1"

seta df_drawJumpmeters "0"

seta df_drawSpeed "0"

seta df_ghost1_PlayCameraMode "0"

seta df_ghost1_PlayDrawMissiles "2"

seta df_ghost1_PlayDrawPlayer "3"

seta df_ghost1_PlayLoop "0"

seta df_ghost1_PlayTimescale "1.000"

seta df_ghost1_RecordFileFormat "2"

seta df_ghost1_RecordInterval "50"

seta df_ghost1_RecordView "0"

seta df_ghost2_PlayCameraMode "0"

seta df_ghost2_PlayDrawMissiles "2"

seta df_ghost2_PlayDrawPlayer "3"

seta df_ghost2_PlayLoop "0"

seta df_ghost2_PlayTimescale "1.000"

seta df_ghost2_RecordFileFormat "2"

seta df_ghost2_RecordInterval "50"

seta df_ghost2_RecordView "0"

seta df_ghosts_AutoMode "0"

seta df_ghosts_AutoModeMP "0"

seta df_ghosts_CheckPVS "1"

seta df_ghosts_DrawOutput "0"

seta df_ghosts_FileExtension ""

seta df_ghosts_LiveAmmo "0"

seta df_ghosts_MiniviewBorderSize "4"

seta df_ghosts_MiniviewCameraMode "1"

seta df_ghosts_MiniviewDraw "3"

seta df_ghosts_MiniviewDrawGun "1"

seta df_ghosts_MiniviewFOV "98"

seta df_ghosts_MiniviewOffsetX "500"

seta df_ghosts_MiniviewOffsetY "-155"

seta df_ghosts_MiniviewSize "25"

seta df_ghosts_NoDrawRadius "200"

seta df_ghosts_SelfMissilesOnly "1"

seta df_ghosts_SpriteInfo ""

seta df_ghosts_SpriteSize "8"

seta df_hud "1"

seta df_hud_3DIcons "1"

seta df_hud_cgaz "0"

seta df_hud_cgaz_opacity "0.45"

seta df_hud_cgaz_ypos "240"

seta df_hud_color "8"

seta df_hud_colorRGB ""

seta df_hud_colorwarning "1"

seta df_hud_fontcolor "7"

seta df_hud_fontcolorRGB ""

seta df_hud_fontshadow "1"

seta df_hud_forceteamcolors "1"

seta df_hud_frameTransparency "1.0"

seta df_hud_scoreboard_showSpectators "1"

seta df_hud_scoreboard_size "0"

seta df_hud_transparency "0.000"

seta df_hud_videocapture_fontcolor "7"

seta df_hud_videocapture_fontjustify "0"

seta df_hud_videocapture_fontshadow "1"

seta df_hud_videocapture_fontsize "16"

seta df_hud_videocapture_x "320"

seta df_hud_videocapture_y "240"

seta df_mp_NoDrawRadius "500"

seta df_name "bunnyboi"

seta df_noEndOfRunStats "0"

seta df_ob_AllSlopes "0"

seta df_ob_Fast "1"

seta df_player_SmokeTrails "0.000"

seta df_player_Sprites "1"

seta df_script_onJoinTeam "0"

seta df_script_onMapLoad "0"

seta df_script_onRespawn "0"

seta df_sound_flagGrabbing "0"

seta df_sound_leadChanges "1"

seta df_sv_script_idleCfg ""

seta df_sv_script_idleDelay "50"

seta df_tieOverwrites "1"

seta df_ui_CursorColor "0.50 0.80 1.00 1.00"

seta df_ui_CustomMenu "2"

seta df_ui_DisplayCVarName "1"

seta df_ui_ListbarColor "1.00 0.00 0.00 0.30"

seta df_ui_PulseColor "1.00 1.00 1.00 1.00"

seta df_ui_StatusColor "1.00 1.00 1.00 1.00"

seta df_ui_TextColorBig "1.00 0.00 0.00 1.00"

seta df_ui_TextColorDisabled "0.50 0.50 0.50 1.00"

seta df_ui_TextColorHighlight "1.00 1.00 0.00 1.00"

seta df_ui_TextColorLabel "1.00 1.00 0.00 1.00"

seta df_ui_TextColorMedium "0.00 0.00 1.00 1.00"

seta df_ui_TextColorValue "1.00 0.00 0.00 1.00"

seta df_unit "0"

seta df_varHelpers_DrawOutput "0"

seta df_vote_allowVotes "1"

seta df_vote_allow_clientkick "1"

seta df_vote_allow_devmap "1"

seta df_vote_allow_gametype "0"

seta df_vote_allow_interference "0"

seta df_vote_allow_kick "1"

seta df_vote_allow_killobs "1"

seta df_vote_allow_map "1"

seta df_vote_allow_map_restart "1"

seta df_vote_allow_mode "1"

seta df_vote_allow_nextmap "1"

seta df_vote_allow_promode "1"

seta df_vote_maxVotes "5"

seta df_vote_passVoteOnRatio ".6"

seta df_vote_voteDelay "30"

Snap-HUD and CGaz-HUD: (Works with Jelhud V1.3.0)

seta mdd_ammo "0b0000"

seta mdd_ammo_graph_xywh "610 100 24 24"

seta mdd_ammo_text_rgba "1 1 1 1"

seta mdd_ammo_text_xh "6 12"

seta mdd_compass "0"

seta mdd_cgaz "0b1"

seta mdd_cgaz_trueness "0b010"

seta mdd_cgaz_rgbaFullAccel "55 0.1 1 .2"

seta mdd_cgaz_rgbaNoAccel "0 1 0 .5"

seta mdd_cgaz_rgbaPartialAccel "0 1 0 .88"

seta mdd_cgaz_rgbaTurnZone "1 1 0 .5"

seta mdd_cgaz_speed "1"

seta mdd_cgaz_yh "186 7"

seta mdd_fov "110"

seta mdd_gl_path_draw "1"

seta mdd_gl_path_preview_draw "0"

seta mdd_gl_path_preview_rgba "0 0.5 0 1"

seta mdd_gl_path_rgba "0.25 0.25 0.25 1"

seta mdd_hud "1"

seta mdd_jump "3"

seta mdd_jump_graph_outline_rgba "1 1 1 .75"

seta mdd_jump_graph_outline_w "1"

seta mdd_jump_graph_rgba ".5 .5 .5 .5"

seta mdd_jump_graph_rgbaOnGround "0 1 0 .75"

seta mdd_jump_graph_rgbaPostJump "1 0 0 .75"

seta mdd_jump_graph_rgbaPreJump "0 0 1 .75"

seta mdd_jump_graph_xywh "8 8 8 104"

seta mdd_jump_maxDelay "360"

seta mdd_jump_text_rgba "1 1 1 1"

seta mdd_jump_text_xh "6 11"

seta mdd_local_sounds_only "0"

seta mdd_projection "1"

seta mdd_rl_path_draw "0"

seta mdd_rl_path_rgba "1 0 0 0"

seta mdd_rl_target_draw "0"

seta mdd_rl_target_shader "rlTraceMark"

seta mdd_rl_target_size "24"

seta mdd_rl_trace_line_draw "0"

seta mdd_rl_trace_line_rgba "1 0 0 0"

seta mdd_rl_trace_mark_draw "0"

seta mdd_rl_trace_mark_shader "rlTraceMark"

seta mdd_rl_trace_mark_size "24"

seta mdd_snap_trueness "0b000"

seta mdd_snap "0b00001"

seta mdd_snap_45_alt_rgba ".05 .05 .05 .15"

seta mdd_snap_45_def_rgba ".5 .7 .9 .7"

seta mdd_snap_alt_rgba "0 0 0 0"

seta mdd_snap_def_rgba ".1 0.9 1 .7"

seta mdd_snap_hl_alt_rgba ".5 .7 .9 .15"

seta mdd_snap_hl_def_rgba ".5 .7 .9 .7"

seta mdd_snap_yh "186 3"

seta mdd_snap_speed "320"

seta mdd_sound_local_only "0"

seta mdd_timer "0"

seta mdd_timer_gb_rgba "1 0 0 1"

seta mdd_timer_item_rgba "1 1 0 1"

seta mdd_timer_item_w "3"

seta mdd_timer_outline_rgba "1 1 1 1"

seta mdd_timer_outline_w "1"

seta mdd_timer_xywh "275 275 100 16"

Making use of snap-hud and CGaz-hud

Making use of Snap-HUD and CGaz-HUD by uglyBunny

----------------------------------------------------------------------------

####### KEY TAKEAWAY #######

Acceleration is maximized when the crosshair lies between the CGaz minimum line and the border to the next snapzone. As long as this condition is met, the exact position of the crosshair does not matter.

###########################


Looking on a map from above, a range of directions form the 24 "snapzones". They are coloured (e.g. cyan) and uncoloured in Snap-HUD and have a fixed "position", just like east or north. The transition between a coloured and an uncoloured snapzone is called "border" here. The Snap-HUD visualizes these zones from the perspective of a player.

The CGaz-HUD shows a range of angles from the perspective of the player in which the crosshair can lie that causes the model to accelerate. The green line shows the minimum angle to place the crosshair in while pressing the correct keyboard buttons. The yellow line is the maximum angle and the area in between the desired area.


Acceleration can only occur if this condition is met:

-crosshair lies in the desired area of CGaz (the area between green and yellow line)

This is not sufficient in most situations.

The more specific condition for maximizing forward acceleration, utilizing Snap-HUD is:

-crosshair lies between the green line of CGaz and the border to the next snapzone (doesn't matter if coloured or uncoloured) = "In-Between-Condition"

-it doesn’t matter where exactly the crosshair lies as long as this condition is met

The AMOUNT of acceleration is determined by the DISTANCE between the green line of CGaz and the border to the next snapzone (the one that is approached over time due to the current movement direction change).

The smaller the distance, the higher the acceleration. At medium and high speeds and big distances, the accel can even be negative (you slow down).


This leads to an optimization technique called "vsnap", "vsnapping" or "snapping" in CPM:

The vsnap-technique (doing a short aircontrol with the "W" key between strafes) changes the movement direction and thus the position of the green line of CGaz relative to the snapzones to put the player into advantageous movement directions, the "high accel zones" (when green CGaz line and the next snapzone border are quite close). This is especially important for high speeds (>2000 UPS).

Vsnapping is useful between 2 strafes in the same direction, right before a switch from one strafe direction to the other and even DURING a switch from one strafe direction to the other. Each situation requires different techniques. Carefully spectate advanced strafers and try to do what they are doing.


Dealing with the small/narrow snapzones:

When a small snapzone lies inside the CGaz-area and the crosshair points to it although an available big snapzone lies in front of it (minimum CGaz line lies in it), it will often yield a high accel when you are at low speeds, for example <800 ups. This accel has a high sideways component, though. It feels like the game pulls you to the sides. The small zones are especially important for circlejumps and <800 UPS but should be avoided to aim at if your minimum CGaz line is still in a big zone and your speeds are higher.

If your speed is high you should only put your crosshair into the small zone if your minimum CGaz line lies in it. This is hard to accurately do but the pros do it all the time.


Different accelerations of different types of snapzones:

Not every snapzone gives you the same accel. There are 4 types of snapzones: small coloured, big coloured, small uncoloured and big uncoloured (referring to the look of the snapzones when using the standard snaphud). The big uncoloured snapzones (those that are next to the big coloured snapzones) yield noticably less accel than the other snapzones. As an advanced jumper you should rather choose the snapzones that give more accel while manouvering through the map.


command list for a basic CGaz-HUD and Snap-HUD:

----------------------------------------------------------------------

seta df_hud_CGaz "9"

seta df_hud_CGaz_opacity "0.45"

seta df_hud_CGaz_ypos "240"


seta scr_hud_pitch_rgba ".8 .8 .8 .8"

seta scr_hud_pitch_thickness "2"

seta scr_hud_pitch_width "10"

seta scr_hud_pitch_x "320"

seta scr_hud_snap_auto "1"

seta scr_hud_snap_def "45"

seta scr_hud_snap_draw "1"

seta scr_hud_snap_h "7"

seta scr_hud_snap_rgba1 "0.1 1 1 .5"

seta scr_hud_snap_rgba2 ".05 .05 .05 .2"

seta scr_hud_snap_speed "0"

seta scr_hud_snap_y "245"





Snapzones

How do snapzones and strafe accel work in defrag? (layman guide)

entry 1

entry 2

entry 3

entry 4

Why are the small (aka narrow) snapzones useful?

Let's take the colours that I use in my HUD as a reference:

entry 2

entry 3

entry 4

Drop Down Title 1

entry 1

entry 2

entry 3

entry 4

Testimonials