Chivalry: Medieval Warfare

Chivalry: Medieval Warfare

Not enough ratings
Getting In Touch With Your .ini
By
For many years the Chiv community has long neglected their ini's. Some are disgusted by it, some are afraid of it, but most are just plain ignorant of it. I am here to reunite you with your .ini.
3
   
Award
Favorite
Favorited
Unfavorite
Intro
What I will share with you here is long forgotten knowledge that I unearthed. Whether you are new or old, it would be well worth your time to experiment with this guide.

The Source

For a basic understanding of what you can do with the UDKPlayerInput.ini see this page:
https://docs.unrealengine.com/udk/Three/KeyBinds.html

This page also has all mapable keys for the game.
Mod Keys
In UDKPlayerInput.ini:

There exists 4 Mod keys:
-Alt
-Control
-Shift
-User defined key

What the Mod key does is instantly activates or deactivates a set of keybinds.

At line 20 of the ini file you will see the line
ModKey=... AlternateModKey=...
This is where you define your personal Modkey.

I use the Modkeys extensively in Chivalry, either to change my mouse speed on the fly, to change movement styles, or to Feint, parry, and block depending on the context that I am in.

How to use a mod key to instantly crank up your mouse sensitivity...
Let us look at the binding for "MouseX" and "MouseY"
Bindings=(Name="MouseX",SecondaryKey=,Command="...",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="MouseY",SecondaryKey=,Command="...",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown")
-The default MouseX and MouseY commands will look something like the above with some command in the quotes.
-We want to have 2 entries for MouseX and 2 bindings for MouseY, so you must duplicate both commands as shown

#normal speed Bindings=(Name="MouseX",SecondaryKey=,Command="...",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="MouseY",SecondaryKey=,Command="...",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") #fast speed Bindings= (Name="MouseX",SecondaryKey=,Command="...",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="MouseY",SecondaryKey=,Command="...",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown")
In the fast speed section you want to replace the command in "..." with your a higher sensitivity preference. The command that belongs here takes the form of:
Count bXAxis |Axis aMouseX Speed=1 AbsoluteAxis=0
for MouseX
or
Count bYAxis |Axis aMouseY Speed=1 AbsoluteAxis=0
for MouseY
I prefer to keep Speed=1 and change AbsoluteAxis=128, feel free to experiment with different values.

Lastly to make the keybind function as intended you have to change "Mod=False" to "Mod=True" within the fast speed section for both MouseX and MouseY keybinds.

Save your ini and restart your game for the changes to come into effect. In game press your mod key and watch the magic happen.

Remember you can use Alt, Shift, and Control, and all combinations off these three to mod keys to trigger any keybind change you want! That is insanely powerful especially if you know how to remap those keys on your keyboard!

How to Block, feint, and/or parry with RightMouseButton
I made a context sensitive block/feint button, it can take some time to get used to, but can be worth your time if you are limited on buttons.
The way this works is you hold RightMouseButton at all times. Depending on your actions with LeftMouseButton, you will either block or feint releasing RightMouseButton.
See the comments in the code block for details. Keep in mind I have set my Mod key to LeftMouseButton
#If I press and release LeftMouseButton, releasing RightMouseButton will feint to parry Bindings=(Name="RightMouseButton",SecondaryKey=,Command="GBA_ForwardSpawn|GBA_ArrowCam|GBA_Aim|SpectatorFreeCam|PerformFeint|onrelease PerformFeint|onrelease doParry",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") #(optional)If I press and release LeftMouseButton while holding alt and/or shift, releasing RightMouseButton will feint to parry Bindings=(Name="RightMouseButton",SecondaryKey=,Command="GBA_ForwardSpawn|GBA_ArrowCam|GBA_Aim|SpectatorFreeCam|PerformFeint|onrelease PerformFeint|onrelease doParry",Control=False,Shift=True,Alt=True,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") #if I press and hold LeftMouseButton releasing RightMouseButton will feint. Bindings=(Name="RightMouseButton",SecondaryKey=,Command="GBA_ForwardSpawn|GBA_ArrowCam|GBA_Aim|SpectatorFreeCam|performfeint|onrelease PerformFeint",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=True,bIgnoreMod=False,Flag=,FriendlyName="Unknown")

You may notice that this form of feint only works with left mousebutton, so if you mousewheel stab, or overhead you wont be able to feint them with this method unless you do either of these:
1. use alt, shift, and control modkeys to change which attack gets assigned to leftmousebutton
2. keep a spare feint button (I use R for mine, theres no reason feint shouldnt be on R tbh)
Degrees of Freedom (DoF) Part 1
A key concept to understand movement in chivalry is this thing I call degrees of freedom (aka DoF). I define degrees of freedom as the amount of directions you can directly move your player in that is separate from rotation. In Chivalry, keyboard users are heavily limited in their DoF that controller players are not.

LOOK AT THE PICTURE (SEE THE PART OF BONE REMOVED)
Below is the DoF of a typical keyboarder (YOU). You have 3 degrees of sprinting motion indicated by the red arrows, and 8 degrees of walking


Below is the DoF of a Controller user (THEM). They have 256 × 256 = 65,536 possible combinations to walk in and about half that to run in (shown in red)


How do we quantify the advantage of a controller player? No one knows. But there is one way to think about it. Lets analyze how much angular distance it takes to rotate your player 180 degrees(as if you were retreating from an oncoming attack) assuming both controller and keyboarder were at the same mouse sensitivity....

A keyboarder would have to run diagonally after turning 135 degrees to escape an oncoming threat as soon as possible. (he is running holding w, he sees threat and wants to turn 180 as fast as possible, so he aligns W+A arrow in south direction)

A controller player would just need to turn slightly over 90 degrees and run to escape the same threat as soon as possible.

So in general controller players have at almost 50% extra time to reposition themselves in the face of an oncoming attack. This is not trivial, but the effect can be scaled down with higher mouse sensitivity (unless you are about to fire a projectile, then you are limited by the turn cap and the only thing that can help you is a controller)

So what can a keyboard player do to equalize this unfair advantage? What if they dont have a controller? What if they dont want to use a controller?

There are changes to the ini you can make to turn this into this:

Now even though a keyboarder still doesnt have the same amount of DoF as a controller player, he now has 2 additional DoF which when used correctly can allow him to escape swings with the same amount of time as a controller player.

How do we do this?

The secret is understanding what controller players are doing when they are sprinting at the limits of their DoF. Tilting an analog stick left or right at around 89 degrees while sprinting will put the player in a sprint state with a misaligned running animation. The running animation is just an artifact and has no effect on gameplay. The chase mechanic still functions normally because the game only cares about is who is sprinting and if they are sprinting in the same direction as you.

You can call it the JubiSlide, the slickback, glide, surf, side sprint whatever you want to call it...

There is the command you need to enable this motion:
Axis Abasey Speed=0.1

In console you would just use:
setbind W "Axis Abasey Speed=0.1"

Keep Axis Abasey Speed in between 0 and 1
The reason is because the direction of your movement is dependent on the ratio of your AbaseY and Astrafe values not the magnitude. Keeping these between 0 and 1 keeps things comparable to the controller.

The wise man may combine the mod keys with this movement to toggle between wide and narrow DoF:
#normal movement Bindings=(Name="W",SecondaryKey=,Command="Axis Abasey Speed=1",Control=False,Shift=False,Alt=false,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=false,bIgnoreMod=False,Flag=,FriendlyName="Unknown") #you can pick any mod key; control, shift,alt,or custom mod key to toggle the slickback, just set any one of them to true. Bindings=(Name="W",SecondaryKey=,Command="Axis Abasey Speed=0.1",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=True,bIgnoreMod=False,Flag="KBFlag_Movement",FriendlyName="MoveLeft")
Degrees of Freedom (DoF) Part 2
In this section we look a little deeper into the effects of DoF while sprinting.

The truth is, my diagrams from earlier are oversimplified and they underestimate the true limitations that keyboard users have.

True DoF
Lets look at this diagram from earlier:


The problem with this diagram is that assumes your horizontal and vertical speeds are the same. Because you cant sprint when holding A or D, your horizontal speed is locked at your walking speed whereas your forward speed from holding W is accelerating to max sprint speed. This causes your player to run at a diagonal much shallower than 45 degrees. So the true diagram is different for every class.

If I were to show the true degrees of freedom for a keyboard archer it would look like this:


The archer's speed stats are as follows
-base forward sprint speed is 260units/s.
-horizontal speed is 160units/s
-max forward sprint speed is 330units/s.

If u do simple trig: Arctan(forwardspeed/horizontal speed)
You can calculate that the initial angle of W+D is 58 degrees and the final angle is 64 degrees (which archer reaches after about 5 seconds of sprint). SO not only does moving diagonally lower your degrees of freedom, but it also causes your player to run in an arc instead of a straight line!

DoF Compression

If your player is slower than archer, your DoF is a few degrees wider and if you are faster, your DoF are slightly compressed.

Because of the compression of the DoF, this contributes to even more time lost in rotation from trying to turn away from an incoming attack:


Controller users are also subject to compression of DoF but it isnt as severe because they still have much more DoF than a keyboard user. The DoF compression for a controller player is below:

In my experience the minimum sprint angle for a controller is between 5 and 10 degrees. From base sprint to full sprint you can expect to lose 2 or 3 DoF on a controller indicated by the arc on the edges of the red region.
To calculate the controller's DOF I use a modification of the same equation:
Arctan([Xspeed*Xinput]/[Yspeed*Yinput])=direction traveled
X and Y input are just the values of the analog stick input, which correspond to astrafe speed and abasey speed values respectively.

A 9 degree sprint is what you get when you set W = axis Abasey speed=0.1 when A or D is set to axis astrafe speed =1 from the previous section. It becomes 11 degrees at full sprint as archer.

What is the goal?
We want to expand our DoF to better match that of the controller user. This would make the game fair for everyone and bridge the gap between controller and keyboard users.
We need to turn this into this:
7 DoF Sprint
Below is the code for the template to having 7 DoF Sprint. (Its really 9 but two of the combinations will never be used.)

There is one thing you should know, I have acclimated to a different set of binds from you. I use different keys to strafe, instead of A and D, I use Q and E. Most of you probably feint and use with Q and E, I honestly recommend you bind R to both Feint and Use as it makes more sense. I also use mousewheel up to jump and reprogrammed my keyboard to bind Alt to my Spacebar, that way I'm not imploding my hand while using the alt mod key. Mousewheel jump is useful for bhopping, a cool technique I came up with that allows you to sprint in one direction, look backwards, and maintain your top speed. This will have its own section soon.


The angles used in the code are (measured assuming top speed):
W=90 degrees = Xinput=0, Yinput=1
W+Q/E=~64 degrees= Xinput=1,Yinput=1
Alt+Q/E=~35 degrees=Xinput=1, Yinput=0.34
Alt+Q/E+S=~9 degrees=Xinput=1,Yinput=0.08

You can add even more angles if u read this guide and understand how it works, you have access to several mod keys to double your DoF beyond this if you wanted. Personally I use 10 DoF.

#Base
(when no mod keys are pressed=default control scheme)
#base Bindings=(Name="S",SecondaryKey=,Command="Axis Abasey Speed=-1",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Movement|KBFlag_Movement",FriendlyName="MoveBackward|MoveBackward") Bindings=(Name="Q",SecondaryKey=,Command="Axis aStrafe Speed=-1",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Utility",FriendlyName="Use") Bindings=(Name="E",SecondaryKey=,Command="Axis aStrafe Speed=1,Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Utility",FriendlyName="Use") Bindings=(Name="W",SecondaryKey=,Command="Axis Abasey Speed=1",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Movement",FriendlyName="MoveLeft")
S: Walk backwards, set to -1 default
Q: Strafe Left, set to -1 default
E: Strafe Right, set to 1 default
W: Move forward set to 1 default

#Alt
(when the alt mod key is held, feel free to use any mod key you want, you have alt, shift, control, and custom)

#alt Bindings=(Name="S",SecondaryKey=,Command="Axis Abasey Speed=-0.26",Control=False,Shift=False,Alt=True,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Movement|KBFlag_Movement",FriendlyName="MoveBackward|MoveBackward") Bindings=(Name="Q",SecondaryKey=,Command="Axis aStrafe Speed=-1 |Axis Abasey Speed=0.34",Control=False,Shift=False,Alt=True,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Utility",FriendlyName="Use") Bindings=(Name="E",SecondaryKey=,Command="Axis aStrafe Speed=1 |Axis Abasey Speed=0.34",Control=False,Shift=False,Alt=True,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Utility",FriendlyName="Use") Bindings=(Name="W",SecondaryKey=,Command="Axis Abasey Speed=0.66",Control=False,Shift=False,Alt=True,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Movement",FriendlyName="MoveLeft")

S:Axis Abasey Speed=-.26
When we hold S in this mode we want to activate our side sprint DoF. To do this we need to pick a number such that when Q or E is held, Both Abasy components added together will result in a value of 0.08. I chose s=-0.26.

Q: Axis aStrafe Speed=-1 | Axis Abasey Speed=0.34
When you hold Alt+Q we will run diagonally leftward at an angle of 35 degrees, so we have a strafe component and a forward component. aStrafe speed is our Xinput and our Yinput is abasey speed.

E:Axis aStrafe Speed=1 |Axis Abasey Speed=0.34
Same explanation as Q but for Right Diagonal run

W: Axis Abasey Speed=0.66
We choose 0.66 so that when we press W+E or W+Q, our abasey speeds add up to equal 1 and we run at 64 degrees just like the default case. If you choose you can pick a different abasey speed here which will give you 2 more DoF of your choice.

The two DoFs that arent used? Alt+W+S+Q/E, some people wont even be able to input this many keys on their keyboard. Pressing Alt+W+S+E/Q equates to about 56 degree movement. Its better to just change W abasey speed than to use this key combination to get that direction. Its not a comfortable bind.
To Be Continued...
-Using Mouse movement in Chivalry for speed preservation
-Instant 180s (just for fun not really useful for gameplay)
- the bunny hop
-the keybind matrix
-toggle hold projectile
-how to play chiv 1 handed
-cover different ini's besides udkplayerinput.ini?
-known glitches? maybe..

Miscellaneous Binds
Here are a collection of binds that I consider useful...

Double Use key (good for looting the ammo box, bad for almost everything else).
This will activate 'use' on key press and release so when you want to spam the ammo box or the torch you can at twice the rate you are used to. The problem with it is using balistas or catapults or picking up bombs will be annoying because when you release the use key you will stop using those tools. I also use R for reload and feints.
Bindings=(Name="R",SecondaryKey=,Command="PerformFeint|OnRelease PerformFeint|Reload|Use|OnRelease use|DropCarryItem",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Weapon",FriendlyName="Reload")

True toggle sprint
The ingame settings for toggle sprint sucks, I have a better way of keeping sprint on, bind sprintstate true on all your buttons, W, A, S, D...including shift. Apply the below binding to your other keys if you want. if you want to walk again you can use a mod key (like control, alt, and shift) to activate a separate set of binds for W,A,S,D but with sprintstate false binded to them.
Bindings=(Name="LeftShift",SecondaryKey=,Command="Sprintstate true|onrelease sprintstate true",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Movement",FriendlyName="Crouch")

toggle show debug
I use Numpad 5 to toggle show debug on/off
Bindings=(Name="NumpadFive",SecondaryKey=,Command="showdebug",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown")

Ez admin login
Dont feel like typing a password everytime to login as admin? use this
Bindings=(Name="NumpadFour",SecondaryKey=,Command="adminlogin passwordhere",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown")

Clear all ragdolls
Some projectiles are blocked by the corpses of your enemies and even teammates! use this to get rid of them so you can keep shooting the enemy
Bindings=(Name="Numpadzero",SecondaryKey=,Command="removeragdolls 100",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown")
Using Binds to set Binds
Using binds to set binds is useful for making toggle-able actions, for example say you wanted a 3 level Zoom key for archery...
3 levels: 64, 145, 120 (120 comes for free because transitioning to a fov higher than 120 will require a weapon swap.)
#I create an alias named zoom and define it to be 145 degrees using the "|" symbol I chain it with the setbind command to update J to the next alias Bindings=(Name="zoom",SecondaryKey=,Command="fov 145|setbind J Zoom1",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") # I set my min fov under alias zoom1 and use the "|" to chain it with a setbind command to make J Zoom again Bindings=(Name="Zoom1",SecondaryKey=,Command="fov 64|setbind J Zoom",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") #I set J to execute command Zoom1 Bindings=(Name="J",SecondaryKey=,Command="Zoom1",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown")

The problem with using the setbind command with a keybind is that it will stutter your game for a fraction of a second, so only use this for actions that you arent spamming otherwise you will have a hard time playing. I think thats because your are writing to the game file at the same time every time you activate the bind. From my testing there was no advantage to stuttering the game, everyone around you will be able to play normally, its just affects you client side.

Drawing tracers with the tap of a button
How I use Numpad6 to toggle on/off tracers
Bindings=(Name="tracer1",SecondaryKey=,Command="Aoc_drawtracer 1|setbind NumpadSix tracer0",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="tracer0",SecondaryKey=,Command="Aoc_drawtracer 0|setbind NumpadSix tracer1",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="NumpadSix",SecondaryKey=,Command="tracer0",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown")

Admin slomo commands
I am using Leftbracket to shift between slomo speeds incrementally.
Bindings=(Name="LeftBracket",SecondaryKey=,Command="slomo2",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag="KBFlag_Movement",FriendlyName="Dodge") Bindings=(Name="slomo0",SecondaryKey=,Command="pause",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="slomo1",SecondaryKey=,Command="aoc_slomo .1|setbind LeftBracket slomo4",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="slomo2",SecondaryKey=,Command="aoc_slomo .5|setbind LeftBracket slomo1",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="slomo3",SecondaryKey=,Command="aoc_slomo 1|setbind LeftBracket slomo2",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown") Bindings=(Name="slomo4",SecondaryKey=,Command="aoc_slomo 2|setbind LeftBracket slomo3",Control=False,Shift=False,Alt=False,bIgnoreCtrl=False,bIgnoreShift=False,bIgnoreAlt=False,Mod=False,bIgnoreMod=False,Flag=,FriendlyName="Unknown")

See how creative you can get with it.
1 Comments
Ranboob` 7 Oct @ 10:10pm 
unban bald.